@marktoflow/integrations 2.0.0-alpha.6 → 2.0.0-alpha.9
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 +738 -9
- package/dist/adapters/claude-agent-hooks.d.ts +176 -0
- package/dist/adapters/claude-agent-hooks.d.ts.map +1 -0
- package/dist/adapters/claude-agent-hooks.js +339 -0
- package/dist/adapters/claude-agent-hooks.js.map +1 -0
- package/dist/adapters/claude-agent-types.d.ts +426 -0
- package/dist/adapters/claude-agent-types.d.ts.map +1 -0
- package/dist/adapters/claude-agent-types.js +62 -0
- package/dist/adapters/claude-agent-types.js.map +1 -0
- package/dist/adapters/claude-agent-workflow.d.ts +393 -0
- package/dist/adapters/claude-agent-workflow.d.ts.map +1 -0
- package/dist/adapters/claude-agent-workflow.js +445 -0
- package/dist/adapters/claude-agent-workflow.js.map +1 -0
- package/dist/adapters/claude-agent.d.ts +171 -0
- package/dist/adapters/claude-agent.d.ts.map +1 -0
- package/dist/adapters/claude-agent.js +468 -0
- package/dist/adapters/claude-agent.js.map +1 -0
- package/dist/adapters/codex-types.d.ts +463 -0
- package/dist/adapters/codex-types.d.ts.map +1 -0
- package/dist/adapters/codex-types.js +53 -0
- package/dist/adapters/codex-types.js.map +1 -0
- package/dist/adapters/codex-workflow.d.ts +414 -0
- package/dist/adapters/codex-workflow.d.ts.map +1 -0
- package/dist/adapters/codex-workflow.js +470 -0
- package/dist/adapters/codex-workflow.js.map +1 -0
- package/dist/adapters/codex.d.ts +136 -0
- package/dist/adapters/codex.d.ts.map +1 -0
- package/dist/adapters/codex.js +390 -0
- package/dist/adapters/codex.js.map +1 -0
- package/dist/adapters/github-copilot-types.d.ts +1012 -0
- package/dist/adapters/github-copilot-types.d.ts.map +1 -0
- package/dist/adapters/github-copilot-types.js +80 -0
- package/dist/adapters/github-copilot-types.js.map +1 -0
- package/dist/adapters/github-copilot-workflow.d.ts +462 -0
- package/dist/adapters/github-copilot-workflow.d.ts.map +1 -0
- package/dist/adapters/github-copilot-workflow.js +473 -0
- package/dist/adapters/github-copilot-workflow.js.map +1 -0
- package/dist/adapters/github-copilot.d.ts +221 -37
- package/dist/adapters/github-copilot.d.ts.map +1 -1
- package/dist/adapters/github-copilot.js +336 -58
- package/dist/adapters/github-copilot.js.map +1 -1
- package/dist/adapters/opencode.d.ts +2 -0
- package/dist/adapters/opencode.d.ts.map +1 -1
- package/dist/adapters/opencode.js +6 -0
- package/dist/adapters/opencode.js.map +1 -1
- package/dist/index.d.ts +31 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +88 -1
- package/dist/index.js.map +1 -1
- package/dist/services/ai-browser.d.ts +112 -0
- package/dist/services/ai-browser.d.ts.map +1 -0
- package/dist/services/ai-browser.js +363 -0
- package/dist/services/ai-browser.js.map +1 -0
- package/dist/services/asana.d.ts +159 -0
- package/dist/services/asana.d.ts.map +1 -0
- package/dist/services/asana.js +196 -0
- package/dist/services/asana.js.map +1 -0
- package/dist/services/aws-s3.d.ts +89 -0
- package/dist/services/aws-s3.d.ts.map +1 -0
- package/dist/services/aws-s3.js +154 -0
- package/dist/services/aws-s3.js.map +1 -0
- package/dist/services/dropbox.d.ts +134 -0
- package/dist/services/dropbox.d.ts.map +1 -0
- package/dist/services/dropbox.js +190 -0
- package/dist/services/dropbox.js.map +1 -0
- package/dist/services/google-calendar.d.ts +220 -0
- package/dist/services/google-calendar.d.ts.map +1 -0
- package/dist/services/google-calendar.js +318 -0
- package/dist/services/google-calendar.js.map +1 -0
- package/dist/services/google-docs.d.ts +197 -0
- package/dist/services/google-docs.d.ts.map +1 -0
- package/dist/services/google-docs.js +293 -0
- package/dist/services/google-docs.js.map +1 -0
- package/dist/services/google-drive.d.ts +149 -0
- package/dist/services/google-drive.d.ts.map +1 -0
- package/dist/services/google-drive.js +288 -0
- package/dist/services/google-drive.js.map +1 -0
- package/dist/services/google-sheets.d.ts +165 -0
- package/dist/services/google-sheets.d.ts.map +1 -0
- package/dist/services/google-sheets.js +352 -0
- package/dist/services/google-sheets.js.map +1 -0
- package/dist/services/mailchimp.d.ts +169 -0
- package/dist/services/mailchimp.d.ts.map +1 -0
- package/dist/services/mailchimp.js +180 -0
- package/dist/services/mailchimp.js.map +1 -0
- package/dist/services/mysql.d.ts +91 -0
- package/dist/services/mysql.d.ts.map +1 -0
- package/dist/services/mysql.js +250 -0
- package/dist/services/mysql.js.map +1 -0
- package/dist/services/playwright.d.ts +678 -0
- package/dist/services/playwright.d.ts.map +1 -0
- package/dist/services/playwright.js +1141 -0
- package/dist/services/playwright.js.map +1 -0
- package/dist/services/postgres.d.ts +83 -0
- package/dist/services/postgres.d.ts.map +1 -0
- package/dist/services/postgres.js +230 -0
- package/dist/services/postgres.js.map +1 -0
- package/dist/services/sendgrid.d.ts +43 -0
- package/dist/services/sendgrid.d.ts.map +1 -0
- package/dist/services/sendgrid.js +87 -0
- package/dist/services/sendgrid.js.map +1 -0
- package/dist/services/shopify.d.ts +160 -0
- package/dist/services/shopify.d.ts.map +1 -0
- package/dist/services/shopify.js +166 -0
- package/dist/services/shopify.js.map +1 -0
- package/dist/services/stripe.d.ts +275 -0
- package/dist/services/stripe.d.ts.map +1 -0
- package/dist/services/stripe.js +229 -0
- package/dist/services/stripe.js.map +1 -0
- package/dist/services/supabase.d.ts +193 -0
- package/dist/services/supabase.d.ts.map +1 -0
- package/dist/services/supabase.js +328 -0
- package/dist/services/supabase.js.map +1 -0
- package/dist/services/teams.d.ts +224 -0
- package/dist/services/teams.d.ts.map +1 -0
- package/dist/services/teams.js +229 -0
- package/dist/services/teams.js.map +1 -0
- package/dist/services/telegram.d.ts +247 -0
- package/dist/services/telegram.d.ts.map +1 -0
- package/dist/services/telegram.js +247 -0
- package/dist/services/telegram.js.map +1 -0
- package/dist/services/trello.d.ts +160 -0
- package/dist/services/trello.d.ts.map +1 -0
- package/dist/services/trello.js +194 -0
- package/dist/services/trello.js.map +1 -0
- package/dist/services/twilio.d.ts +126 -0
- package/dist/services/twilio.d.ts.map +1 -0
- package/dist/services/twilio.js +153 -0
- package/dist/services/twilio.js.map +1 -0
- package/dist/services/whatsapp.d.ts +311 -0
- package/dist/services/whatsapp.d.ts.map +1 -0
- package/dist/services/whatsapp.js +253 -0
- package/dist/services/whatsapp.js.map +1 -0
- package/dist/services/zendesk.d.ts +134 -0
- package/dist/services/zendesk.d.ts.map +1 -0
- package/dist/services/zendesk.js +148 -0
- package/dist/services/zendesk.js.map +1 -0
- package/package.json +43 -5
- package/dist/claude-code.d.ts +0 -16
- package/dist/claude-code.d.ts.map +0 -1
- package/dist/claude-code.js +0 -56
- package/dist/claude-code.js.map +0 -1
- package/dist/github.d.ts +0 -3
- package/dist/github.d.ts.map +0 -1
- package/dist/github.js +0 -13
- package/dist/github.js.map +0 -1
- package/dist/jira.d.ts +0 -3
- package/dist/jira.d.ts.map +0 -1
- package/dist/jira.js +0 -21
- package/dist/jira.js.map +0 -1
- package/dist/ollama.d.ts +0 -3
- package/dist/ollama.d.ts.map +0 -1
- package/dist/ollama.js +0 -9
- package/dist/ollama.js.map +0 -1
- package/dist/opencode.d.ts +0 -19
- package/dist/opencode.d.ts.map +0 -1
- package/dist/opencode.js +0 -104
- package/dist/opencode.js.map +0 -1
- package/dist/script.d.ts +0 -3
- package/dist/script.d.ts.map +0 -1
- package/dist/script.js +0 -21
- package/dist/script.js.map +0 -1
- package/dist/slack.d.ts +0 -3
- package/dist/slack.d.ts.map +0 -1
- package/dist/slack.js +0 -11
- package/dist/slack.js.map +0 -1
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Agent SDK Hooks for marktoflow
|
|
3
|
+
*
|
|
4
|
+
* Provides pre-built hook configurations for common use cases:
|
|
5
|
+
* - Audit logging
|
|
6
|
+
* - Cost tracking
|
|
7
|
+
* - Approval workflows
|
|
8
|
+
* - File change monitoring
|
|
9
|
+
* - Security enforcement
|
|
10
|
+
*/
|
|
11
|
+
import { HookCallback, HookEvent, ToolPermissionHandler } from './claude-agent-types.js';
|
|
12
|
+
/**
|
|
13
|
+
* Audit log entry
|
|
14
|
+
*/
|
|
15
|
+
export interface AuditLogEntry {
|
|
16
|
+
timestamp: Date;
|
|
17
|
+
event: HookEvent;
|
|
18
|
+
toolName?: string;
|
|
19
|
+
toolInput?: Record<string, unknown>;
|
|
20
|
+
toolResponse?: string;
|
|
21
|
+
sessionId?: string;
|
|
22
|
+
error?: string;
|
|
23
|
+
duration?: number;
|
|
24
|
+
metadata?: Record<string, unknown>;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Audit logger interface
|
|
28
|
+
*/
|
|
29
|
+
export interface AuditLogger {
|
|
30
|
+
log(entry: AuditLogEntry): Promise<void>;
|
|
31
|
+
flush(): Promise<void>;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Console audit logger (default)
|
|
35
|
+
*/
|
|
36
|
+
export declare class ConsoleAuditLogger implements AuditLogger {
|
|
37
|
+
private prefix;
|
|
38
|
+
constructor(prefix?: string);
|
|
39
|
+
log(entry: AuditLogEntry): Promise<void>;
|
|
40
|
+
flush(): Promise<void>;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* File audit logger
|
|
44
|
+
*/
|
|
45
|
+
export declare class FileAuditLogger implements AuditLogger {
|
|
46
|
+
private filePath;
|
|
47
|
+
private buffer;
|
|
48
|
+
private bufferSize;
|
|
49
|
+
constructor(filePath: string, bufferSize?: number);
|
|
50
|
+
log(entry: AuditLogEntry): Promise<void>;
|
|
51
|
+
flush(): Promise<void>;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Create audit logging hooks
|
|
55
|
+
*/
|
|
56
|
+
export declare function createAuditHooks(logger?: AuditLogger): Partial<Record<HookEvent, HookCallback[]>>;
|
|
57
|
+
/**
|
|
58
|
+
* Cost tracker for monitoring spending
|
|
59
|
+
*/
|
|
60
|
+
export interface CostTracker {
|
|
61
|
+
/** Current total cost in USD */
|
|
62
|
+
totalCostUsd: number;
|
|
63
|
+
/** Cost per model */
|
|
64
|
+
costByModel: Record<string, number>;
|
|
65
|
+
/** Tool execution counts */
|
|
66
|
+
toolCounts: Record<string, number>;
|
|
67
|
+
/** Start time */
|
|
68
|
+
startTime: Date;
|
|
69
|
+
/** Number of API calls */
|
|
70
|
+
apiCalls: number;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Cost tracking callback
|
|
74
|
+
*/
|
|
75
|
+
export type CostCallback = (tracker: CostTracker) => void | Promise<void>;
|
|
76
|
+
/**
|
|
77
|
+
* Create a cost tracker
|
|
78
|
+
*/
|
|
79
|
+
export declare function createCostTracker(): CostTracker;
|
|
80
|
+
/**
|
|
81
|
+
* Create cost tracking hooks
|
|
82
|
+
*/
|
|
83
|
+
export declare function createCostTrackingHooks(tracker: CostTracker, callbacks?: {
|
|
84
|
+
onToolUse?: CostCallback;
|
|
85
|
+
onBudgetWarning?: CostCallback;
|
|
86
|
+
budgetWarningThreshold?: number;
|
|
87
|
+
}): Partial<Record<HookEvent, HookCallback[]>>;
|
|
88
|
+
/**
|
|
89
|
+
* Approval request
|
|
90
|
+
*/
|
|
91
|
+
export interface ApprovalRequest {
|
|
92
|
+
toolName: string;
|
|
93
|
+
toolInput: Record<string, unknown>;
|
|
94
|
+
reason?: string;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Approval handler
|
|
98
|
+
*/
|
|
99
|
+
export type ApprovalHandler = (request: ApprovalRequest) => Promise<boolean>;
|
|
100
|
+
/**
|
|
101
|
+
* Create approval workflow hooks
|
|
102
|
+
*/
|
|
103
|
+
export declare function createApprovalHooks(approvalHandler: ApprovalHandler, toolsRequiringApproval?: string[]): Partial<Record<HookEvent, HookCallback[]>>;
|
|
104
|
+
/**
|
|
105
|
+
* File change record
|
|
106
|
+
*/
|
|
107
|
+
export interface FileChange {
|
|
108
|
+
timestamp: Date;
|
|
109
|
+
operation: 'read' | 'write' | 'edit';
|
|
110
|
+
filePath: string;
|
|
111
|
+
toolInput?: Record<string, unknown>;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* File change callback
|
|
115
|
+
*/
|
|
116
|
+
export type FileChangeCallback = (change: FileChange) => void | Promise<void>;
|
|
117
|
+
/**
|
|
118
|
+
* Create file monitoring hooks
|
|
119
|
+
*/
|
|
120
|
+
export declare function createFileMonitoringHooks(callback: FileChangeCallback): Partial<Record<HookEvent, HookCallback[]>>;
|
|
121
|
+
/**
|
|
122
|
+
* Security policy for tool execution
|
|
123
|
+
*/
|
|
124
|
+
export interface SecurityPolicy {
|
|
125
|
+
/** Blocked file patterns (glob) */
|
|
126
|
+
blockedPaths?: string[];
|
|
127
|
+
/** Blocked commands (regex) */
|
|
128
|
+
blockedCommands?: string[];
|
|
129
|
+
/** Allowed working directories */
|
|
130
|
+
allowedDirectories?: string[];
|
|
131
|
+
/** Maximum file size for writes (bytes) */
|
|
132
|
+
maxFileSize?: number;
|
|
133
|
+
/** Block network access */
|
|
134
|
+
blockNetwork?: boolean;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Create a security-enforcing permission handler
|
|
138
|
+
*/
|
|
139
|
+
export declare function createSecurityPermissionHandler(policy: SecurityPolicy): ToolPermissionHandler;
|
|
140
|
+
/**
|
|
141
|
+
* Preset hook configurations for common use cases
|
|
142
|
+
*/
|
|
143
|
+
export declare const PresetHooks: {
|
|
144
|
+
/**
|
|
145
|
+
* Development mode - permissive with logging
|
|
146
|
+
*/
|
|
147
|
+
development: (logger?: AuditLogger) => {
|
|
148
|
+
PreToolUse?: HookCallback[] | undefined;
|
|
149
|
+
PostToolUse?: HookCallback[] | undefined;
|
|
150
|
+
PostToolUseFailure?: HookCallback[] | undefined;
|
|
151
|
+
PermissionRequest?: HookCallback[] | undefined;
|
|
152
|
+
SessionStart?: HookCallback[] | undefined;
|
|
153
|
+
SessionEnd?: HookCallback[] | undefined;
|
|
154
|
+
Stop?: HookCallback[] | undefined;
|
|
155
|
+
};
|
|
156
|
+
/**
|
|
157
|
+
* Production mode - strict with approval and monitoring
|
|
158
|
+
*/
|
|
159
|
+
production: (approvalHandler: ApprovalHandler, logger?: AuditLogger) => Partial<Record<HookEvent, HookCallback[]>>;
|
|
160
|
+
/**
|
|
161
|
+
* CI/CD mode - automated with cost tracking
|
|
162
|
+
*/
|
|
163
|
+
cicd: (costTracker: CostTracker, maxBudget?: number) => Partial<Record<HookEvent, HookCallback[]>>;
|
|
164
|
+
/**
|
|
165
|
+
* Secure mode - strict security with file monitoring
|
|
166
|
+
*/
|
|
167
|
+
secure: (policy: SecurityPolicy, fileChangeCallback?: FileChangeCallback) => {
|
|
168
|
+
hooks: Partial<Record<HookEvent, HookCallback[]>>;
|
|
169
|
+
canUseTool: ToolPermissionHandler;
|
|
170
|
+
};
|
|
171
|
+
};
|
|
172
|
+
/**
|
|
173
|
+
* Merge multiple hook configurations
|
|
174
|
+
*/
|
|
175
|
+
export declare function mergeHooks(...hookConfigs: Array<Partial<Record<HookEvent, HookCallback[]>>>): Partial<Record<HookEvent, HookCallback[]>>;
|
|
176
|
+
//# sourceMappingURL=claude-agent-hooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-agent-hooks.d.ts","sourceRoot":"","sources":["../../src/adapters/claude-agent-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,YAAY,EAGZ,SAAS,EACT,qBAAqB,EAEtB,MAAM,yBAAyB,CAAC;AAMjC;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,IAAI,CAAC;IAChB,KAAK,EAAE,SAAS,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED;;GAEG;AACH,qBAAa,kBAAmB,YAAW,WAAW;IACpD,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,SAAkB;IAI9B,GAAG,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAYxC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B;AAED;;GAEG;AACH,qBAAa,eAAgB,YAAW,WAAW;IACjD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,UAAU,CAAS;gBAEf,QAAQ,EAAE,MAAM,EAAE,UAAU,SAAK;IAKvC,GAAG,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAQxC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAS7B;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,GAAE,WAAsC,GAAG,OAAO,CACvF,MAAM,CAAC,SAAS,EAAE,YAAY,EAAE,CAAC,CAClC,CAyBA;AAMD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,gCAAgC;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,qBAAqB;IACrB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,4BAA4B;IAC5B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,iBAAiB;IACjB,SAAS,EAAE,IAAI,CAAC;IAChB,0BAA0B;IAC1B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1E;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,WAAW,CAQ/C;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,WAAW,EACpB,SAAS,CAAC,EAAE;IACV,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,eAAe,CAAC,EAAE,YAAY,CAAC;IAC/B,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC,GACA,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC,CAqC5C;AAMD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE,eAAe,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAE7E;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,eAAe,EAAE,eAAe,EAChC,sBAAsB,GAAE,MAAM,EAA8B,GAC3D,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC,CA6B5C;AAMD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE9E;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAC9E,MAAM,CAAC,SAAS,EAAE,YAAY,EAAE,CAAC,CAClC,CA6BA;AAMD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,mCAAmC;IACnC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,+BAA+B;IAC/B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,kCAAkC;IAClC,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,2CAA2C;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2BAA2B;IAC3B,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,cAAc,GAAG,qBAAqB,CAsD7F;AAmBD;;GAEG;AACH,eAAO,MAAM,WAAW;IACtB;;OAEG;2BACoB,WAAW;;;;;;;;;IAIlC;;OAEG;kCAC2B,eAAe,WAAW,WAAW;IAmBnE;;OAEG;wBACiB,WAAW;IAoB/B;;OAEG;qBACc,cAAc,uBAAuB,kBAAkB;;;;CAgBzE,CAAC;AAMF;;GAEG;AACH,wBAAgB,UAAU,CACxB,GAAG,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,GAChE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC,CAW5C"}
|
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Agent SDK Hooks for marktoflow
|
|
3
|
+
*
|
|
4
|
+
* Provides pre-built hook configurations for common use cases:
|
|
5
|
+
* - Audit logging
|
|
6
|
+
* - Cost tracking
|
|
7
|
+
* - Approval workflows
|
|
8
|
+
* - File change monitoring
|
|
9
|
+
* - Security enforcement
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Console audit logger (default)
|
|
13
|
+
*/
|
|
14
|
+
export class ConsoleAuditLogger {
|
|
15
|
+
prefix;
|
|
16
|
+
constructor(prefix = '[Agent Audit]') {
|
|
17
|
+
this.prefix = prefix;
|
|
18
|
+
}
|
|
19
|
+
async log(entry) {
|
|
20
|
+
const timestamp = entry.timestamp.toISOString();
|
|
21
|
+
const toolInfo = entry.toolName ? ` tool=${entry.toolName}` : '';
|
|
22
|
+
const errorInfo = entry.error ? ` error=${entry.error}` : '';
|
|
23
|
+
console.log(`${this.prefix} ${timestamp} ${entry.event}${toolInfo}${errorInfo}`);
|
|
24
|
+
if (entry.toolInput) {
|
|
25
|
+
console.log(`${this.prefix} input:`, JSON.stringify(entry.toolInput, null, 2));
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
async flush() {
|
|
29
|
+
// Console logger doesn't need flushing
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* File audit logger
|
|
34
|
+
*/
|
|
35
|
+
export class FileAuditLogger {
|
|
36
|
+
filePath;
|
|
37
|
+
buffer = [];
|
|
38
|
+
bufferSize;
|
|
39
|
+
constructor(filePath, bufferSize = 10) {
|
|
40
|
+
this.filePath = filePath;
|
|
41
|
+
this.bufferSize = bufferSize;
|
|
42
|
+
}
|
|
43
|
+
async log(entry) {
|
|
44
|
+
this.buffer.push(entry);
|
|
45
|
+
if (this.buffer.length >= this.bufferSize) {
|
|
46
|
+
await this.flush();
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
async flush() {
|
|
50
|
+
if (this.buffer.length === 0)
|
|
51
|
+
return;
|
|
52
|
+
const { appendFile } = await import('node:fs/promises');
|
|
53
|
+
const lines = this.buffer.map((e) => JSON.stringify(e)).join('\n') + '\n';
|
|
54
|
+
await appendFile(this.filePath, lines);
|
|
55
|
+
this.buffer = [];
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Create audit logging hooks
|
|
60
|
+
*/
|
|
61
|
+
export function createAuditHooks(logger = new ConsoleAuditLogger()) {
|
|
62
|
+
const createLogHook = (event) => ({
|
|
63
|
+
hooks: [
|
|
64
|
+
async (input) => {
|
|
65
|
+
await logger.log({
|
|
66
|
+
timestamp: new Date(),
|
|
67
|
+
event,
|
|
68
|
+
toolName: input.tool_name,
|
|
69
|
+
toolInput: input.tool_input,
|
|
70
|
+
toolResponse: input.tool_response,
|
|
71
|
+
sessionId: input.session_id,
|
|
72
|
+
error: input.error,
|
|
73
|
+
});
|
|
74
|
+
return { continue: true };
|
|
75
|
+
},
|
|
76
|
+
],
|
|
77
|
+
});
|
|
78
|
+
return {
|
|
79
|
+
PreToolUse: [createLogHook('PreToolUse')],
|
|
80
|
+
PostToolUse: [createLogHook('PostToolUse')],
|
|
81
|
+
PostToolUseFailure: [createLogHook('PostToolUseFailure')],
|
|
82
|
+
SessionStart: [createLogHook('SessionStart')],
|
|
83
|
+
SessionEnd: [createLogHook('SessionEnd')],
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Create a cost tracker
|
|
88
|
+
*/
|
|
89
|
+
export function createCostTracker() {
|
|
90
|
+
return {
|
|
91
|
+
totalCostUsd: 0,
|
|
92
|
+
costByModel: {},
|
|
93
|
+
toolCounts: {},
|
|
94
|
+
startTime: new Date(),
|
|
95
|
+
apiCalls: 0,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Create cost tracking hooks
|
|
100
|
+
*/
|
|
101
|
+
export function createCostTrackingHooks(tracker, callbacks) {
|
|
102
|
+
const budgetWarningThreshold = callbacks?.budgetWarningThreshold || 1.0; // $1 default warning
|
|
103
|
+
return {
|
|
104
|
+
PreToolUse: [
|
|
105
|
+
{
|
|
106
|
+
hooks: [
|
|
107
|
+
async (input) => {
|
|
108
|
+
if (input.tool_name) {
|
|
109
|
+
tracker.toolCounts[input.tool_name] = (tracker.toolCounts[input.tool_name] || 0) + 1;
|
|
110
|
+
}
|
|
111
|
+
return { continue: true };
|
|
112
|
+
},
|
|
113
|
+
],
|
|
114
|
+
},
|
|
115
|
+
],
|
|
116
|
+
PostToolUse: [
|
|
117
|
+
{
|
|
118
|
+
hooks: [
|
|
119
|
+
async (_input) => {
|
|
120
|
+
tracker.apiCalls++;
|
|
121
|
+
if (callbacks?.onToolUse) {
|
|
122
|
+
await callbacks.onToolUse(tracker);
|
|
123
|
+
}
|
|
124
|
+
// Check budget warning
|
|
125
|
+
if (tracker.totalCostUsd >= budgetWarningThreshold && callbacks?.onBudgetWarning) {
|
|
126
|
+
await callbacks.onBudgetWarning(tracker);
|
|
127
|
+
}
|
|
128
|
+
return { continue: true };
|
|
129
|
+
},
|
|
130
|
+
],
|
|
131
|
+
},
|
|
132
|
+
],
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Create approval workflow hooks
|
|
137
|
+
*/
|
|
138
|
+
export function createApprovalHooks(approvalHandler, toolsRequiringApproval = ['Bash', 'Write', 'Edit']) {
|
|
139
|
+
return {
|
|
140
|
+
PreToolUse: [
|
|
141
|
+
{
|
|
142
|
+
matcher: toolsRequiringApproval.join('|'),
|
|
143
|
+
hooks: [
|
|
144
|
+
async (input) => {
|
|
145
|
+
if (!input.tool_name || !toolsRequiringApproval.includes(input.tool_name)) {
|
|
146
|
+
return { continue: true };
|
|
147
|
+
}
|
|
148
|
+
const approved = await approvalHandler({
|
|
149
|
+
toolName: input.tool_name,
|
|
150
|
+
toolInput: input.tool_input || {},
|
|
151
|
+
});
|
|
152
|
+
if (!approved) {
|
|
153
|
+
return {
|
|
154
|
+
continue: false,
|
|
155
|
+
message: `Tool ${input.tool_name} was not approved`,
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
return { continue: true };
|
|
159
|
+
},
|
|
160
|
+
],
|
|
161
|
+
},
|
|
162
|
+
],
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Create file monitoring hooks
|
|
167
|
+
*/
|
|
168
|
+
export function createFileMonitoringHooks(callback) {
|
|
169
|
+
const fileTools = ['Read', 'Write', 'Edit'];
|
|
170
|
+
return {
|
|
171
|
+
PostToolUse: [
|
|
172
|
+
{
|
|
173
|
+
matcher: fileTools.join('|'),
|
|
174
|
+
hooks: [
|
|
175
|
+
async (input) => {
|
|
176
|
+
if (!input.tool_name || !fileTools.includes(input.tool_name)) {
|
|
177
|
+
return { continue: true };
|
|
178
|
+
}
|
|
179
|
+
const filePath = input.tool_input?.['file_path'] || 'unknown';
|
|
180
|
+
const operation = input.tool_name.toLowerCase();
|
|
181
|
+
await callback({
|
|
182
|
+
timestamp: new Date(),
|
|
183
|
+
operation,
|
|
184
|
+
filePath,
|
|
185
|
+
toolInput: input.tool_input,
|
|
186
|
+
});
|
|
187
|
+
return { continue: true };
|
|
188
|
+
},
|
|
189
|
+
],
|
|
190
|
+
},
|
|
191
|
+
],
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Create a security-enforcing permission handler
|
|
196
|
+
*/
|
|
197
|
+
export function createSecurityPermissionHandler(policy) {
|
|
198
|
+
return async (toolName, input) => {
|
|
199
|
+
// Check file path restrictions
|
|
200
|
+
if (['Read', 'Write', 'Edit'].includes(toolName)) {
|
|
201
|
+
const filePath = input['file_path'];
|
|
202
|
+
if (policy.blockedPaths) {
|
|
203
|
+
for (const pattern of policy.blockedPaths) {
|
|
204
|
+
if (matchesPattern(filePath, pattern)) {
|
|
205
|
+
return {
|
|
206
|
+
behavior: 'deny',
|
|
207
|
+
message: `Access to ${filePath} is blocked by security policy`,
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
if (policy.allowedDirectories) {
|
|
213
|
+
const allowed = policy.allowedDirectories.some((dir) => filePath.startsWith(dir));
|
|
214
|
+
if (!allowed) {
|
|
215
|
+
return {
|
|
216
|
+
behavior: 'deny',
|
|
217
|
+
message: `Access to ${filePath} is outside allowed directories`,
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
// Check command restrictions
|
|
223
|
+
if (toolName === 'Bash') {
|
|
224
|
+
const command = input['command'];
|
|
225
|
+
if (policy.blockedCommands) {
|
|
226
|
+
for (const pattern of policy.blockedCommands) {
|
|
227
|
+
if (new RegExp(pattern).test(command)) {
|
|
228
|
+
return {
|
|
229
|
+
behavior: 'deny',
|
|
230
|
+
message: `Command blocked by security policy: ${pattern}`,
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
// Check network restrictions
|
|
237
|
+
if (policy.blockNetwork && ['WebSearch', 'WebFetch'].includes(toolName)) {
|
|
238
|
+
return {
|
|
239
|
+
behavior: 'deny',
|
|
240
|
+
message: 'Network access is blocked by security policy',
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
return { behavior: 'allow' };
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Simple glob pattern matching
|
|
248
|
+
*/
|
|
249
|
+
function matchesPattern(path, pattern) {
|
|
250
|
+
// Convert glob to regex
|
|
251
|
+
const regex = pattern
|
|
252
|
+
.replace(/\*/g, '.*')
|
|
253
|
+
.replace(/\?/g, '.')
|
|
254
|
+
.replace(/\//g, '\\/');
|
|
255
|
+
return new RegExp(`^${regex}$`).test(path);
|
|
256
|
+
}
|
|
257
|
+
// ============================================================================
|
|
258
|
+
// Preset Hook Configurations
|
|
259
|
+
// ============================================================================
|
|
260
|
+
/**
|
|
261
|
+
* Preset hook configurations for common use cases
|
|
262
|
+
*/
|
|
263
|
+
export const PresetHooks = {
|
|
264
|
+
/**
|
|
265
|
+
* Development mode - permissive with logging
|
|
266
|
+
*/
|
|
267
|
+
development: (logger) => ({
|
|
268
|
+
...createAuditHooks(logger || new ConsoleAuditLogger()),
|
|
269
|
+
}),
|
|
270
|
+
/**
|
|
271
|
+
* Production mode - strict with approval and monitoring
|
|
272
|
+
*/
|
|
273
|
+
production: (approvalHandler, logger) => {
|
|
274
|
+
const hooks = {};
|
|
275
|
+
// Merge audit hooks
|
|
276
|
+
const auditHooks = createAuditHooks(logger || new FileAuditLogger('./agent-audit.log'));
|
|
277
|
+
for (const [event, callbacks] of Object.entries(auditHooks)) {
|
|
278
|
+
hooks[event] = callbacks;
|
|
279
|
+
}
|
|
280
|
+
// Merge approval hooks
|
|
281
|
+
const approval = createApprovalHooks(approvalHandler);
|
|
282
|
+
for (const [event, callbacks] of Object.entries(approval)) {
|
|
283
|
+
const existing = hooks[event] || [];
|
|
284
|
+
hooks[event] = [...existing, ...callbacks];
|
|
285
|
+
}
|
|
286
|
+
return hooks;
|
|
287
|
+
},
|
|
288
|
+
/**
|
|
289
|
+
* CI/CD mode - automated with cost tracking
|
|
290
|
+
*/
|
|
291
|
+
cicd: (costTracker, maxBudget = 5.0) => {
|
|
292
|
+
const hooks = {};
|
|
293
|
+
// Cost tracking
|
|
294
|
+
const costHooks = createCostTrackingHooks(costTracker, {
|
|
295
|
+
budgetWarningThreshold: maxBudget * 0.8,
|
|
296
|
+
onBudgetWarning: async (tracker) => {
|
|
297
|
+
console.warn(`[CI/CD] Budget warning: $${tracker.totalCostUsd.toFixed(2)} / $${maxBudget.toFixed(2)}`);
|
|
298
|
+
},
|
|
299
|
+
});
|
|
300
|
+
for (const [event, callbacks] of Object.entries(costHooks)) {
|
|
301
|
+
hooks[event] = callbacks;
|
|
302
|
+
}
|
|
303
|
+
return hooks;
|
|
304
|
+
},
|
|
305
|
+
/**
|
|
306
|
+
* Secure mode - strict security with file monitoring
|
|
307
|
+
*/
|
|
308
|
+
secure: (policy, fileChangeCallback) => {
|
|
309
|
+
const hooks = {};
|
|
310
|
+
// File monitoring
|
|
311
|
+
if (fileChangeCallback) {
|
|
312
|
+
const fileHooks = createFileMonitoringHooks(fileChangeCallback);
|
|
313
|
+
for (const [event, callbacks] of Object.entries(fileHooks)) {
|
|
314
|
+
hooks[event] = callbacks;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
return {
|
|
318
|
+
hooks,
|
|
319
|
+
canUseTool: createSecurityPermissionHandler(policy),
|
|
320
|
+
};
|
|
321
|
+
},
|
|
322
|
+
};
|
|
323
|
+
// ============================================================================
|
|
324
|
+
// Utility: Merge Multiple Hook Configurations
|
|
325
|
+
// ============================================================================
|
|
326
|
+
/**
|
|
327
|
+
* Merge multiple hook configurations
|
|
328
|
+
*/
|
|
329
|
+
export function mergeHooks(...hookConfigs) {
|
|
330
|
+
const merged = {};
|
|
331
|
+
for (const config of hookConfigs) {
|
|
332
|
+
for (const [event, callbacks] of Object.entries(config)) {
|
|
333
|
+
const existing = merged[event] || [];
|
|
334
|
+
merged[event] = [...existing, ...(callbacks || [])];
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
return merged;
|
|
338
|
+
}
|
|
339
|
+
//# sourceMappingURL=claude-agent-hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-agent-hooks.js","sourceRoot":"","sources":["../../src/adapters/claude-agent-hooks.ts"],"names":[],"mappings":"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"}
|