@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.
Files changed (166) hide show
  1. package/README.md +738 -9
  2. package/dist/adapters/claude-agent-hooks.d.ts +176 -0
  3. package/dist/adapters/claude-agent-hooks.d.ts.map +1 -0
  4. package/dist/adapters/claude-agent-hooks.js +339 -0
  5. package/dist/adapters/claude-agent-hooks.js.map +1 -0
  6. package/dist/adapters/claude-agent-types.d.ts +426 -0
  7. package/dist/adapters/claude-agent-types.d.ts.map +1 -0
  8. package/dist/adapters/claude-agent-types.js +62 -0
  9. package/dist/adapters/claude-agent-types.js.map +1 -0
  10. package/dist/adapters/claude-agent-workflow.d.ts +393 -0
  11. package/dist/adapters/claude-agent-workflow.d.ts.map +1 -0
  12. package/dist/adapters/claude-agent-workflow.js +445 -0
  13. package/dist/adapters/claude-agent-workflow.js.map +1 -0
  14. package/dist/adapters/claude-agent.d.ts +171 -0
  15. package/dist/adapters/claude-agent.d.ts.map +1 -0
  16. package/dist/adapters/claude-agent.js +468 -0
  17. package/dist/adapters/claude-agent.js.map +1 -0
  18. package/dist/adapters/codex-types.d.ts +463 -0
  19. package/dist/adapters/codex-types.d.ts.map +1 -0
  20. package/dist/adapters/codex-types.js +53 -0
  21. package/dist/adapters/codex-types.js.map +1 -0
  22. package/dist/adapters/codex-workflow.d.ts +414 -0
  23. package/dist/adapters/codex-workflow.d.ts.map +1 -0
  24. package/dist/adapters/codex-workflow.js +470 -0
  25. package/dist/adapters/codex-workflow.js.map +1 -0
  26. package/dist/adapters/codex.d.ts +136 -0
  27. package/dist/adapters/codex.d.ts.map +1 -0
  28. package/dist/adapters/codex.js +390 -0
  29. package/dist/adapters/codex.js.map +1 -0
  30. package/dist/adapters/github-copilot-types.d.ts +1012 -0
  31. package/dist/adapters/github-copilot-types.d.ts.map +1 -0
  32. package/dist/adapters/github-copilot-types.js +80 -0
  33. package/dist/adapters/github-copilot-types.js.map +1 -0
  34. package/dist/adapters/github-copilot-workflow.d.ts +462 -0
  35. package/dist/adapters/github-copilot-workflow.d.ts.map +1 -0
  36. package/dist/adapters/github-copilot-workflow.js +473 -0
  37. package/dist/adapters/github-copilot-workflow.js.map +1 -0
  38. package/dist/adapters/github-copilot.d.ts +221 -37
  39. package/dist/adapters/github-copilot.d.ts.map +1 -1
  40. package/dist/adapters/github-copilot.js +336 -58
  41. package/dist/adapters/github-copilot.js.map +1 -1
  42. package/dist/adapters/opencode.d.ts +2 -0
  43. package/dist/adapters/opencode.d.ts.map +1 -1
  44. package/dist/adapters/opencode.js +6 -0
  45. package/dist/adapters/opencode.js.map +1 -1
  46. package/dist/index.d.ts +31 -1
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js +88 -1
  49. package/dist/index.js.map +1 -1
  50. package/dist/services/ai-browser.d.ts +112 -0
  51. package/dist/services/ai-browser.d.ts.map +1 -0
  52. package/dist/services/ai-browser.js +363 -0
  53. package/dist/services/ai-browser.js.map +1 -0
  54. package/dist/services/asana.d.ts +159 -0
  55. package/dist/services/asana.d.ts.map +1 -0
  56. package/dist/services/asana.js +196 -0
  57. package/dist/services/asana.js.map +1 -0
  58. package/dist/services/aws-s3.d.ts +89 -0
  59. package/dist/services/aws-s3.d.ts.map +1 -0
  60. package/dist/services/aws-s3.js +154 -0
  61. package/dist/services/aws-s3.js.map +1 -0
  62. package/dist/services/dropbox.d.ts +134 -0
  63. package/dist/services/dropbox.d.ts.map +1 -0
  64. package/dist/services/dropbox.js +190 -0
  65. package/dist/services/dropbox.js.map +1 -0
  66. package/dist/services/google-calendar.d.ts +220 -0
  67. package/dist/services/google-calendar.d.ts.map +1 -0
  68. package/dist/services/google-calendar.js +318 -0
  69. package/dist/services/google-calendar.js.map +1 -0
  70. package/dist/services/google-docs.d.ts +197 -0
  71. package/dist/services/google-docs.d.ts.map +1 -0
  72. package/dist/services/google-docs.js +293 -0
  73. package/dist/services/google-docs.js.map +1 -0
  74. package/dist/services/google-drive.d.ts +149 -0
  75. package/dist/services/google-drive.d.ts.map +1 -0
  76. package/dist/services/google-drive.js +288 -0
  77. package/dist/services/google-drive.js.map +1 -0
  78. package/dist/services/google-sheets.d.ts +165 -0
  79. package/dist/services/google-sheets.d.ts.map +1 -0
  80. package/dist/services/google-sheets.js +352 -0
  81. package/dist/services/google-sheets.js.map +1 -0
  82. package/dist/services/mailchimp.d.ts +169 -0
  83. package/dist/services/mailchimp.d.ts.map +1 -0
  84. package/dist/services/mailchimp.js +180 -0
  85. package/dist/services/mailchimp.js.map +1 -0
  86. package/dist/services/mysql.d.ts +91 -0
  87. package/dist/services/mysql.d.ts.map +1 -0
  88. package/dist/services/mysql.js +250 -0
  89. package/dist/services/mysql.js.map +1 -0
  90. package/dist/services/playwright.d.ts +678 -0
  91. package/dist/services/playwright.d.ts.map +1 -0
  92. package/dist/services/playwright.js +1141 -0
  93. package/dist/services/playwright.js.map +1 -0
  94. package/dist/services/postgres.d.ts +83 -0
  95. package/dist/services/postgres.d.ts.map +1 -0
  96. package/dist/services/postgres.js +230 -0
  97. package/dist/services/postgres.js.map +1 -0
  98. package/dist/services/sendgrid.d.ts +43 -0
  99. package/dist/services/sendgrid.d.ts.map +1 -0
  100. package/dist/services/sendgrid.js +87 -0
  101. package/dist/services/sendgrid.js.map +1 -0
  102. package/dist/services/shopify.d.ts +160 -0
  103. package/dist/services/shopify.d.ts.map +1 -0
  104. package/dist/services/shopify.js +166 -0
  105. package/dist/services/shopify.js.map +1 -0
  106. package/dist/services/stripe.d.ts +275 -0
  107. package/dist/services/stripe.d.ts.map +1 -0
  108. package/dist/services/stripe.js +229 -0
  109. package/dist/services/stripe.js.map +1 -0
  110. package/dist/services/supabase.d.ts +193 -0
  111. package/dist/services/supabase.d.ts.map +1 -0
  112. package/dist/services/supabase.js +328 -0
  113. package/dist/services/supabase.js.map +1 -0
  114. package/dist/services/teams.d.ts +224 -0
  115. package/dist/services/teams.d.ts.map +1 -0
  116. package/dist/services/teams.js +229 -0
  117. package/dist/services/teams.js.map +1 -0
  118. package/dist/services/telegram.d.ts +247 -0
  119. package/dist/services/telegram.d.ts.map +1 -0
  120. package/dist/services/telegram.js +247 -0
  121. package/dist/services/telegram.js.map +1 -0
  122. package/dist/services/trello.d.ts +160 -0
  123. package/dist/services/trello.d.ts.map +1 -0
  124. package/dist/services/trello.js +194 -0
  125. package/dist/services/trello.js.map +1 -0
  126. package/dist/services/twilio.d.ts +126 -0
  127. package/dist/services/twilio.d.ts.map +1 -0
  128. package/dist/services/twilio.js +153 -0
  129. package/dist/services/twilio.js.map +1 -0
  130. package/dist/services/whatsapp.d.ts +311 -0
  131. package/dist/services/whatsapp.d.ts.map +1 -0
  132. package/dist/services/whatsapp.js +253 -0
  133. package/dist/services/whatsapp.js.map +1 -0
  134. package/dist/services/zendesk.d.ts +134 -0
  135. package/dist/services/zendesk.d.ts.map +1 -0
  136. package/dist/services/zendesk.js +148 -0
  137. package/dist/services/zendesk.js.map +1 -0
  138. package/package.json +43 -5
  139. package/dist/claude-code.d.ts +0 -16
  140. package/dist/claude-code.d.ts.map +0 -1
  141. package/dist/claude-code.js +0 -56
  142. package/dist/claude-code.js.map +0 -1
  143. package/dist/github.d.ts +0 -3
  144. package/dist/github.d.ts.map +0 -1
  145. package/dist/github.js +0 -13
  146. package/dist/github.js.map +0 -1
  147. package/dist/jira.d.ts +0 -3
  148. package/dist/jira.d.ts.map +0 -1
  149. package/dist/jira.js +0 -21
  150. package/dist/jira.js.map +0 -1
  151. package/dist/ollama.d.ts +0 -3
  152. package/dist/ollama.d.ts.map +0 -1
  153. package/dist/ollama.js +0 -9
  154. package/dist/ollama.js.map +0 -1
  155. package/dist/opencode.d.ts +0 -19
  156. package/dist/opencode.d.ts.map +0 -1
  157. package/dist/opencode.js +0 -104
  158. package/dist/opencode.js.map +0 -1
  159. package/dist/script.d.ts +0 -3
  160. package/dist/script.d.ts.map +0 -1
  161. package/dist/script.js +0 -21
  162. package/dist/script.js.map +0 -1
  163. package/dist/slack.d.ts +0 -3
  164. package/dist/slack.d.ts.map +0 -1
  165. package/dist/slack.js +0 -11
  166. 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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"}