@weavelogic/knowledge-graph-agent 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. package/README.md +290 -3
  2. package/dist/_virtual/index10.js +2 -2
  3. package/dist/_virtual/index6.js +2 -2
  4. package/dist/_virtual/index7.js +2 -2
  5. package/dist/_virtual/index8.js +2 -2
  6. package/dist/_virtual/index9.js +2 -2
  7. package/dist/audit/config.d.ts +150 -0
  8. package/dist/audit/config.d.ts.map +1 -0
  9. package/dist/audit/config.js +111 -0
  10. package/dist/audit/config.js.map +1 -0
  11. package/dist/audit/index.d.ts +38 -0
  12. package/dist/audit/index.d.ts.map +1 -0
  13. package/dist/audit/services/audit-chain.d.ts +276 -0
  14. package/dist/audit/services/audit-chain.d.ts.map +1 -0
  15. package/dist/audit/services/audit-chain.js +502 -0
  16. package/dist/audit/services/audit-chain.js.map +1 -0
  17. package/dist/audit/services/index.d.ts +11 -0
  18. package/dist/audit/services/index.d.ts.map +1 -0
  19. package/dist/audit/services/syndication.d.ts +334 -0
  20. package/dist/audit/services/syndication.d.ts.map +1 -0
  21. package/dist/audit/services/syndication.js +589 -0
  22. package/dist/audit/services/syndication.js.map +1 -0
  23. package/dist/audit/types.d.ts +453 -0
  24. package/dist/audit/types.d.ts.map +1 -0
  25. package/dist/cli/commands/audit.d.ts +21 -0
  26. package/dist/cli/commands/audit.d.ts.map +1 -0
  27. package/dist/cli/commands/audit.js +621 -0
  28. package/dist/cli/commands/audit.js.map +1 -0
  29. package/dist/cli/commands/vector.d.ts +14 -0
  30. package/dist/cli/commands/vector.d.ts.map +1 -0
  31. package/dist/cli/commands/vector.js +429 -0
  32. package/dist/cli/commands/vector.js.map +1 -0
  33. package/dist/cli/commands/workflow.d.ts +12 -0
  34. package/dist/cli/commands/workflow.d.ts.map +1 -0
  35. package/dist/cli/commands/workflow.js +471 -0
  36. package/dist/cli/commands/workflow.js.map +1 -0
  37. package/dist/cli/index.d.ts.map +1 -1
  38. package/dist/cli/index.js +26 -0
  39. package/dist/cli/index.js.map +1 -1
  40. package/dist/database/schemas/index.d.ts +85 -0
  41. package/dist/database/schemas/index.d.ts.map +1 -0
  42. package/dist/index.d.ts +2 -0
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +9 -0
  45. package/dist/index.js.map +1 -1
  46. package/dist/mcp-server/tools/audit/checkpoint.d.ts +58 -0
  47. package/dist/mcp-server/tools/audit/checkpoint.d.ts.map +1 -0
  48. package/dist/mcp-server/tools/audit/checkpoint.js +73 -0
  49. package/dist/mcp-server/tools/audit/checkpoint.js.map +1 -0
  50. package/dist/mcp-server/tools/audit/index.d.ts +53 -0
  51. package/dist/mcp-server/tools/audit/index.d.ts.map +1 -0
  52. package/dist/mcp-server/tools/audit/index.js +12 -0
  53. package/dist/mcp-server/tools/audit/index.js.map +1 -0
  54. package/dist/mcp-server/tools/audit/query.d.ts +58 -0
  55. package/dist/mcp-server/tools/audit/query.d.ts.map +1 -0
  56. package/dist/mcp-server/tools/audit/query.js +125 -0
  57. package/dist/mcp-server/tools/audit/query.js.map +1 -0
  58. package/dist/mcp-server/tools/audit/sync.d.ts +58 -0
  59. package/dist/mcp-server/tools/audit/sync.d.ts.map +1 -0
  60. package/dist/mcp-server/tools/audit/sync.js +126 -0
  61. package/dist/mcp-server/tools/audit/sync.js.map +1 -0
  62. package/dist/mcp-server/tools/index.d.ts +3 -0
  63. package/dist/mcp-server/tools/index.d.ts.map +1 -1
  64. package/dist/mcp-server/tools/registry.js +90 -0
  65. package/dist/mcp-server/tools/registry.js.map +1 -1
  66. package/dist/mcp-server/tools/vector/index.d.ts +12 -0
  67. package/dist/mcp-server/tools/vector/index.d.ts.map +1 -0
  68. package/dist/mcp-server/tools/vector/index.js +12 -0
  69. package/dist/mcp-server/tools/vector/index.js.map +1 -0
  70. package/dist/mcp-server/tools/vector/search.d.ts +41 -0
  71. package/dist/mcp-server/tools/vector/search.d.ts.map +1 -0
  72. package/dist/mcp-server/tools/vector/search.js +224 -0
  73. package/dist/mcp-server/tools/vector/search.js.map +1 -0
  74. package/dist/mcp-server/tools/vector/trajectory.d.ts +39 -0
  75. package/dist/mcp-server/tools/vector/trajectory.d.ts.map +1 -0
  76. package/dist/mcp-server/tools/vector/trajectory.js +170 -0
  77. package/dist/mcp-server/tools/vector/trajectory.js.map +1 -0
  78. package/dist/mcp-server/tools/vector/upsert.d.ts +44 -0
  79. package/dist/mcp-server/tools/vector/upsert.d.ts.map +1 -0
  80. package/dist/mcp-server/tools/vector/upsert.js +175 -0
  81. package/dist/mcp-server/tools/vector/upsert.js.map +1 -0
  82. package/dist/mcp-server/tools/workflow/index.d.ts +29 -0
  83. package/dist/mcp-server/tools/workflow/index.d.ts.map +1 -0
  84. package/dist/mcp-server/tools/workflow/index.js +12 -0
  85. package/dist/mcp-server/tools/workflow/index.js.map +1 -0
  86. package/dist/mcp-server/tools/workflow/list.d.ts +41 -0
  87. package/dist/mcp-server/tools/workflow/list.d.ts.map +1 -0
  88. package/dist/mcp-server/tools/workflow/list.js +195 -0
  89. package/dist/mcp-server/tools/workflow/list.js.map +1 -0
  90. package/dist/mcp-server/tools/workflow/start.d.ts +40 -0
  91. package/dist/mcp-server/tools/workflow/start.d.ts.map +1 -0
  92. package/dist/mcp-server/tools/workflow/start.js +165 -0
  93. package/dist/mcp-server/tools/workflow/start.js.map +1 -0
  94. package/dist/mcp-server/tools/workflow/status.d.ts +38 -0
  95. package/dist/mcp-server/tools/workflow/status.d.ts.map +1 -0
  96. package/dist/mcp-server/tools/workflow/status.js +97 -0
  97. package/dist/mcp-server/tools/workflow/status.js.map +1 -0
  98. package/dist/node_modules/ajv/dist/compile/index.js +1 -1
  99. package/dist/node_modules/ajv/dist/vocabularies/applicator/index.js +1 -1
  100. package/dist/node_modules/ajv/dist/vocabularies/core/index.js +1 -1
  101. package/dist/node_modules/ajv/dist/vocabularies/format/index.js +1 -1
  102. package/dist/node_modules/ajv/dist/vocabularies/validation/index.js +1 -1
  103. package/dist/vector/config.d.ts +300 -0
  104. package/dist/vector/config.d.ts.map +1 -0
  105. package/dist/vector/config.js +124 -0
  106. package/dist/vector/config.js.map +1 -0
  107. package/dist/vector/index.d.ts +50 -0
  108. package/dist/vector/index.d.ts.map +1 -0
  109. package/dist/vector/services/index.d.ts +13 -0
  110. package/dist/vector/services/index.d.ts.map +1 -0
  111. package/dist/vector/services/trajectory-tracker.d.ts +405 -0
  112. package/dist/vector/services/trajectory-tracker.d.ts.map +1 -0
  113. package/dist/vector/services/trajectory-tracker.js +445 -0
  114. package/dist/vector/services/trajectory-tracker.js.map +1 -0
  115. package/dist/vector/services/vector-store.d.ts +339 -0
  116. package/dist/vector/services/vector-store.d.ts.map +1 -0
  117. package/dist/vector/services/vector-store.js +748 -0
  118. package/dist/vector/services/vector-store.js.map +1 -0
  119. package/dist/vector/types.d.ts +677 -0
  120. package/dist/vector/types.d.ts.map +1 -0
  121. package/dist/workflow/adapters/goap-adapter.d.ts +196 -0
  122. package/dist/workflow/adapters/goap-adapter.d.ts.map +1 -0
  123. package/dist/workflow/adapters/goap-adapter.js +706 -0
  124. package/dist/workflow/adapters/goap-adapter.js.map +1 -0
  125. package/dist/workflow/adapters/index.d.ts +10 -0
  126. package/dist/workflow/adapters/index.d.ts.map +1 -0
  127. package/dist/workflow/config.d.ts +135 -0
  128. package/dist/workflow/config.d.ts.map +1 -0
  129. package/dist/workflow/config.js +92 -0
  130. package/dist/workflow/config.js.map +1 -0
  131. package/dist/workflow/handlers/index.d.ts +9 -0
  132. package/dist/workflow/handlers/index.d.ts.map +1 -0
  133. package/dist/workflow/handlers/webhook-handlers.d.ts +397 -0
  134. package/dist/workflow/handlers/webhook-handlers.d.ts.map +1 -0
  135. package/dist/workflow/handlers/webhook-handlers.js +454 -0
  136. package/dist/workflow/handlers/webhook-handlers.js.map +1 -0
  137. package/dist/workflow/index.d.ts +42 -0
  138. package/dist/workflow/index.d.ts.map +1 -0
  139. package/dist/workflow/services/index.d.ts +9 -0
  140. package/dist/workflow/services/index.d.ts.map +1 -0
  141. package/dist/workflow/services/workflow-service.d.ts +318 -0
  142. package/dist/workflow/services/workflow-service.d.ts.map +1 -0
  143. package/dist/workflow/services/workflow-service.js +577 -0
  144. package/dist/workflow/services/workflow-service.js.map +1 -0
  145. package/dist/workflow/types.d.ts +470 -0
  146. package/dist/workflow/types.d.ts.map +1 -0
  147. package/dist/workflow/workflows/realtime-collab.d.ts +245 -0
  148. package/dist/workflow/workflows/realtime-collab.d.ts.map +1 -0
  149. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"goap-adapter.js","sources":["../../../src/workflow/adapters/goap-adapter.ts"],"sourcesContent":["/**\n * GOAP Adapter\n *\n * Adapts the existing goal-planner agent for use with Workflow DevKit.\n * Provides A* search-based planning with OODA loop integration.\n *\n * @module workflow/adapters/goap-adapter\n */\n\nimport type {\n WorldState,\n GOAPAction,\n GOAPGoal,\n GOAPPlan,\n PlanExecutionResult,\n ReadinessEvaluation,\n} from '../types.js';\nimport { createLogger } from '../../utils/index.js';\n\nconst logger = createLogger('goap-adapter');\n\n// ============================================================================\n// Priority Queue Implementation\n// ============================================================================\n\n/**\n * Priority queue item with priority score\n */\ninterface PriorityQueueItem<T> {\n item: T;\n priority: number;\n}\n\n/**\n * Priority queue implementation for A* search\n *\n * Uses a binary heap for efficient O(log n) enqueue and dequeue operations.\n * Items with lower priority values are dequeued first (min-heap).\n */\nclass PriorityQueue<T> {\n private items: Array<PriorityQueueItem<T>> = [];\n\n /**\n * Add an item to the queue with a priority\n *\n * @param item - The item to add\n * @param priority - Priority value (lower = higher priority)\n */\n enqueue(item: T, priority: number): void {\n this.items.push({ item, priority });\n this.bubbleUp(this.items.length - 1);\n }\n\n /**\n * Remove and return the highest priority item\n *\n * @returns The item with lowest priority value, or undefined if empty\n */\n dequeue(): T | undefined {\n if (this.items.length === 0) {\n return undefined;\n }\n\n const result = this.items[0].item;\n\n if (this.items.length === 1) {\n this.items.pop();\n } else {\n this.items[0] = this.items.pop()!;\n this.bubbleDown(0);\n }\n\n return result;\n }\n\n /**\n * Check if the queue is empty\n */\n isEmpty(): boolean {\n return this.items.length === 0;\n }\n\n /**\n * Get the current size of the queue\n */\n size(): number {\n return this.items.length;\n }\n\n /**\n * Peek at the highest priority item without removing it\n */\n peek(): T | undefined {\n return this.items[0]?.item;\n }\n\n /**\n * Clear all items from the queue\n */\n clear(): void {\n this.items = [];\n }\n\n /**\n * Bubble up an item to maintain heap property\n */\n private bubbleUp(index: number): void {\n while (index > 0) {\n const parentIndex = Math.floor((index - 1) / 2);\n if (this.items[parentIndex].priority <= this.items[index].priority) {\n break;\n }\n [this.items[parentIndex], this.items[index]] = [\n this.items[index],\n this.items[parentIndex],\n ];\n index = parentIndex;\n }\n }\n\n /**\n * Bubble down an item to maintain heap property\n */\n private bubbleDown(index: number): void {\n const length = this.items.length;\n\n while (true) {\n const leftChild = 2 * index + 1;\n const rightChild = 2 * index + 2;\n let smallest = index;\n\n if (\n leftChild < length &&\n this.items[leftChild].priority < this.items[smallest].priority\n ) {\n smallest = leftChild;\n }\n\n if (\n rightChild < length &&\n this.items[rightChild].priority < this.items[smallest].priority\n ) {\n smallest = rightChild;\n }\n\n if (smallest === index) {\n break;\n }\n\n [this.items[index], this.items[smallest]] = [\n this.items[smallest],\n this.items[index],\n ];\n index = smallest;\n }\n }\n}\n\n// ============================================================================\n// State Node for A* Search\n// ============================================================================\n\n/**\n * State node for A* search algorithm\n *\n * Represents a node in the search graph with costs and parent reference\n * for path reconstruction.\n */\ninterface StateNode {\n /** Current world state at this node */\n state: WorldState;\n /** Cost from start node (g-cost) */\n gCost: number;\n /** Heuristic cost to goal (h-cost) */\n hCost: number;\n /** Total cost (f-cost = g-cost + h-cost) */\n fCost: number;\n /** Parent node for path reconstruction */\n parent: StateNode | null;\n /** Action taken to reach this state from parent */\n action: GOAPAction | null;\n}\n\n/**\n * GOAP Adapter configuration\n */\nexport interface GOAPAdapterConfig {\n /** Maximum planning iterations */\n maxIterations?: number;\n /** Planning timeout in ms */\n timeoutMs?: number;\n /** Default action cost */\n defaultCost?: number;\n /** Enable plan caching */\n enableCaching?: boolean;\n /** Maximum plan length */\n maxPlanLength?: number;\n /** Custom actions to register */\n actions?: GOAPAction[];\n /** Custom heuristic function */\n heuristic?: (state: WorldState, goal: Partial<WorldState>) => number;\n /** Logger function */\n logger?: (level: string, message: string, data?: Record<string, unknown>) => void;\n}\n\n// ============================================================================\n// Default GOAP Actions\n// ============================================================================\n\n/**\n * Default GOAP actions for knowledge graph workflows\n *\n * These actions represent common development workflow operations\n * and can be extended or replaced with custom actions.\n */\nexport const DEFAULT_GOAP_ACTIONS: GOAPAction[] = [\n {\n id: 'analyze-spec',\n name: 'Analyze Specification',\n cost: 1,\n preconditions: { hasSpecification: true },\n effects: { specCompleteness: 0 }, // Will be calculated\n execute: async (state) => ({\n ...state,\n specCompleteness: Math.min(1, state.specCompleteness + 0.3 + Math.random() * 0.2),\n }),\n },\n {\n id: 'generate-task-spec',\n name: 'Generate Task Specification',\n cost: 3,\n preconditions: {\n specCompleteness: 0.7, // Must be >= 0.7\n hasAcceptanceCriteria: true,\n },\n effects: { taskDefined: true },\n execute: async (state) => ({\n ...state,\n taskDefined: true,\n }),\n },\n {\n id: 'generate-missing-docs',\n name: 'Generate Missing Documentation',\n cost: 5,\n preconditions: {\n specCompleteness: 0, // Any completeness\n timeSinceLastChange: 300000, // 5 minutes\n },\n effects: { specCompleteness: 0.3 }, // Adds 0.3\n execute: async (state) => ({\n ...state,\n specCompleteness: Math.min(1, state.specCompleteness + 0.3),\n }),\n },\n {\n id: 'start-development',\n name: 'Start Development',\n cost: 10,\n preconditions: {\n taskDefined: true,\n blockersFree: true,\n },\n effects: { developmentStarted: true },\n execute: async (state) => ({\n ...state,\n developmentStarted: true,\n }),\n },\n {\n id: 'resolve-blockers',\n name: 'Resolve Blockers',\n cost: 8,\n preconditions: { blockersFree: false },\n effects: { blockersFree: true },\n execute: async (state) => ({\n ...state,\n blockersFree: true,\n }),\n },\n {\n id: 'request-clarification',\n name: 'Request Clarification',\n cost: 2,\n preconditions: { hasAcceptanceCriteria: false },\n effects: { hasAcceptanceCriteria: true },\n execute: async (state) => ({\n ...state,\n hasAcceptanceCriteria: true,\n }),\n },\n];\n\n// ============================================================================\n// GOAP Adapter Class\n// ============================================================================\n\n/**\n * GOAP Adapter class\n *\n * Implements Goal-Oriented Action Planning using A* search algorithm.\n * Integrates with the existing goal-planner agent patterns.\n *\n * @example\n * ```typescript\n * const adapter = new GOAPAdapter({\n * actions: DEFAULT_GOAP_ACTIONS,\n * maxIterations: 1000,\n * });\n *\n * const plan = await adapter.createPlan(worldState, 'start-development');\n * if (plan.achievable) {\n * const result = await adapter.executePlan(plan, worldState);\n * console.log('Execution result:', result);\n * }\n * ```\n */\nexport class GOAPAdapter {\n private config: Required<Omit<GOAPAdapterConfig, 'actions' | 'heuristic' | 'logger'>>;\n private actions: Map<string, GOAPAction> = new Map();\n private goals: Map<string, GOAPGoal> = new Map();\n private planCache: Map<string, GOAPPlan> = new Map();\n private customHeuristic?: (state: WorldState, goal: Partial<WorldState>) => number;\n\n constructor(config: GOAPAdapterConfig = {}) {\n this.config = {\n maxIterations: config.maxIterations ?? 1000,\n timeoutMs: config.timeoutMs ?? 30000,\n defaultCost: config.defaultCost ?? 1,\n enableCaching: config.enableCaching ?? true,\n maxPlanLength: config.maxPlanLength ?? 20,\n };\n this.customHeuristic = config.heuristic;\n\n // Register default actions first\n this.registerDefaultActions();\n\n // Then register any custom actions passed in config\n if (config.actions) {\n for (const action of config.actions) {\n this.registerAction(action);\n }\n }\n\n this.registerDefaultGoals();\n }\n\n /**\n * Register default actions for documentation workflows\n */\n private registerDefaultActions(): void {\n // Action: Analyze specification\n this.registerAction({\n id: 'analyze-spec',\n name: 'Analyze Specification',\n description: 'Analyze the specification document for completeness',\n cost: 1,\n preconditions: {\n hasSpecification: true,\n },\n effects: {\n specCompleteness: 0.5, // Will be refined during execution\n },\n });\n\n // Action: Generate acceptance criteria\n this.registerAction({\n id: 'generate-acceptance-criteria',\n name: 'Generate Acceptance Criteria',\n description: 'Generate acceptance criteria from specification',\n cost: 2,\n preconditions: {\n hasSpecification: true,\n specCompleteness: 0.5,\n },\n effects: {\n hasAcceptanceCriteria: true,\n },\n });\n\n // Action: Create task\n this.registerAction({\n id: 'create-task',\n name: 'Create Task',\n description: 'Create a development task from the specification',\n cost: 1,\n preconditions: {\n hasSpecification: true,\n hasAcceptanceCriteria: true,\n blockersFree: true,\n },\n effects: {\n taskDefined: true,\n },\n });\n\n // Action: Start development\n this.registerAction({\n id: 'start-development',\n name: 'Start Development',\n description: 'Begin development work on the task',\n cost: 3,\n preconditions: {\n taskDefined: true,\n blockersFree: true,\n },\n effects: {\n developmentStarted: true,\n },\n });\n\n // Action: Fill documentation gaps\n this.registerAction({\n id: 'fill-gaps',\n name: 'Fill Documentation Gaps',\n description: 'Generate content to fill documentation gaps',\n cost: 2,\n preconditions: {\n hasSpecification: true,\n },\n effects: {\n specCompleteness: 0.8,\n pendingGaps: [],\n },\n });\n\n // Action: Resolve blockers\n this.registerAction({\n id: 'resolve-blockers',\n name: 'Resolve Blockers',\n description: 'Resolve blocking issues',\n cost: 4,\n preconditions: {\n blockersFree: false,\n },\n effects: {\n blockersFree: true,\n },\n });\n }\n\n /**\n * Register default goals\n */\n private registerDefaultGoals(): void {\n // Goal: Start development\n this.registerGoal({\n id: 'start-development',\n name: 'Start Development',\n description: 'Get the project ready to begin development',\n conditions: {\n taskDefined: true,\n developmentStarted: true,\n },\n priority: 10,\n });\n\n // Goal: Complete specification\n this.registerGoal({\n id: 'complete-spec',\n name: 'Complete Specification',\n description: 'Ensure specification is complete with acceptance criteria',\n conditions: {\n hasSpecification: true,\n specCompleteness: 0.8,\n hasAcceptanceCriteria: true,\n },\n priority: 8,\n });\n\n // Goal: Resolve all blockers\n this.registerGoal({\n id: 'resolve-blockers',\n name: 'Resolve All Blockers',\n description: 'Clear all blocking issues',\n conditions: {\n blockersFree: true,\n },\n priority: 9,\n });\n }\n\n /**\n * Register an action\n *\n * @param action - Action definition to register\n */\n registerAction(action: GOAPAction): void {\n this.actions.set(action.id, action);\n logger.debug('Registered action', { actionId: action.id });\n }\n\n /**\n * Register a goal\n *\n * @param goal - Goal definition to register\n */\n registerGoal(goal: GOAPGoal): void {\n this.goals.set(goal.id, goal);\n logger.debug('Registered goal', { goalId: goal.id });\n }\n\n /**\n * Get a registered action by ID\n *\n * @param actionId - Action identifier\n * @returns Action definition or undefined\n */\n getAction(actionId: string): GOAPAction | undefined {\n return this.actions.get(actionId);\n }\n\n /**\n * Get a registered goal by ID\n *\n * @param goalId - Goal identifier\n * @returns Goal definition or undefined\n */\n getGoal(goalId: string): GOAPGoal | undefined {\n return this.goals.get(goalId);\n }\n\n /**\n * Get all registered actions\n *\n * @returns Array of action definitions\n */\n getActions(): GOAPAction[] {\n return Array.from(this.actions.values());\n }\n\n /**\n * Get all registered goals\n *\n * @returns Array of goal definitions\n */\n getGoals(): GOAPGoal[] {\n return Array.from(this.goals.values());\n }\n\n /**\n * Create a plan to achieve a goal from the current state\n *\n * @param currentState - Current world state\n * @param goalId - Goal to achieve\n * @returns Plan to achieve the goal\n */\n createPlan(currentState: WorldState, goalId: string): GOAPPlan {\n const goal = this.goals.get(goalId);\n if (!goal) {\n return {\n goalId,\n actionIds: [],\n totalCost: Infinity,\n achievable: false,\n reason: `Unknown goal: ${goalId}`,\n createdAt: new Date(),\n };\n }\n\n // Check cache\n const cacheKey = this.createCacheKey(currentState, goalId);\n if (this.config.enableCaching && this.planCache.has(cacheKey)) {\n const cached = this.planCache.get(cacheKey)!;\n logger.debug('Using cached plan', { goalId, cacheKey });\n return cached;\n }\n\n logger.debug('Creating plan', { goalId, currentState });\n\n // Check if goal is already satisfied\n if (this.isGoalSatisfied(currentState, goal)) {\n const plan: GOAPPlan = {\n goalId,\n actionIds: [],\n totalCost: 0,\n achievable: true,\n createdAt: new Date(),\n };\n this.cachePlan(cacheKey, plan);\n return plan;\n }\n\n // A* search for plan\n const plan = this.aStarSearch(currentState, goal);\n this.cachePlan(cacheKey, plan);\n\n return plan;\n }\n\n /**\n * A* search algorithm for plan finding\n *\n * Uses a binary heap priority queue for efficient O(log n) operations.\n * Implements proper path reconstruction using parent node references.\n */\n private aStarSearch(startState: WorldState, goal: GOAPGoal): GOAPPlan {\n const startTime = Date.now();\n const openSet = new PriorityQueue<StateNode>();\n const closedSet = new Set<string>();\n\n // Initialize with start node\n const startHeuristic = this.heuristic(startState, goal);\n const startNode: StateNode = {\n state: { ...startState },\n gCost: 0,\n hCost: startHeuristic,\n fCost: startHeuristic,\n parent: null,\n action: null,\n };\n openSet.enqueue(startNode, startNode.fCost);\n\n let iterations = 0;\n let nodesExplored = 0;\n\n while (!openSet.isEmpty() && iterations < this.config.maxIterations) {\n // Check timeout\n if (Date.now() - startTime > this.config.timeoutMs) {\n logger.warn('Planning timeout', { goalId: goal.id, iterations, nodesExplored });\n return {\n goalId: goal.id,\n actionIds: [],\n totalCost: Infinity,\n achievable: false,\n reason: 'Planning timeout exceeded',\n createdAt: new Date(),\n };\n }\n\n iterations++;\n const current = openSet.dequeue()!;\n const stateKey = this.stateToKey(current.state);\n\n // Skip already visited states\n if (closedSet.has(stateKey)) {\n continue;\n }\n closedSet.add(stateKey);\n nodesExplored++;\n\n // Check if goal reached\n if (this.isGoalSatisfied(current.state, goal)) {\n const plan = this.reconstructPlan(current, goal);\n logger.debug('Plan found', {\n goalId: goal.id,\n iterations,\n nodesExplored,\n actionCount: plan.actionIds.length,\n });\n return plan;\n }\n\n // Check plan length limit\n let pathLength = 0;\n let node: StateNode | null = current;\n while (node) {\n pathLength++;\n node = node.parent;\n }\n if (pathLength >= this.config.maxPlanLength) {\n continue; // Skip paths that are too long\n }\n\n // Expand neighbors (applicable actions)\n for (const action of Array.from(this.actions.values())) {\n if (!this.canApply(action, current.state)) {\n continue;\n }\n\n const newState = this.applyAction(action, current.state);\n const newStateKey = this.stateToKey(newState);\n\n if (closedSet.has(newStateKey)) {\n continue;\n }\n\n const gCost = current.gCost + action.cost;\n const hCost = this.heuristic(newState, goal);\n const fCost = gCost + hCost;\n\n const newNode: StateNode = {\n state: newState,\n gCost,\n hCost,\n fCost,\n parent: current,\n action,\n };\n\n openSet.enqueue(newNode, fCost);\n }\n }\n\n logger.debug('No plan found', { goalId: goal.id, iterations, nodesExplored });\n return {\n goalId: goal.id,\n actionIds: [],\n totalCost: Infinity,\n achievable: false,\n reason: 'No valid action sequence found',\n createdAt: new Date(),\n };\n }\n\n /**\n * Reconstruct the plan from the goal node by following parent references\n *\n * @param goalNode - The node that reached the goal\n * @param goal - The goal definition\n * @returns Complete GOAP plan\n */\n private reconstructPlan(goalNode: StateNode, goal: GOAPGoal): GOAPPlan {\n const actionIds: string[] = [];\n let current: StateNode | null = goalNode;\n let totalCost = 0;\n\n // Walk back through parent chain to build path\n while (current && current.action) {\n actionIds.unshift(current.action.id);\n totalCost += current.action.cost;\n current = current.parent;\n }\n\n // Calculate confidence based on plan length and cost\n const lengthPenalty = actionIds.length * 0.05;\n const costPenalty = totalCost * 0.01;\n const confidence = Math.max(0.3, 1 - lengthPenalty - costPenalty);\n\n return {\n goalId: goal.id,\n actionIds,\n totalCost,\n achievable: true,\n estimatedTimeMs: totalCost * 1000,\n createdAt: new Date(),\n confidence,\n };\n }\n\n /**\n * Heuristic function for A* (estimates cost to goal)\n *\n * Uses Manhattan-like distance for numeric values and\n * fixed penalties for boolean mismatches.\n *\n * @param state - Current world state\n * @param goal - Goal to reach\n * @returns Estimated cost to reach goal\n */\n private heuristic(state: WorldState, goal: GOAPGoal): number {\n // Use custom heuristic if provided\n if (this.customHeuristic) {\n return this.customHeuristic(state, goal.conditions);\n }\n\n let distance = 0;\n\n for (const [key, value] of Object.entries(goal.conditions)) {\n const currentValue = state[key as keyof WorldState];\n\n if (typeof value === 'boolean') {\n if (currentValue !== value) {\n distance += 5; // Boolean mismatch penalty\n }\n } else if (typeof value === 'number' && typeof currentValue === 'number') {\n // Numeric distance scaled by 10\n if (currentValue < value) {\n distance += (value - currentValue) * 10;\n }\n } else if (Array.isArray(value) && Array.isArray(currentValue)) {\n // Array comparison (e.g., pendingGaps)\n if (value.length === 0 && currentValue.length > 0) {\n distance += currentValue.length * 2;\n }\n } else if (currentValue !== value) {\n distance += this.config.defaultCost;\n }\n }\n\n return distance;\n }\n\n /**\n * Check if a goal is satisfied by the current state\n */\n private isGoalSatisfied(state: WorldState, goal: GOAPGoal): boolean {\n for (const [key, value] of Object.entries(goal.conditions)) {\n const currentValue = state[key];\n\n if (typeof value === 'number' && typeof currentValue === 'number') {\n if (currentValue < value) {\n return false;\n }\n } else if (Array.isArray(value) && Array.isArray(currentValue)) {\n if (value.length > 0 && currentValue.length > 0) {\n return false; // Non-empty arrays must match\n }\n } else if (currentValue !== value) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Check if an action can be applied to a state\n */\n private canApply(action: GOAPAction, state: WorldState): boolean {\n for (const [key, value] of Object.entries(action.preconditions)) {\n const currentValue = state[key];\n\n if (typeof value === 'number' && typeof currentValue === 'number') {\n if (currentValue < value) {\n return false;\n }\n } else if (currentValue !== value) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Apply an action to a state and return the new state\n */\n private applyAction(action: GOAPAction, state: WorldState): WorldState {\n const newState = { ...state };\n\n for (const [key, value] of Object.entries(action.effects)) {\n (newState as Record<string, unknown>)[key] = value;\n }\n\n return newState;\n }\n\n /**\n * Convert state to a cache key string\n */\n private stateToKey(state: WorldState): string {\n const sortedKeys = Object.keys(state).sort();\n const values = sortedKeys.map(k => `${k}:${JSON.stringify(state[k])}`);\n return values.join('|');\n }\n\n /**\n * Create cache key for a plan\n */\n private createCacheKey(state: WorldState, goalId: string): string {\n return `${goalId}::${this.stateToKey(state)}`;\n }\n\n /**\n * Cache a plan\n */\n private cachePlan(key: string, plan: GOAPPlan): void {\n if (this.config.enableCaching) {\n this.planCache.set(key, plan);\n }\n }\n\n /**\n * Clear the plan cache\n */\n clearCache(): void {\n this.planCache.clear();\n logger.debug('Plan cache cleared');\n }\n\n /**\n * Execute a plan\n *\n * @param plan - Plan to execute\n * @param initialState - Initial world state\n * @returns Execution result\n */\n async executePlan(plan: GOAPPlan, initialState: WorldState): Promise<PlanExecutionResult> {\n if (!plan.achievable) {\n return {\n success: false,\n finalState: initialState,\n completedSteps: [],\n error: plan.reason || 'Plan is not achievable',\n executionTimeMs: 0,\n };\n }\n\n const startTime = Date.now();\n let currentState = { ...initialState };\n const completedSteps: string[] = [];\n\n logger.info('Executing plan', {\n goalId: plan.goalId,\n actionCount: plan.actionIds.length\n });\n\n for (const actionId of plan.actionIds) {\n const action = this.actions.get(actionId);\n if (!action) {\n return {\n success: false,\n finalState: currentState,\n completedSteps,\n failedStep: actionId,\n error: `Unknown action: ${actionId}`,\n executionTimeMs: Date.now() - startTime,\n };\n }\n\n // Check preconditions\n if (!this.canApply(action, currentState)) {\n return {\n success: false,\n finalState: currentState,\n completedSteps,\n failedStep: actionId,\n error: `Preconditions not met for action: ${actionId}`,\n executionTimeMs: Date.now() - startTime,\n };\n }\n\n try {\n // Execute action\n if (action.execute) {\n currentState = await action.execute(currentState);\n } else {\n currentState = this.applyAction(action, currentState);\n }\n\n completedSteps.push(actionId);\n logger.debug(`Action completed: ${actionId}`);\n } catch (error) {\n logger.error(`Action failed: ${actionId}`, error instanceof Error ? error : new Error(String(error)));\n return {\n success: false,\n finalState: currentState,\n completedSteps,\n failedStep: actionId,\n error: error instanceof Error ? error.message : String(error),\n executionTimeMs: Date.now() - startTime,\n };\n }\n }\n\n logger.info('Plan execution completed', {\n goalId: plan.goalId,\n completedSteps: completedSteps.length\n });\n\n return {\n success: true,\n finalState: currentState,\n completedSteps,\n executionTimeMs: Date.now() - startTime,\n };\n }\n\n /**\n * Evaluate readiness for development\n *\n * @param state - Current world state\n * @returns Readiness evaluation\n */\n evaluateReadiness(state: WorldState): ReadinessEvaluation {\n const blockers: string[] = [];\n const recommendations: string[] = [];\n let score = 0;\n\n // Check specification\n if (!state.hasSpecification) {\n blockers.push('No specification document found');\n recommendations.push('Create a specification document');\n } else {\n score += 0.2;\n\n if (state.specCompleteness < 0.5) {\n blockers.push('Specification is incomplete');\n recommendations.push('Complete the specification document');\n } else if (state.specCompleteness < 0.8) {\n recommendations.push('Consider improving specification completeness');\n score += 0.1;\n } else {\n score += 0.2;\n }\n }\n\n // Check acceptance criteria\n if (!state.hasAcceptanceCriteria) {\n blockers.push('No acceptance criteria defined');\n recommendations.push('Define acceptance criteria');\n } else {\n score += 0.2;\n }\n\n // Check blockers\n if (!state.blockersFree) {\n blockers.push('Blocking issues exist');\n recommendations.push('Resolve blocking issues');\n } else {\n score += 0.2;\n }\n\n // Check pending gaps\n if (state.pendingGaps.length > 0) {\n recommendations.push(`Address ${state.pendingGaps.length} documentation gaps`);\n } else {\n score += 0.1;\n }\n\n // Check task definition\n if (state.taskDefined) {\n score += 0.1;\n } else if (blockers.length === 0) {\n recommendations.push('Create a task from the specification');\n }\n\n return {\n score: Math.min(1, score),\n ready: blockers.length === 0 && score >= 0.7,\n blockers,\n recommendations,\n evaluatedAt: new Date(),\n };\n }\n}\n\n/**\n * Create a GOAP adapter instance\n *\n * @param config - Adapter configuration\n * @returns Configured GOAP adapter\n */\nexport function createGOAPAdapter(config?: GOAPAdapterConfig): GOAPAdapter {\n return new GOAPAdapter(config);\n}\n"],"names":["plan"],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Workflow Adapters
3
+ *
4
+ * Exports all adapter modules for the Workflow DevKit.
5
+ * Adapters wrap existing agent patterns for use with the workflow system.
6
+ *
7
+ * @module workflow/adapters
8
+ */
9
+ export { GOAPAdapter, createGOAPAdapter, DEFAULT_GOAP_ACTIONS, type GOAPAdapterConfig, } from './goap-adapter.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/workflow/adapters/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,oBAAoB,EACpB,KAAK,iBAAiB,GACvB,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,135 @@
1
+ /**
2
+ * Workflow DevKit Configuration
3
+ *
4
+ * Provides configuration management for different execution environments
5
+ * (Worlds) including Postgres, Vercel, and Local persistence options.
6
+ *
7
+ * @module workflow/config
8
+ */
9
+ /**
10
+ * PostgreSQL connection pool configuration
11
+ */
12
+ export interface PostgresPoolConfig {
13
+ /** Maximum number of connections in the pool */
14
+ max: number;
15
+ /** Time in milliseconds before idle connections are closed */
16
+ idleTimeoutMillis: number;
17
+ }
18
+ /**
19
+ * PostgreSQL World configuration
20
+ */
21
+ export interface PostgresWorldConfig {
22
+ /** Database connection string */
23
+ connectionString: string;
24
+ /** Schema name for workflow tables */
25
+ schema: string;
26
+ /** Connection pool configuration */
27
+ poolConfig?: PostgresPoolConfig;
28
+ }
29
+ /**
30
+ * Vercel World configuration
31
+ */
32
+ export interface VercelWorldConfig {
33
+ /** Vercel project identifier */
34
+ projectId?: string;
35
+ }
36
+ /**
37
+ * Local World configuration
38
+ */
39
+ export interface LocalWorldConfig {
40
+ /** Directory for local workflow data storage */
41
+ dataDir: string;
42
+ }
43
+ /**
44
+ * Workflow configuration supporting multiple execution environments
45
+ *
46
+ * @example
47
+ * ```typescript
48
+ * // Postgres World
49
+ * const config: WorkflowConfig = {
50
+ * world: 'postgres',
51
+ * postgres: {
52
+ * connectionString: 'postgres://localhost:5432/kg_agent',
53
+ * schema: 'workflow',
54
+ * },
55
+ * };
56
+ *
57
+ * // Local World (default)
58
+ * const config: WorkflowConfig = {
59
+ * world: 'local',
60
+ * local: {
61
+ * dataDir: '.workflow',
62
+ * },
63
+ * };
64
+ * ```
65
+ */
66
+ export interface WorkflowConfig {
67
+ /** The execution environment (World) type */
68
+ world: 'postgres' | 'vercel' | 'local';
69
+ /** PostgreSQL configuration (required when world is 'postgres') */
70
+ postgres?: PostgresWorldConfig;
71
+ /** Vercel configuration (required when world is 'vercel') */
72
+ vercel?: VercelWorldConfig;
73
+ /** Local configuration (required when world is 'local') */
74
+ local?: LocalWorldConfig;
75
+ }
76
+ /**
77
+ * Creates a workflow configuration based on environment variables
78
+ *
79
+ * Environment variables:
80
+ * - `WORKFLOW_WORLD`: The world type ('postgres' | 'vercel' | 'local')
81
+ * - `DATABASE_URL`: PostgreSQL connection string (for postgres world)
82
+ * - `VERCEL_PROJECT_ID`: Vercel project ID (for vercel world)
83
+ *
84
+ * @returns The workflow configuration for the current environment
85
+ *
86
+ * @example
87
+ * ```typescript
88
+ * // Set WORKFLOW_WORLD=postgres and DATABASE_URL before running
89
+ * const config = createWorkflowConfig();
90
+ * console.log(config.world); // 'postgres'
91
+ * ```
92
+ */
93
+ export declare function createWorkflowConfig(): WorkflowConfig;
94
+ /**
95
+ * Validates a workflow configuration
96
+ *
97
+ * @param config - The configuration to validate
98
+ * @returns True if valid, throws if invalid
99
+ * @throws Error if configuration is missing required fields
100
+ */
101
+ export declare function validateWorkflowConfig(config: WorkflowConfig): boolean;
102
+ /**
103
+ * Creates a PostgreSQL World configuration
104
+ *
105
+ * @param connectionString - Database connection string
106
+ * @param options - Optional configuration overrides
107
+ * @returns PostgreSQL workflow configuration
108
+ */
109
+ export declare function createPostgresConfig(connectionString: string, options?: Partial<Omit<PostgresWorldConfig, 'connectionString'>>): WorkflowConfig;
110
+ /**
111
+ * Creates a Vercel World configuration
112
+ *
113
+ * @param projectId - Optional Vercel project ID
114
+ * @returns Vercel workflow configuration
115
+ */
116
+ export declare function createVercelConfig(projectId?: string): WorkflowConfig;
117
+ /**
118
+ * Creates a Local World configuration
119
+ *
120
+ * @param dataDir - Directory for workflow data storage
121
+ * @returns Local workflow configuration
122
+ */
123
+ export declare function createLocalConfig(dataDir?: string): WorkflowConfig;
124
+ /**
125
+ * Default workflow configuration based on environment
126
+ *
127
+ * @example
128
+ * ```typescript
129
+ * import { defaultConfig } from './config.js';
130
+ *
131
+ * console.log(defaultConfig.world); // Based on WORKFLOW_WORLD env var
132
+ * ```
133
+ */
134
+ export declare const defaultConfig: WorkflowConfig;
135
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/workflow/config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,gDAAgD;IAChD,GAAG,EAAE,MAAM,CAAC;IACZ,8DAA8D;IAC9D,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,iCAAiC;IACjC,gBAAgB,EAAE,MAAM,CAAC;IACzB,sCAAsC;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,UAAU,CAAC,EAAE,kBAAkB,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,gCAAgC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,gDAAgD;IAChD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,WAAW,cAAc;IAC7B,6CAA6C;IAC7C,KAAK,EAAE,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAC;IACvC,mEAAmE;IACnE,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,6DAA6D;IAC7D,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,2DAA2D;IAC3D,KAAK,CAAC,EAAE,gBAAgB,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,oBAAoB,IAAI,cAAc,CA+BrD;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAsBtE;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,gBAAgB,EAAE,MAAM,EACxB,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE,kBAAkB,CAAC,CAAC,GAC/D,cAAc,CAYhB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,cAAc,CAOrE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,MAAoB,GAAG,cAAc,CAO/E;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,aAAa,EAAE,cAAuC,CAAC"}
@@ -0,0 +1,92 @@
1
+ function createWorkflowConfig() {
2
+ const worldType = process.env.WORKFLOW_WORLD || "local";
3
+ switch (worldType) {
4
+ case "postgres":
5
+ return {
6
+ world: "postgres",
7
+ postgres: {
8
+ connectionString: process.env.DATABASE_URL || "postgres://localhost:5432/kg_agent",
9
+ schema: "workflow",
10
+ poolConfig: {
11
+ max: 20,
12
+ idleTimeoutMillis: 3e4
13
+ }
14
+ }
15
+ };
16
+ case "vercel":
17
+ return {
18
+ world: "vercel",
19
+ vercel: {
20
+ projectId: process.env.VERCEL_PROJECT_ID
21
+ }
22
+ };
23
+ default:
24
+ return {
25
+ world: "local",
26
+ local: {
27
+ dataDir: ".workflow"
28
+ }
29
+ };
30
+ }
31
+ }
32
+ function validateWorkflowConfig(config) {
33
+ switch (config.world) {
34
+ case "postgres":
35
+ if (!config.postgres?.connectionString) {
36
+ throw new Error("PostgreSQL configuration requires a connectionString");
37
+ }
38
+ if (!config.postgres?.schema) {
39
+ throw new Error("PostgreSQL configuration requires a schema name");
40
+ }
41
+ break;
42
+ case "vercel":
43
+ break;
44
+ case "local":
45
+ if (!config.local?.dataDir) {
46
+ throw new Error("Local configuration requires a dataDir path");
47
+ }
48
+ break;
49
+ default:
50
+ throw new Error(`Unknown world type: ${config.world}`);
51
+ }
52
+ return true;
53
+ }
54
+ function createPostgresConfig(connectionString, options) {
55
+ return {
56
+ world: "postgres",
57
+ postgres: {
58
+ connectionString,
59
+ schema: options?.schema || "workflow",
60
+ poolConfig: options?.poolConfig || {
61
+ max: 20,
62
+ idleTimeoutMillis: 3e4
63
+ }
64
+ }
65
+ };
66
+ }
67
+ function createVercelConfig(projectId) {
68
+ return {
69
+ world: "vercel",
70
+ vercel: {
71
+ projectId
72
+ }
73
+ };
74
+ }
75
+ function createLocalConfig(dataDir = ".workflow") {
76
+ return {
77
+ world: "local",
78
+ local: {
79
+ dataDir
80
+ }
81
+ };
82
+ }
83
+ const defaultConfig = createWorkflowConfig();
84
+ export {
85
+ createLocalConfig,
86
+ createPostgresConfig,
87
+ createVercelConfig,
88
+ createWorkflowConfig,
89
+ defaultConfig,
90
+ validateWorkflowConfig
91
+ };
92
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sources":["../../src/workflow/config.ts"],"sourcesContent":["/**\n * Workflow DevKit Configuration\n *\n * Provides configuration management for different execution environments\n * (Worlds) including Postgres, Vercel, and Local persistence options.\n *\n * @module workflow/config\n */\n\n/**\n * PostgreSQL connection pool configuration\n */\nexport interface PostgresPoolConfig {\n /** Maximum number of connections in the pool */\n max: number;\n /** Time in milliseconds before idle connections are closed */\n idleTimeoutMillis: number;\n}\n\n/**\n * PostgreSQL World configuration\n */\nexport interface PostgresWorldConfig {\n /** Database connection string */\n connectionString: string;\n /** Schema name for workflow tables */\n schema: string;\n /** Connection pool configuration */\n poolConfig?: PostgresPoolConfig;\n}\n\n/**\n * Vercel World configuration\n */\nexport interface VercelWorldConfig {\n /** Vercel project identifier */\n projectId?: string;\n}\n\n/**\n * Local World configuration\n */\nexport interface LocalWorldConfig {\n /** Directory for local workflow data storage */\n dataDir: string;\n}\n\n/**\n * Workflow configuration supporting multiple execution environments\n *\n * @example\n * ```typescript\n * // Postgres World\n * const config: WorkflowConfig = {\n * world: 'postgres',\n * postgres: {\n * connectionString: 'postgres://localhost:5432/kg_agent',\n * schema: 'workflow',\n * },\n * };\n *\n * // Local World (default)\n * const config: WorkflowConfig = {\n * world: 'local',\n * local: {\n * dataDir: '.workflow',\n * },\n * };\n * ```\n */\nexport interface WorkflowConfig {\n /** The execution environment (World) type */\n world: 'postgres' | 'vercel' | 'local';\n /** PostgreSQL configuration (required when world is 'postgres') */\n postgres?: PostgresWorldConfig;\n /** Vercel configuration (required when world is 'vercel') */\n vercel?: VercelWorldConfig;\n /** Local configuration (required when world is 'local') */\n local?: LocalWorldConfig;\n}\n\n/**\n * Creates a workflow configuration based on environment variables\n *\n * Environment variables:\n * - `WORKFLOW_WORLD`: The world type ('postgres' | 'vercel' | 'local')\n * - `DATABASE_URL`: PostgreSQL connection string (for postgres world)\n * - `VERCEL_PROJECT_ID`: Vercel project ID (for vercel world)\n *\n * @returns The workflow configuration for the current environment\n *\n * @example\n * ```typescript\n * // Set WORKFLOW_WORLD=postgres and DATABASE_URL before running\n * const config = createWorkflowConfig();\n * console.log(config.world); // 'postgres'\n * ```\n */\nexport function createWorkflowConfig(): WorkflowConfig {\n const worldType = (process.env.WORKFLOW_WORLD || 'local') as WorkflowConfig['world'];\n\n switch (worldType) {\n case 'postgres':\n return {\n world: 'postgres',\n postgres: {\n connectionString: process.env.DATABASE_URL || 'postgres://localhost:5432/kg_agent',\n schema: 'workflow',\n poolConfig: {\n max: 20,\n idleTimeoutMillis: 30000,\n },\n },\n };\n case 'vercel':\n return {\n world: 'vercel',\n vercel: {\n projectId: process.env.VERCEL_PROJECT_ID,\n },\n };\n default:\n return {\n world: 'local',\n local: {\n dataDir: '.workflow',\n },\n };\n }\n}\n\n/**\n * Validates a workflow configuration\n *\n * @param config - The configuration to validate\n * @returns True if valid, throws if invalid\n * @throws Error if configuration is missing required fields\n */\nexport function validateWorkflowConfig(config: WorkflowConfig): boolean {\n switch (config.world) {\n case 'postgres':\n if (!config.postgres?.connectionString) {\n throw new Error('PostgreSQL configuration requires a connectionString');\n }\n if (!config.postgres?.schema) {\n throw new Error('PostgreSQL configuration requires a schema name');\n }\n break;\n case 'vercel':\n // Vercel config is optional, projectId can be auto-detected\n break;\n case 'local':\n if (!config.local?.dataDir) {\n throw new Error('Local configuration requires a dataDir path');\n }\n break;\n default:\n throw new Error(`Unknown world type: ${config.world}`);\n }\n return true;\n}\n\n/**\n * Creates a PostgreSQL World configuration\n *\n * @param connectionString - Database connection string\n * @param options - Optional configuration overrides\n * @returns PostgreSQL workflow configuration\n */\nexport function createPostgresConfig(\n connectionString: string,\n options?: Partial<Omit<PostgresWorldConfig, 'connectionString'>>\n): WorkflowConfig {\n return {\n world: 'postgres',\n postgres: {\n connectionString,\n schema: options?.schema || 'workflow',\n poolConfig: options?.poolConfig || {\n max: 20,\n idleTimeoutMillis: 30000,\n },\n },\n };\n}\n\n/**\n * Creates a Vercel World configuration\n *\n * @param projectId - Optional Vercel project ID\n * @returns Vercel workflow configuration\n */\nexport function createVercelConfig(projectId?: string): WorkflowConfig {\n return {\n world: 'vercel',\n vercel: {\n projectId,\n },\n };\n}\n\n/**\n * Creates a Local World configuration\n *\n * @param dataDir - Directory for workflow data storage\n * @returns Local workflow configuration\n */\nexport function createLocalConfig(dataDir: string = '.workflow'): WorkflowConfig {\n return {\n world: 'local',\n local: {\n dataDir,\n },\n };\n}\n\n/**\n * Default workflow configuration based on environment\n *\n * @example\n * ```typescript\n * import { defaultConfig } from './config.js';\n *\n * console.log(defaultConfig.world); // Based on WORKFLOW_WORLD env var\n * ```\n */\nexport const defaultConfig: WorkflowConfig = createWorkflowConfig();\n"],"names":[],"mappings":"AAkGO,SAAS,uBAAuC;AACrD,QAAM,YAAa,QAAQ,IAAI,kBAAkB;AAEjD,UAAQ,WAAA;AAAA,IACN,KAAK;AACH,aAAO;AAAA,QACL,OAAO;AAAA,QACP,UAAU;AAAA,UACR,kBAAkB,QAAQ,IAAI,gBAAgB;AAAA,UAC9C,QAAQ;AAAA,UACR,YAAY;AAAA,YACV,KAAK;AAAA,YACL,mBAAmB;AAAA,UAAA;AAAA,QACrB;AAAA,MACF;AAAA,IAEJ,KAAK;AACH,aAAO;AAAA,QACL,OAAO;AAAA,QACP,QAAQ;AAAA,UACN,WAAW,QAAQ,IAAI;AAAA,QAAA;AAAA,MACzB;AAAA,IAEJ;AACE,aAAO;AAAA,QACL,OAAO;AAAA,QACP,OAAO;AAAA,UACL,SAAS;AAAA,QAAA;AAAA,MACX;AAAA,EACF;AAEN;AASO,SAAS,uBAAuB,QAAiC;AACtE,UAAQ,OAAO,OAAA;AAAA,IACb,KAAK;AACH,UAAI,CAAC,OAAO,UAAU,kBAAkB;AACtC,cAAM,IAAI,MAAM,sDAAsD;AAAA,MACxE;AACA,UAAI,CAAC,OAAO,UAAU,QAAQ;AAC5B,cAAM,IAAI,MAAM,iDAAiD;AAAA,MACnE;AACA;AAAA,IACF,KAAK;AAEH;AAAA,IACF,KAAK;AACH,UAAI,CAAC,OAAO,OAAO,SAAS;AAC1B,cAAM,IAAI,MAAM,6CAA6C;AAAA,MAC/D;AACA;AAAA,IACF;AACE,YAAM,IAAI,MAAM,uBAAuB,OAAO,KAAK,EAAE;AAAA,EAAA;AAEzD,SAAO;AACT;AASO,SAAS,qBACd,kBACA,SACgB;AAChB,SAAO;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA,MACR;AAAA,MACA,QAAQ,SAAS,UAAU;AAAA,MAC3B,YAAY,SAAS,cAAc;AAAA,QACjC,KAAK;AAAA,QACL,mBAAmB;AAAA,MAAA;AAAA,IACrB;AAAA,EACF;AAEJ;AAQO,SAAS,mBAAmB,WAAoC;AACrE,SAAO;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,MACN;AAAA,IAAA;AAAA,EACF;AAEJ;AAQO,SAAS,kBAAkB,UAAkB,aAA6B;AAC/E,SAAO;AAAA,IACL,OAAO;AAAA,IACP,OAAO;AAAA,MACL;AAAA,IAAA;AAAA,EACF;AAEJ;AAYO,MAAM,gBAAgC,qBAAA;"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Workflow Handlers
3
+ *
4
+ * Exports all handler modules for workflow event processing.
5
+ *
6
+ * @module workflow/handlers
7
+ */
8
+ export * from './webhook-handlers.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/workflow/handlers/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,cAAc,uBAAuB,CAAC"}