agent-toolbelt 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Official SDK for [Agent Toolbelt](https://agent-toolbelt-production.up.railway.app) — a suite of focused API tools for AI agents and developers.
4
4
 
5
- **Typed client + LangChain tool wrappers** for schema generation, text extraction, token counting, CSV conversion, Markdown conversion, URL metadata, regex building, cron expressions, address normalization, and color palette generation.
5
+ **Typed client + LangChain tool wrappers** for schema generation, text extraction, token counting, CSV conversion, Markdown conversion, URL metadata, regex building, cron expressions, address normalization, color palette generation, and brand kit creation.
6
6
 
7
7
  ## Install
8
8
 
@@ -118,6 +118,9 @@ await client.addressNormalizer({ address: "123 main st apt 4b, springfield, il 6
118
118
 
119
119
  // Generate color palettes from descriptions or hex colors
120
120
  await client.colorPalette({ description: "calm fintech blue", count: 5 });
121
+
122
+ // Generate a full brand kit — colors, typography, CSS/Tailwind tokens
123
+ await client.brandKit({ name: "Solaris Health", industry: "healthcare", vibe: ["modern", "trustworthy"], format: "full" });
121
124
  ```
122
125
 
123
126
  ---
@@ -159,6 +162,7 @@ const result = await agent.invoke({
159
162
  | `build_cron` | Convert schedule descriptions to cron expressions |
160
163
  | `normalize_address` | Normalize US addresses to USPS format |
161
164
  | `generate_color_palette` | Generate color palettes with WCAG scores and CSS variables |
165
+ | `generate_brand_kit` | Generate full brand kit — colors, typography, CSS/Tailwind tokens |
162
166
 
163
167
  ---
164
168
 
@@ -176,6 +180,7 @@ const result = await agent.invoke({
176
180
  | `cron-builder` | $0.0005 / call |
177
181
  | `address-normalizer` | $0.0005 / call |
178
182
  | `color-palette` | $0.0005 / call |
183
+ | `brand-kit` | $0.001 / call |
179
184
 
180
185
  ## License
181
186
 
package/dist/index.d.mts CHANGED
@@ -185,6 +185,45 @@ interface BrandKitResult {
185
185
  googleFontsUrl?: string;
186
186
  };
187
187
  }
188
+ interface MeetingActionItem {
189
+ id: number;
190
+ owner: string;
191
+ task: string;
192
+ deadline?: string;
193
+ priority: "high" | "medium" | "low";
194
+ context?: string;
195
+ }
196
+ interface MeetingActionItemsResult {
197
+ meetingTitle: string;
198
+ actionItems: MeetingActionItem[];
199
+ actionItemCount: number;
200
+ summary?: string;
201
+ decisions?: string[];
202
+ }
203
+ interface ImageMetadataStripperResult {
204
+ image: string;
205
+ outputFormat: string;
206
+ original: {
207
+ sizeBytes: number;
208
+ format?: string;
209
+ width?: number;
210
+ height?: number;
211
+ channels?: number;
212
+ hasExif?: boolean;
213
+ hasIcc?: boolean;
214
+ hasIptc?: boolean;
215
+ hasXmp?: boolean;
216
+ orientation?: number;
217
+ density?: number;
218
+ };
219
+ output: {
220
+ sizeBytes: number;
221
+ reductionBytes: number;
222
+ reductionPercent: number;
223
+ };
224
+ metadataStripped: boolean;
225
+ strippedFields: string[];
226
+ }
188
227
  declare class AgentToolbelt {
189
228
  private apiKey;
190
229
  private baseUrl;
@@ -255,6 +294,18 @@ declare class AgentToolbelt {
255
294
  format?: "hex" | "rgb" | "hsl" | "all";
256
295
  includeShades?: boolean;
257
296
  }): Promise<ColorPaletteResult>;
297
+ /** Extract action items, decisions, and summary from meeting notes or transcripts */
298
+ meetingActionItems(input: {
299
+ notes: string;
300
+ format?: "action_items_only" | "full";
301
+ participants?: string[];
302
+ }): Promise<MeetingActionItemsResult>;
303
+ /** Strip EXIF, GPS, ICC, IPTC, and XMP metadata from a base64-encoded image */
304
+ imageMetadataStripper(input: {
305
+ image: string;
306
+ format?: "jpeg" | "png" | "webp" | "preserve";
307
+ quality?: number;
308
+ }): Promise<ImageMetadataStripperResult>;
258
309
  /** Generate a full brand kit — color palette, typography, CSS/Tailwind tokens */
259
310
  brandKit(input: {
260
311
  name: string;
@@ -265,4 +316,4 @@ declare class AgentToolbelt {
265
316
  }): Promise<BrandKitResult>;
266
317
  }
267
318
 
268
- export { type AddressNormalizerResult, AgentToolbelt, type AgentToolbeltOptions, type BrandKitResult, type ColorPaletteResult, type CronBuilderResult, type CsvToJsonResult, type MarkdownConverterResult, type RegexBuilderResult, type SchemaGeneratorResult, type TextExtractorResult, type TokenCountResult, type UrlMetadataResult };
319
+ export { type AddressNormalizerResult, AgentToolbelt, type AgentToolbeltOptions, type BrandKitResult, type ColorPaletteResult, type CronBuilderResult, type CsvToJsonResult, type ImageMetadataStripperResult, type MarkdownConverterResult, type MeetingActionItem, type MeetingActionItemsResult, type RegexBuilderResult, type SchemaGeneratorResult, type TextExtractorResult, type TokenCountResult, type UrlMetadataResult };
package/dist/index.d.ts CHANGED
@@ -185,6 +185,45 @@ interface BrandKitResult {
185
185
  googleFontsUrl?: string;
186
186
  };
187
187
  }
188
+ interface MeetingActionItem {
189
+ id: number;
190
+ owner: string;
191
+ task: string;
192
+ deadline?: string;
193
+ priority: "high" | "medium" | "low";
194
+ context?: string;
195
+ }
196
+ interface MeetingActionItemsResult {
197
+ meetingTitle: string;
198
+ actionItems: MeetingActionItem[];
199
+ actionItemCount: number;
200
+ summary?: string;
201
+ decisions?: string[];
202
+ }
203
+ interface ImageMetadataStripperResult {
204
+ image: string;
205
+ outputFormat: string;
206
+ original: {
207
+ sizeBytes: number;
208
+ format?: string;
209
+ width?: number;
210
+ height?: number;
211
+ channels?: number;
212
+ hasExif?: boolean;
213
+ hasIcc?: boolean;
214
+ hasIptc?: boolean;
215
+ hasXmp?: boolean;
216
+ orientation?: number;
217
+ density?: number;
218
+ };
219
+ output: {
220
+ sizeBytes: number;
221
+ reductionBytes: number;
222
+ reductionPercent: number;
223
+ };
224
+ metadataStripped: boolean;
225
+ strippedFields: string[];
226
+ }
188
227
  declare class AgentToolbelt {
189
228
  private apiKey;
190
229
  private baseUrl;
@@ -255,6 +294,18 @@ declare class AgentToolbelt {
255
294
  format?: "hex" | "rgb" | "hsl" | "all";
256
295
  includeShades?: boolean;
257
296
  }): Promise<ColorPaletteResult>;
297
+ /** Extract action items, decisions, and summary from meeting notes or transcripts */
298
+ meetingActionItems(input: {
299
+ notes: string;
300
+ format?: "action_items_only" | "full";
301
+ participants?: string[];
302
+ }): Promise<MeetingActionItemsResult>;
303
+ /** Strip EXIF, GPS, ICC, IPTC, and XMP metadata from a base64-encoded image */
304
+ imageMetadataStripper(input: {
305
+ image: string;
306
+ format?: "jpeg" | "png" | "webp" | "preserve";
307
+ quality?: number;
308
+ }): Promise<ImageMetadataStripperResult>;
258
309
  /** Generate a full brand kit — color palette, typography, CSS/Tailwind tokens */
259
310
  brandKit(input: {
260
311
  name: string;
@@ -265,4 +316,4 @@ declare class AgentToolbelt {
265
316
  }): Promise<BrandKitResult>;
266
317
  }
267
318
 
268
- export { type AddressNormalizerResult, AgentToolbelt, type AgentToolbeltOptions, type BrandKitResult, type ColorPaletteResult, type CronBuilderResult, type CsvToJsonResult, type MarkdownConverterResult, type RegexBuilderResult, type SchemaGeneratorResult, type TextExtractorResult, type TokenCountResult, type UrlMetadataResult };
319
+ export { type AddressNormalizerResult, AgentToolbelt, type AgentToolbeltOptions, type BrandKitResult, type ColorPaletteResult, type CronBuilderResult, type CsvToJsonResult, type ImageMetadataStripperResult, type MarkdownConverterResult, type MeetingActionItem, type MeetingActionItemsResult, type RegexBuilderResult, type SchemaGeneratorResult, type TextExtractorResult, type TokenCountResult, type UrlMetadataResult };
package/dist/index.js CHANGED
@@ -90,6 +90,14 @@ var AgentToolbelt = class {
90
90
  colorPalette(input) {
91
91
  return this.call("color-palette", input);
92
92
  }
93
+ /** Extract action items, decisions, and summary from meeting notes or transcripts */
94
+ meetingActionItems(input) {
95
+ return this.call("meeting-action-items", input);
96
+ }
97
+ /** Strip EXIF, GPS, ICC, IPTC, and XMP metadata from a base64-encoded image */
98
+ imageMetadataStripper(input) {
99
+ return this.call("image-metadata-stripper", input);
100
+ }
93
101
  /** Generate a full brand kit — color palette, typography, CSS/Tailwind tokens */
94
102
  brandKit(input) {
95
103
  return this.call("brand-kit", input);
package/dist/index.mjs CHANGED
@@ -64,6 +64,14 @@ var AgentToolbelt = class {
64
64
  colorPalette(input) {
65
65
  return this.call("color-palette", input);
66
66
  }
67
+ /** Extract action items, decisions, and summary from meeting notes or transcripts */
68
+ meetingActionItems(input) {
69
+ return this.call("meeting-action-items", input);
70
+ }
71
+ /** Strip EXIF, GPS, ICC, IPTC, and XMP metadata from a base64-encoded image */
72
+ imageMetadataStripper(input) {
73
+ return this.call("image-metadata-stripper", input);
74
+ }
67
75
  /** Generate a full brand kit — color palette, typography, CSS/Tailwind tokens */
68
76
  brandKit(input) {
69
77
  return this.call("brand-kit", input);
package/dist/langchain.js CHANGED
@@ -165,6 +165,34 @@ function createLangChainTools(client) {
165
165
  return JSON.stringify(result);
166
166
  }
167
167
  }),
168
+ // ---- Meeting Action Items ----
169
+ new import_tools.DynamicStructuredTool({
170
+ name: "extract_meeting_action_items",
171
+ description: "Extract structured action items, key decisions, and a summary from meeting notes or transcripts. Use this after a meeting to automatically generate a task list with owners, deadlines, and priorities. Works with raw transcripts, bullet-point notes, or any free-form meeting text. Returns each action item with the responsible person, what needs to be done, deadline (if mentioned), and priority level. The 'full' format also includes a meeting summary and list of decisions made.",
172
+ schema: import_zod.z.object({
173
+ notes: import_zod.z.string().describe("Meeting notes or transcript to extract action items from"),
174
+ format: import_zod.z.enum(["action_items_only", "full"]).default("full").describe("'full' includes summary and decisions; 'action_items_only' returns just the task list"),
175
+ participants: import_zod.z.array(import_zod.z.string()).optional().describe("Known participant names to help with owner attribution")
176
+ }),
177
+ func: async ({ notes, format, participants }) => {
178
+ const result = await client.meetingActionItems({ notes, format, participants });
179
+ return JSON.stringify(result);
180
+ }
181
+ }),
182
+ // ---- Image Metadata Stripper ----
183
+ new import_tools.DynamicStructuredTool({
184
+ name: "strip_image_metadata",
185
+ description: "Strip EXIF, GPS location, IPTC, XMP, and ICC metadata from an image for privacy protection. Use this before uploading or sharing images to remove sensitive embedded data like GPS coordinates, camera model, timestamps, copyright notices, and editing history. Accepts base64-encoded JPEG, PNG, WebP, or TIFF images. Returns the cleaned image as base64 along with a report of what was removed and the file size reduction.",
186
+ schema: import_zod.z.object({
187
+ image: import_zod.z.string().describe("Base64-encoded image data (JPEG, PNG, WebP, or TIFF). Do not include the data URI prefix."),
188
+ format: import_zod.z.enum(["jpeg", "png", "webp", "preserve"]).default("preserve").describe("Output format. 'preserve' keeps the original format."),
189
+ quality: import_zod.z.number().int().min(1).max(100).default(90).describe("Output quality for lossy formats (1-100)")
190
+ }),
191
+ func: async ({ image, format, quality }) => {
192
+ const result = await client.imageMetadataStripper({ image, format, quality });
193
+ return JSON.stringify(result);
194
+ }
195
+ }),
168
196
  // ---- Brand Kit ----
169
197
  new import_tools.DynamicStructuredTool({
170
198
  name: "generate_brand_kit",
@@ -141,6 +141,34 @@ function createLangChainTools(client) {
141
141
  return JSON.stringify(result);
142
142
  }
143
143
  }),
144
+ // ---- Meeting Action Items ----
145
+ new DynamicStructuredTool({
146
+ name: "extract_meeting_action_items",
147
+ description: "Extract structured action items, key decisions, and a summary from meeting notes or transcripts. Use this after a meeting to automatically generate a task list with owners, deadlines, and priorities. Works with raw transcripts, bullet-point notes, or any free-form meeting text. Returns each action item with the responsible person, what needs to be done, deadline (if mentioned), and priority level. The 'full' format also includes a meeting summary and list of decisions made.",
148
+ schema: z.object({
149
+ notes: z.string().describe("Meeting notes or transcript to extract action items from"),
150
+ format: z.enum(["action_items_only", "full"]).default("full").describe("'full' includes summary and decisions; 'action_items_only' returns just the task list"),
151
+ participants: z.array(z.string()).optional().describe("Known participant names to help with owner attribution")
152
+ }),
153
+ func: async ({ notes, format, participants }) => {
154
+ const result = await client.meetingActionItems({ notes, format, participants });
155
+ return JSON.stringify(result);
156
+ }
157
+ }),
158
+ // ---- Image Metadata Stripper ----
159
+ new DynamicStructuredTool({
160
+ name: "strip_image_metadata",
161
+ description: "Strip EXIF, GPS location, IPTC, XMP, and ICC metadata from an image for privacy protection. Use this before uploading or sharing images to remove sensitive embedded data like GPS coordinates, camera model, timestamps, copyright notices, and editing history. Accepts base64-encoded JPEG, PNG, WebP, or TIFF images. Returns the cleaned image as base64 along with a report of what was removed and the file size reduction.",
162
+ schema: z.object({
163
+ image: z.string().describe("Base64-encoded image data (JPEG, PNG, WebP, or TIFF). Do not include the data URI prefix."),
164
+ format: z.enum(["jpeg", "png", "webp", "preserve"]).default("preserve").describe("Output format. 'preserve' keeps the original format."),
165
+ quality: z.number().int().min(1).max(100).default(90).describe("Output quality for lossy formats (1-100)")
166
+ }),
167
+ func: async ({ image, format, quality }) => {
168
+ const result = await client.imageMetadataStripper({ image, format, quality });
169
+ return JSON.stringify(result);
170
+ }
171
+ }),
144
172
  // ---- Brand Kit ----
145
173
  new DynamicStructuredTool({
146
174
  name: "generate_brand_kit",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-toolbelt",
3
- "version": "0.2.0",
3
+ "version": "0.2.2",
4
4
  "description": "Official SDK for Agent Toolbelt — typed API client and LangChain tool wrappers for schema generation, text extraction, token counting, CSV conversion, and more.",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",