@hailer/mcp 1.1.12 → 1.1.13
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/CHANGELOG.md +0 -7
- package/{.claude → dist}/CLAUDE.md +2 -2
- package/dist/app.js +18 -5
- package/dist/bot/bot-config.d.ts +10 -1
- package/dist/bot/bot-config.js +64 -3
- package/dist/bot/bot-manager.d.ts +2 -0
- package/dist/bot/bot-manager.js +9 -2
- package/dist/bot/bot.d.ts +33 -0
- package/dist/bot/bot.js +461 -160
- package/dist/bot/services/message-classifier.js +17 -0
- package/dist/bot/services/permission-guard.d.ts +52 -0
- package/dist/bot/services/permission-guard.js +149 -0
- package/dist/bot/services/types.d.ts +5 -0
- package/dist/bot/services/typing-indicator.d.ts +6 -1
- package/dist/bot/services/typing-indicator.js +19 -3
- package/dist/cli.js +0 -0
- package/dist/config.d.ts +6 -1
- package/dist/config.js +43 -0
- package/dist/core.js +3 -6
- package/dist/lib/discussion-lock.d.ts +42 -0
- package/dist/lib/discussion-lock.js +110 -0
- package/dist/mcp/UserContextCache.d.ts +5 -0
- package/dist/mcp/UserContextCache.js +51 -19
- package/dist/mcp/hailer-clients.d.ts +19 -1
- package/dist/mcp/hailer-clients.js +158 -24
- package/dist/mcp/session-store.d.ts +68 -0
- package/dist/mcp/session-store.js +169 -0
- package/dist/mcp/signal-handler.js +2 -0
- package/dist/mcp/tool-registry.d.ts +17 -4
- package/dist/mcp/tool-registry.js +37 -7
- package/dist/mcp/tools/activity.js +99 -7
- package/dist/mcp/tools/app-scaffold.js +304 -336
- package/dist/mcp/tools/bot-config/constants.d.ts +23 -0
- package/dist/mcp/tools/bot-config/constants.js +94 -0
- package/dist/mcp/tools/bot-config/core.d.ts +253 -0
- package/dist/mcp/tools/bot-config/core.js +2456 -0
- package/dist/mcp/tools/bot-config/index.d.ts +10 -0
- package/dist/mcp/tools/bot-config/index.js +59 -0
- package/dist/mcp/tools/bot-config/tools.d.ts +7 -0
- package/dist/mcp/tools/bot-config/tools.js +15 -0
- package/dist/mcp/tools/bot-config/types.d.ts +50 -0
- package/dist/mcp/tools/bot-config/types.js +6 -0
- package/dist/mcp/tools/bug-fixer-tools.d.ts +45 -0
- package/dist/mcp/tools/bug-fixer-tools.js +1096 -0
- package/dist/mcp/tools/company.d.ts +9 -0
- package/dist/mcp/tools/company.js +88 -0
- package/dist/mcp/tools/discussion.js +68 -0
- package/dist/mcp/tools/document.d.ts +11 -0
- package/dist/mcp/tools/document.js +741 -0
- package/dist/mcp/tools/investigate.d.ts +9 -0
- package/dist/mcp/tools/investigate.js +254 -0
- package/dist/mcp/tools/workflow-permissions.d.ts +15 -0
- package/dist/mcp/tools/workflow-permissions.js +204 -0
- package/dist/mcp/tools/workflow.js +57 -18
- package/dist/mcp/utils/index.d.ts +2 -0
- package/dist/mcp/utils/index.js +12 -1
- package/dist/mcp/utils/role-utils.d.ts +74 -0
- package/dist/mcp/utils/role-utils.js +151 -0
- package/dist/mcp/utils/types.d.ts +43 -1
- package/dist/mcp/utils/types.js +14 -0
- package/dist/mcp/webhook-handler.d.ts +4 -0
- package/dist/mcp/webhook-handler.js +8 -0
- package/dist/mcp-server.d.ts +23 -2
- package/dist/mcp-server.js +639 -127
- package/dist/plugins/vipunen/client.d.ts +150 -0
- package/dist/plugins/vipunen/client.js +535 -0
- package/dist/plugins/vipunen/config/schema-config.json +19 -0
- package/dist/plugins/vipunen/config/schema-doc.json +22 -0
- package/dist/plugins/vipunen/index.d.ts +41 -0
- package/dist/plugins/vipunen/index.js +88 -0
- package/dist/plugins/vipunen/tools.d.ts +26 -0
- package/dist/plugins/vipunen/tools.js +501 -0
- package/dist/stdio-server.d.ts +14 -0
- package/dist/stdio-server.js +101 -0
- package/package.json +2 -1
- package/.claude/agents/agent-ada-skill-builder.md +0 -94
- package/.claude/agents/agent-alejandro-function-fields.md +0 -342
- package/.claude/agents/agent-bjorn-config-audit.md +0 -103
- package/.claude/agents/agent-builder-agent-creator.md +0 -130
- package/.claude/agents/agent-code-simplifier.md +0 -53
- package/.claude/agents/agent-dmitri-activity-crud.md +0 -159
- package/.claude/agents/agent-giuseppe-app-builder.md +0 -247
- package/.claude/agents/agent-gunther-mcp-tools.md +0 -39
- package/.claude/agents/agent-helga-workflow-config.md +0 -204
- package/.claude/agents/agent-igor-activity-mover-automation.md +0 -125
- package/.claude/agents/agent-ingrid-doc-templates.md +0 -261
- package/.claude/agents/agent-ivan-monolith.md +0 -154
- package/.claude/agents/agent-kenji-data-reader.md +0 -86
- package/.claude/agents/agent-lars-code-inspector.md +0 -102
- package/.claude/agents/agent-marco-mockup-builder.md +0 -110
- package/.claude/agents/agent-marcus-api-documenter.md +0 -323
- package/.claude/agents/agent-marketplace-publisher.md +0 -280
- package/.claude/agents/agent-marketplace-reviewer.md +0 -309
- package/.claude/agents/agent-permissions-handler.md +0 -208
- package/.claude/agents/agent-simple-writer.md +0 -48
- package/.claude/agents/agent-svetlana-code-review.md +0 -171
- package/.claude/agents/agent-tanya-test-runner.md +0 -333
- package/.claude/agents/agent-ui-designer.md +0 -100
- package/.claude/agents/agent-viktor-sql-insights.md +0 -212
- package/.claude/agents/agent-web-search.md +0 -55
- package/.claude/agents/agent-yevgeni-discussions.md +0 -45
- package/.claude/agents/agent-zara-zapier.md +0 -159
- package/.claude/commands/app-squad.md +0 -135
- package/.claude/commands/audit-squad.md +0 -158
- package/.claude/commands/autoplan.md +0 -563
- package/.claude/commands/cleanup-squad.md +0 -98
- package/.claude/commands/config-squad.md +0 -106
- package/.claude/commands/crud-squad.md +0 -87
- package/.claude/commands/data-squad.md +0 -97
- package/.claude/commands/debug-squad.md +0 -303
- package/.claude/commands/doc-squad.md +0 -65
- package/.claude/commands/handoff.md +0 -137
- package/.claude/commands/health.md +0 -49
- package/.claude/commands/help.md +0 -29
- package/.claude/commands/help:agents.md +0 -151
- package/.claude/commands/help:commands.md +0 -78
- package/.claude/commands/help:faq.md +0 -79
- package/.claude/commands/help:plugins.md +0 -50
- package/.claude/commands/help:skills.md +0 -93
- package/.claude/commands/help:tools.md +0 -75
- package/.claude/commands/hotfix-squad.md +0 -112
- package/.claude/commands/integration-squad.md +0 -82
- package/.claude/commands/janitor-squad.md +0 -167
- package/.claude/commands/learn-auto.md +0 -120
- package/.claude/commands/learn.md +0 -120
- package/.claude/commands/mcp-list.md +0 -27
- package/.claude/commands/onboard-squad.md +0 -140
- package/.claude/commands/plan-workspace.md +0 -732
- package/.claude/commands/prd.md +0 -130
- package/.claude/commands/project-status.md +0 -82
- package/.claude/commands/publish.md +0 -138
- package/.claude/commands/recap.md +0 -69
- package/.claude/commands/restore.md +0 -64
- package/.claude/commands/review-squad.md +0 -152
- package/.claude/commands/save.md +0 -24
- package/.claude/commands/stats.md +0 -19
- package/.claude/commands/swarm.md +0 -210
- package/.claude/commands/tool-builder.md +0 -39
- package/.claude/commands/ws-pull.md +0 -44
- package/.claude/hooks/_shared-memory.cjs +0 -305
- package/.claude/hooks/_utils.cjs +0 -108
- package/.claude/hooks/agent-failure-detector.cjs +0 -383
- package/.claude/hooks/agent-usage-logger.cjs +0 -204
- package/.claude/hooks/app-edit-guard.cjs +0 -494
- package/.claude/hooks/auto-learn.cjs +0 -304
- package/.claude/hooks/bash-guard.cjs +0 -272
- package/.claude/hooks/builder-mode-manager.cjs +0 -354
- package/.claude/hooks/bulk-activity-guard.cjs +0 -271
- package/.claude/hooks/context-watchdog.cjs +0 -230
- package/.claude/hooks/delegation-reminder.cjs +0 -465
- package/.claude/hooks/design-system-lint.cjs +0 -271
- package/.claude/hooks/post-scaffold-hook.cjs +0 -181
- package/.claude/hooks/prompt-guard.cjs +0 -354
- package/.claude/hooks/publish-template-guard.cjs +0 -147
- package/.claude/hooks/session-start.cjs +0 -35
- package/.claude/hooks/shared-memory-writer.cjs +0 -147
- package/.claude/hooks/skill-injector.cjs +0 -140
- package/.claude/hooks/skill-usage-logger.cjs +0 -258
- package/.claude/hooks/src-edit-guard.cjs +0 -240
- package/.claude/hooks/sync-marketplace-agents.cjs +0 -346
- package/.claude/settings.json +0 -257
- package/.claude/skills/SDK-activity-patterns/SKILL.md +0 -428
- package/.claude/skills/SDK-document-templates/SKILL.md +0 -1033
- package/.claude/skills/SDK-function-fields/SKILL.md +0 -542
- package/.claude/skills/SDK-generate-skill/SKILL.md +0 -92
- package/.claude/skills/SDK-init-skill/SKILL.md +0 -127
- package/.claude/skills/SDK-insight-queries/SKILL.md +0 -787
- package/.claude/skills/SDK-ws-config-skill/SKILL.md +0 -1139
- package/.claude/skills/agent-structure/SKILL.md +0 -98
- package/.claude/skills/api-documentation-patterns/SKILL.md +0 -474
- package/.claude/skills/chrome-mcp-reference/SKILL.md +0 -370
- package/.claude/skills/delegation-routing/SKILL.md +0 -202
- package/.claude/skills/frontend-design/SKILL.md +0 -254
- package/.claude/skills/hailer-activity-mover/SKILL.md +0 -213
- package/.claude/skills/hailer-api-client/SKILL.md +0 -518
- package/.claude/skills/hailer-app-builder/SKILL.md +0 -1434
- package/.claude/skills/hailer-apps-pictures/SKILL.md +0 -269
- package/.claude/skills/hailer-design-system/SKILL.md +0 -235
- package/.claude/skills/hailer-monolith-automations/SKILL.md +0 -686
- package/.claude/skills/hailer-permissions-system/SKILL.md +0 -121
- package/.claude/skills/hailer-project-protocol/SKILL.md +0 -488
- package/.claude/skills/hailer-rest-api/SKILL.md +0 -61
- package/.claude/skills/hailer-rest-api/hailer-activities.md +0 -184
- package/.claude/skills/hailer-rest-api/hailer-admin.md +0 -473
- package/.claude/skills/hailer-rest-api/hailer-calendar.md +0 -256
- package/.claude/skills/hailer-rest-api/hailer-feed.md +0 -249
- package/.claude/skills/hailer-rest-api/hailer-insights.md +0 -195
- package/.claude/skills/hailer-rest-api/hailer-messaging.md +0 -276
- package/.claude/skills/hailer-rest-api/hailer-workflows.md +0 -283
- package/.claude/skills/insight-join-patterns/SKILL.md +0 -174
- package/.claude/skills/integration-patterns/SKILL.md +0 -421
- package/.claude/skills/json-only-output/SKILL.md +0 -72
- package/.claude/skills/lsp-setup/SKILL.md +0 -160
- package/.claude/skills/mcp-direct-tools/SKILL.md +0 -153
- package/.claude/skills/optional-parameters/SKILL.md +0 -72
- package/.claude/skills/publish-hailer-app/SKILL.md +0 -244
- package/.claude/skills/testing-patterns/SKILL.md +0 -630
- package/.claude/skills/tool-builder/SKILL.md +0 -250
- package/.claude/skills/tool-parameter-usage/SKILL.md +0 -126
- package/.claude/skills/tool-response-verification/SKILL.md +0 -92
- package/.claude/skills/zapier-hailer-patterns/SKILL.md +0 -581
- package/.mcp.json +0 -13
- package/.opencode/agent/agent-ada-skill-builder.md +0 -35
- package/.opencode/agent/agent-alejandro-function-fields.md +0 -39
- package/.opencode/agent/agent-bjorn-config-audit.md +0 -36
- package/.opencode/agent/agent-builder-agent-creator.md +0 -39
- package/.opencode/agent/agent-code-simplifier.md +0 -31
- package/.opencode/agent/agent-dmitri-activity-crud.md +0 -40
- package/.opencode/agent/agent-giuseppe-app-builder.md +0 -37
- package/.opencode/agent/agent-gunther-mcp-tools.md +0 -39
- package/.opencode/agent/agent-helga-workflow-config.md +0 -203
- package/.opencode/agent/agent-igor-activity-mover-automation.md +0 -46
- package/.opencode/agent/agent-ingrid-doc-templates.md +0 -39
- package/.opencode/agent/agent-ivan-monolith.md +0 -46
- package/.opencode/agent/agent-kenji-data-reader.md +0 -53
- package/.opencode/agent/agent-lars-code-inspector.md +0 -28
- package/.opencode/agent/agent-marco-mockup-builder.md +0 -42
- package/.opencode/agent/agent-marcus-api-documenter.md +0 -53
- package/.opencode/agent/agent-marketplace-publisher.md +0 -44
- package/.opencode/agent/agent-marketplace-reviewer.md +0 -42
- package/.opencode/agent/agent-permissions-handler.md +0 -50
- package/.opencode/agent/agent-simple-writer.md +0 -45
- package/.opencode/agent/agent-svetlana-code-review.md +0 -39
- package/.opencode/agent/agent-tanya-test-runner.md +0 -57
- package/.opencode/agent/agent-ui-designer.md +0 -56
- package/.opencode/agent/agent-viktor-sql-insights.md +0 -34
- package/.opencode/agent/agent-web-search.md +0 -42
- package/.opencode/agent/agent-yevgeni-discussions.md +0 -37
- package/.opencode/agent/agent-zara-zapier.md +0 -53
- package/.opencode/commands/app-squad.md +0 -135
- package/.opencode/commands/audit-squad.md +0 -158
- package/.opencode/commands/autoplan.md +0 -563
- package/.opencode/commands/cleanup-squad.md +0 -98
- package/.opencode/commands/config-squad.md +0 -106
- package/.opencode/commands/crud-squad.md +0 -87
- package/.opencode/commands/data-squad.md +0 -97
- package/.opencode/commands/debug-squad.md +0 -303
- package/.opencode/commands/doc-squad.md +0 -65
- package/.opencode/commands/handoff.md +0 -137
- package/.opencode/commands/health.md +0 -49
- package/.opencode/commands/help-agents.md +0 -151
- package/.opencode/commands/help-commands.md +0 -32
- package/.opencode/commands/help-faq.md +0 -29
- package/.opencode/commands/help-plugins.md +0 -28
- package/.opencode/commands/help-skills.md +0 -7
- package/.opencode/commands/help-tools.md +0 -40
- package/.opencode/commands/help.md +0 -28
- package/.opencode/commands/hotfix-squad.md +0 -112
- package/.opencode/commands/integration-squad.md +0 -82
- package/.opencode/commands/janitor-squad.md +0 -167
- package/.opencode/commands/learn-auto.md +0 -120
- package/.opencode/commands/learn.md +0 -120
- package/.opencode/commands/mcp-list.md +0 -27
- package/.opencode/commands/onboard-squad.md +0 -140
- package/.opencode/commands/plan-workspace.md +0 -732
- package/.opencode/commands/prd.md +0 -131
- package/.opencode/commands/project-status.md +0 -82
- package/.opencode/commands/publish.md +0 -138
- package/.opencode/commands/recap.md +0 -69
- package/.opencode/commands/restore.md +0 -64
- package/.opencode/commands/review-squad.md +0 -152
- package/.opencode/commands/save.md +0 -24
- package/.opencode/commands/stats.md +0 -19
- package/.opencode/commands/swarm.md +0 -210
- package/.opencode/commands/tool-builder.md +0 -39
- package/.opencode/commands/ws-pull.md +0 -44
- package/.opencode/opencode.json +0 -28
- package/SESSION-HANDOFF.md +0 -68
- package/inbox/2026-03-04-bot-config-patterns.md +0 -24
- package/scripts/postinstall.cjs +0 -64
- package/scripts/test-hal-tools.ts +0 -154
|
@@ -10,7 +10,6 @@
|
|
|
10
10
|
* - Enables Claude's strict mode validation with actual workspace values
|
|
11
11
|
*/
|
|
12
12
|
import { z } from 'zod';
|
|
13
|
-
import { UserContext } from './UserContextCache';
|
|
14
13
|
import { McpResponse } from './utils/types';
|
|
15
14
|
/**
|
|
16
15
|
* Tool groups for access control
|
|
@@ -27,6 +26,12 @@ export declare enum ToolGroup {
|
|
|
27
26
|
NUCLEAR = "nuclear",
|
|
28
27
|
BOT_INTERNAL = "bot_internal"
|
|
29
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* Context type for tool execution
|
|
31
|
+
* - 'hailer': Requires Hailer authentication via UserContextCache (default)
|
|
32
|
+
* - 'none': No authentication needed (e.g., Weaviate tools with their own auth)
|
|
33
|
+
*/
|
|
34
|
+
export type ToolContextType = 'hailer' | 'none';
|
|
30
35
|
/**
|
|
31
36
|
* Tool definition interface
|
|
32
37
|
*/
|
|
@@ -35,7 +40,11 @@ export interface Tool<TSchema extends z.ZodType = z.ZodType> {
|
|
|
35
40
|
group: ToolGroup;
|
|
36
41
|
description: string;
|
|
37
42
|
schema: TSchema;
|
|
38
|
-
|
|
43
|
+
/** What authentication context this tool needs. Defaults to 'hailer'. */
|
|
44
|
+
contextType?: ToolContextType;
|
|
45
|
+
/** Context is UserContext for Hailer tools, VipunenContext for contextType:'none' tools.
|
|
46
|
+
* Type safety is enforced at the mcp-server dispatch boundary, not here. */
|
|
47
|
+
execute: (args: z.infer<TSchema>, context: any) => Promise<McpResponse>;
|
|
39
48
|
}
|
|
40
49
|
/**
|
|
41
50
|
* Tool definition for MCP protocol (JSON-RPC)
|
|
@@ -56,10 +65,10 @@ export interface ToolDefinition {
|
|
|
56
65
|
*/
|
|
57
66
|
export declare class ToolRegistry {
|
|
58
67
|
private tools;
|
|
68
|
+
private _lazyGuard?;
|
|
59
69
|
private enableNuclearTools;
|
|
60
70
|
private workspaceSchemas;
|
|
61
71
|
private workspaceSchemasLoaded;
|
|
62
|
-
private static readonly TOOL_TO_SCHEMA_MAP;
|
|
63
72
|
constructor(options?: {
|
|
64
73
|
enableNuclearTools?: boolean;
|
|
65
74
|
});
|
|
@@ -80,6 +89,10 @@ export declare class ToolRegistry {
|
|
|
80
89
|
* Add a tool to the registry
|
|
81
90
|
*/
|
|
82
91
|
addTool(tool: Tool): void;
|
|
92
|
+
/**
|
|
93
|
+
* Get tool definitions filtered by contextType — single-pass, no secondary lookups
|
|
94
|
+
*/
|
|
95
|
+
getToolDefinitionsByContextType(contextType: ToolContextType): ToolDefinition[];
|
|
83
96
|
/**
|
|
84
97
|
* Get tool definitions with optional filtering
|
|
85
98
|
*
|
|
@@ -108,7 +121,7 @@ export declare class ToolRegistry {
|
|
|
108
121
|
/**
|
|
109
122
|
* Execute tool with validation
|
|
110
123
|
*/
|
|
111
|
-
executeTool(name: string, args: any, context:
|
|
124
|
+
executeTool(name: string, args: any, context: any): Promise<any>;
|
|
112
125
|
/**
|
|
113
126
|
* Pre-transform install_workflow args to fix common LLM mistakes BEFORE validation
|
|
114
127
|
*/
|
|
@@ -78,15 +78,10 @@ var ToolGroup;
|
|
|
78
78
|
*/
|
|
79
79
|
class ToolRegistry {
|
|
80
80
|
tools = new Map();
|
|
81
|
+
_lazyGuard;
|
|
81
82
|
enableNuclearTools;
|
|
82
83
|
workspaceSchemas = new Map();
|
|
83
84
|
workspaceSchemasLoaded = false;
|
|
84
|
-
// Map tool names to their workspace schema files
|
|
85
|
-
static TOOL_TO_SCHEMA_MAP = {
|
|
86
|
-
'create_activity': '_workspace.schema.json', // Generic workspace schema
|
|
87
|
-
'update_activity': '_workspace.schema.json',
|
|
88
|
-
// Workflow-specific tools can be added dynamically
|
|
89
|
-
};
|
|
90
85
|
constructor(options = {}) {
|
|
91
86
|
this.enableNuclearTools = options.enableNuclearTools ?? false;
|
|
92
87
|
logger.debug('ToolRegistry instance created', {
|
|
@@ -163,6 +158,18 @@ class ToolRegistry {
|
|
|
163
158
|
this.tools.set(tool.name, tool);
|
|
164
159
|
logger.debug('Tool registered', { name: tool.name, group: tool.group });
|
|
165
160
|
}
|
|
161
|
+
/**
|
|
162
|
+
* Get tool definitions filtered by contextType — single-pass, no secondary lookups
|
|
163
|
+
*/
|
|
164
|
+
getToolDefinitionsByContextType(contextType) {
|
|
165
|
+
return Array.from(this.tools.values())
|
|
166
|
+
.filter(t => (t.contextType ?? 'hailer') === contextType)
|
|
167
|
+
.map(tool => ({
|
|
168
|
+
name: tool.name,
|
|
169
|
+
description: tool.description,
|
|
170
|
+
inputSchema: this.convertZodSchemaToJsonSchema(tool.schema)
|
|
171
|
+
}));
|
|
172
|
+
}
|
|
166
173
|
/**
|
|
167
174
|
* Get tool definitions with optional filtering
|
|
168
175
|
*
|
|
@@ -276,7 +283,9 @@ class ToolRegistry {
|
|
|
276
283
|
}
|
|
277
284
|
logger.debug('Executing tool', {
|
|
278
285
|
name,
|
|
279
|
-
|
|
286
|
+
auth: context?.apiKey
|
|
287
|
+
? context.apiKey.substring(0, 8) + '...'
|
|
288
|
+
: `vipunen:${context?.group ?? 'unknown'}`
|
|
280
289
|
});
|
|
281
290
|
// Pre-transform for specific tools (fix common LLM mistakes before validation)
|
|
282
291
|
let transformedArgs = args;
|
|
@@ -579,6 +588,27 @@ Then retry \`${name}\` with the correct format from the skill examples.` : `💡
|
|
|
579
588
|
property.type = "string";
|
|
580
589
|
}
|
|
581
590
|
break;
|
|
591
|
+
case "ZodLazy":
|
|
592
|
+
// Unwrap lazy schema (used for recursive types like WhereFilter)
|
|
593
|
+
// Guard against infinite recursion from self-referencing schemas
|
|
594
|
+
if (!this._lazyGuard)
|
|
595
|
+
this._lazyGuard = new Set();
|
|
596
|
+
if (this._lazyGuard.has(unwrappedType)) {
|
|
597
|
+
property.type = "object";
|
|
598
|
+
break;
|
|
599
|
+
}
|
|
600
|
+
this._lazyGuard.add(unwrappedType);
|
|
601
|
+
if (unwrappedType._def?.getter) {
|
|
602
|
+
const resolved = unwrappedType._def.getter();
|
|
603
|
+
const lazyResult = this.convertZodTypeToJsonSchema(resolved);
|
|
604
|
+
this._lazyGuard.delete(unwrappedType);
|
|
605
|
+
if (property.description)
|
|
606
|
+
lazyResult.description = property.description;
|
|
607
|
+
return lazyResult;
|
|
608
|
+
}
|
|
609
|
+
this._lazyGuard.delete(unwrappedType);
|
|
610
|
+
property.type = "object";
|
|
611
|
+
break;
|
|
582
612
|
default:
|
|
583
613
|
property.type = "string";
|
|
584
614
|
}
|
|
@@ -305,6 +305,46 @@ function formatFilteredActivityListResponse(activityData, workflow, init, args)
|
|
|
305
305
|
],
|
|
306
306
|
};
|
|
307
307
|
}
|
|
308
|
+
/**
|
|
309
|
+
* Auto-fix date fields: convert ISO date strings (e.g. "2026-03-11") to Unix timestamps (ms).
|
|
310
|
+
* LLMs often pass date strings instead of timestamps — this catches and converts them.
|
|
311
|
+
*/
|
|
312
|
+
function autoFixDateFields(fields, context) {
|
|
313
|
+
if (!context.workspaceCache)
|
|
314
|
+
return;
|
|
315
|
+
for (const [fieldId, fieldValue] of Object.entries(fields)) {
|
|
316
|
+
// Only fix string values that look like ISO dates
|
|
317
|
+
if (typeof fieldValue !== 'string' || !/^\d{4}-\d{2}-\d{2}/.test(fieldValue))
|
|
318
|
+
continue;
|
|
319
|
+
// Check if this field is a date type
|
|
320
|
+
let fieldType;
|
|
321
|
+
for (const workflow of context.workspaceCache.rawInit.processes) {
|
|
322
|
+
const workflowFields = workflow.fields;
|
|
323
|
+
if (!workflowFields)
|
|
324
|
+
continue;
|
|
325
|
+
let field;
|
|
326
|
+
if (Array.isArray(workflowFields)) {
|
|
327
|
+
field = workflowFields.find((f) => f._id === fieldId || f.id === fieldId);
|
|
328
|
+
}
|
|
329
|
+
else if (typeof workflowFields === 'object') {
|
|
330
|
+
field = workflowFields[fieldId];
|
|
331
|
+
}
|
|
332
|
+
if (field) {
|
|
333
|
+
fieldType = field.type;
|
|
334
|
+
break;
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
if (fieldType === 'date') {
|
|
338
|
+
const parsed = new Date(fieldValue).getTime();
|
|
339
|
+
if (!isNaN(parsed)) {
|
|
340
|
+
logger.warn("Auto-fixing date field - converting ISO string to timestamp", {
|
|
341
|
+
fieldId, original: fieldValue, converted: parsed,
|
|
342
|
+
});
|
|
343
|
+
fields[fieldId] = parsed;
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
}
|
|
308
348
|
/** Build activity update object */
|
|
309
349
|
function buildActivityUpdate(args, context) {
|
|
310
350
|
let parsedFields = args.fields;
|
|
@@ -345,8 +385,10 @@ function buildActivityUpdate(args, context) {
|
|
|
345
385
|
}
|
|
346
386
|
}
|
|
347
387
|
}
|
|
348
|
-
// Field-type aware validation
|
|
388
|
+
// Field-type aware validation and auto-fix
|
|
349
389
|
if (parsedFields && typeof parsedFields === "object" && context.workspaceCache) {
|
|
390
|
+
// Auto-fix date strings → timestamps
|
|
391
|
+
autoFixDateFields(parsedFields, context);
|
|
350
392
|
const invalidUsers = [];
|
|
351
393
|
for (const [fieldId, fieldValue] of Object.entries(parsedFields)) {
|
|
352
394
|
// Only check string values that look like IDs
|
|
@@ -417,10 +459,24 @@ function formatUpdateActivityResponse(args, result) {
|
|
|
417
459
|
],
|
|
418
460
|
};
|
|
419
461
|
}
|
|
462
|
+
const listActivitiesDescription = `List activities (items/records/tasks) from a workflow phase.
|
|
463
|
+
|
|
464
|
+
**Prerequisites:** You need workflowId, phaseId, and field IDs. Get them via:
|
|
465
|
+
1. \`list_workflows_minimal\` → workflowId
|
|
466
|
+
2. \`list_workflow_phases\` → phaseId
|
|
467
|
+
3. \`get_workflow_schema\` → field IDs for the \`fields\` parameter
|
|
468
|
+
|
|
469
|
+
**Required params:** workflowId, phaseId, fields[] (array of field IDs to return)
|
|
470
|
+
|
|
471
|
+
**Example flow:** User says "show my tasks" →
|
|
472
|
+
1. list_workflows_minimal → find "Tasks" workflow
|
|
473
|
+
2. list_workflow_phases → find "Open" phase
|
|
474
|
+
3. get_workflow_schema → get field IDs
|
|
475
|
+
4. list_activities with those IDs`;
|
|
420
476
|
exports.listActivitiesTool = {
|
|
421
477
|
name: 'list_activities',
|
|
422
478
|
group: tool_registry_1.ToolGroup.READ,
|
|
423
|
-
description:
|
|
479
|
+
description: listActivitiesDescription,
|
|
424
480
|
schema: zod_1.z.object({
|
|
425
481
|
workflowId: zod_1.z.string().describe("Workflow ID to list activities from"),
|
|
426
482
|
phaseId: zod_1.z.string().describe("Phase ID to filter activities (required - use list_workflow_phases to get available phases)"),
|
|
@@ -560,10 +616,15 @@ exports.listActivitiesTool = {
|
|
|
560
616
|
}
|
|
561
617
|
},
|
|
562
618
|
};
|
|
619
|
+
const showActivityByIdDescription = `Get full details of a single activity by its ID.
|
|
620
|
+
|
|
621
|
+
**When to use:** When you have an activity ID and need all its field values, or to verify an update worked.
|
|
622
|
+
|
|
623
|
+
**Returns:** Complete activity with all fields, current phase, timestamps, linked items.`;
|
|
563
624
|
exports.showActivityByIdTool = {
|
|
564
625
|
name: 'show_activity_by_id',
|
|
565
626
|
group: tool_registry_1.ToolGroup.READ,
|
|
566
|
-
description:
|
|
627
|
+
description: showActivityByIdDescription,
|
|
567
628
|
schema: zod_1.z.object({
|
|
568
629
|
activityId: zod_1.z.string().describe("Activity ID to load"),
|
|
569
630
|
}),
|
|
@@ -599,11 +660,24 @@ exports.showActivityByIdTool = {
|
|
|
599
660
|
// ============================================================================
|
|
600
661
|
// TOOL 3: CREATE ACTIVITY
|
|
601
662
|
// ============================================================================
|
|
602
|
-
const createActivityDescription = `Create activity (
|
|
663
|
+
const createActivityDescription = `Create a new activity (item/record/task) in a workflow.
|
|
603
664
|
|
|
604
|
-
**
|
|
665
|
+
**Prerequisites:** Get IDs first via:
|
|
666
|
+
1. \`list_workflows_minimal\` → workflowId
|
|
667
|
+
2. \`list_workflow_phases\` → phaseId (use isInitial=true phase)
|
|
668
|
+
3. \`get_workflow_schema\` → field IDs for the fields parameter
|
|
605
669
|
|
|
606
|
-
**
|
|
670
|
+
**Required:** workflowId + (name OR activities[])
|
|
671
|
+
**Recommended:** phaseId (defaults to initial phase if omitted)
|
|
672
|
+
|
|
673
|
+
**Field value formats:**
|
|
674
|
+
- Text: \`"value"\`
|
|
675
|
+
- Number: \`42\`
|
|
676
|
+
- Date: Unix ms \`1730937600000\` (NOT "2025-01-18")
|
|
677
|
+
- Dropdown: exact option \`"High"\`
|
|
678
|
+
- User/Link: ID string \`"5f8a..."\`
|
|
679
|
+
|
|
680
|
+
**Bulk creation:** Use activities[] array instead of name/fields for multiple items.`;
|
|
607
681
|
exports.createActivityTool = {
|
|
608
682
|
name: 'create_activity',
|
|
609
683
|
group: tool_registry_1.ToolGroup.WRITE,
|
|
@@ -691,6 +765,8 @@ exports.createActivityTool = {
|
|
|
691
765
|
if (parsedFields &&
|
|
692
766
|
typeof parsedFields === "object" &&
|
|
693
767
|
Object.keys(parsedFields).length > 0) {
|
|
768
|
+
// Auto-fix date strings → timestamps
|
|
769
|
+
autoFixDateFields(parsedFields, context);
|
|
694
770
|
activity.fields = parsedFields;
|
|
695
771
|
}
|
|
696
772
|
}
|
|
@@ -932,7 +1008,21 @@ exports.createActivityTool = {
|
|
|
932
1008
|
// ============================================================================
|
|
933
1009
|
// TOOL 4: UPDATE ACTIVITY
|
|
934
1010
|
// ============================================================================
|
|
935
|
-
const updateActivityDescription = `Update activity
|
|
1011
|
+
const updateActivityDescription = `Update an existing activity - change fields or move to different phase.
|
|
1012
|
+
|
|
1013
|
+
**To update fields:** Get field IDs from \`get_workflow_schema\` first, then pass them in the fields object.
|
|
1014
|
+
**To change phase:** Get phase IDs from \`list_workflow_phases\`, pass target phaseId.
|
|
1015
|
+
|
|
1016
|
+
**Required:** activityId (for single) OR activities[] array (for bulk)
|
|
1017
|
+
|
|
1018
|
+
**Field value formats:**
|
|
1019
|
+
- Text: \`"value"\`
|
|
1020
|
+
- Number: \`42\`
|
|
1021
|
+
- Date: Unix ms \`1730937600000\` (NOT strings)
|
|
1022
|
+
- ActivityLink: just the ID string \`"abc123..."\` (NOT an object)
|
|
1023
|
+
|
|
1024
|
+
**Example - move to Done:** \`update_activity({ activityId: "...", phaseId: "done-phase-id" })\`
|
|
1025
|
+
**Example - update field:** \`update_activity({ activityId: "...", fields: { "fieldId": "new value" } })\``;
|
|
936
1026
|
exports.updateActivityTool = {
|
|
937
1027
|
name: 'update_activity',
|
|
938
1028
|
group: tool_registry_1.ToolGroup.WRITE,
|
|
@@ -1026,6 +1116,8 @@ exports.updateActivityTool = {
|
|
|
1026
1116
|
}
|
|
1027
1117
|
}
|
|
1028
1118
|
}
|
|
1119
|
+
// Auto-fix date strings → timestamps
|
|
1120
|
+
autoFixDateFields(parsedFields, context);
|
|
1029
1121
|
activityUpdate.fields = parsedFields;
|
|
1030
1122
|
}
|
|
1031
1123
|
return activityUpdate;
|