@supergrowthai/tq 1.0.4 → 1.0.6

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 (44) hide show
  1. package/README.md +138 -0
  2. package/dist/{PrismaAdapter-D-Bjaonm.cjs → PrismaAdapter-CT8dxOZX.cjs} +51 -3
  3. package/dist/PrismaAdapter-CT8dxOZX.cjs.map +1 -0
  4. package/dist/{PrismaAdapter-Kp4A4VHb.js → PrismaAdapter-Z2vLslDJ.js} +51 -3
  5. package/dist/PrismaAdapter-Z2vLslDJ.js.map +1 -0
  6. package/dist/adapters/index.cjs +1 -1
  7. package/dist/adapters/index.mjs +1 -1
  8. package/dist/core/Actions.cjs +13 -0
  9. package/dist/core/Actions.cjs.map +1 -1
  10. package/dist/core/Actions.mjs +13 -0
  11. package/dist/core/Actions.mjs.map +1 -1
  12. package/dist/index.cjs +603 -128
  13. package/dist/index.cjs.map +1 -1
  14. package/dist/index.mjs +609 -134
  15. package/dist/index.mjs.map +1 -1
  16. package/dist/src/adapters/ITaskStorageAdapter.d.cts +12 -0
  17. package/dist/src/adapters/ITaskStorageAdapter.d.ts +12 -0
  18. package/dist/src/adapters/InMemoryAdapter.d.cts +26 -1
  19. package/dist/src/adapters/InMemoryAdapter.d.ts +26 -1
  20. package/dist/src/adapters/MongoDbAdapter.d.cts +29 -2
  21. package/dist/src/adapters/MongoDbAdapter.d.ts +29 -2
  22. package/dist/src/adapters/PrismaAdapter.d.cts +36 -2
  23. package/dist/src/adapters/PrismaAdapter.d.ts +36 -2
  24. package/dist/src/adapters/index.d.cts +1 -1
  25. package/dist/src/adapters/index.d.ts +1 -1
  26. package/dist/src/core/Actions.d.cts +5 -0
  27. package/dist/src/core/Actions.d.ts +5 -0
  28. package/dist/src/core/TaskHandler.d.cts +22 -2
  29. package/dist/src/core/TaskHandler.d.ts +22 -2
  30. package/dist/src/core/TaskRunner.d.cts +10 -1
  31. package/dist/src/core/TaskRunner.d.ts +10 -1
  32. package/dist/src/core/lifecycle.d.cts +133 -0
  33. package/dist/src/core/lifecycle.d.ts +133 -0
  34. package/dist/src/index.d.cts +2 -0
  35. package/dist/src/index.d.ts +2 -0
  36. package/dist/src/providers/ConsoleHealthProvider.d.cts +47 -0
  37. package/dist/src/providers/ConsoleHealthProvider.d.ts +47 -0
  38. package/dist/src/providers/index.d.cts +1 -0
  39. package/dist/src/providers/index.d.ts +1 -0
  40. package/dist/src/utils/disposable-lock.d.cts +39 -0
  41. package/dist/src/utils/disposable-lock.d.ts +39 -0
  42. package/package.json +7 -7
  43. package/dist/PrismaAdapter-D-Bjaonm.cjs.map +0 -1
  44. package/dist/PrismaAdapter-Kp4A4VHb.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Actions.mjs","sources":["../../src/core/Actions.ts"],"sourcesContent":["import {ExecutorActions} from \"./base/interfaces\";\nimport {Logger, LogLevel} from \"@supergrowthai/utils\";\nimport {tId} from \"../utils/task-id-gen.js\";\nimport {CronTask} from \"../adapters\";\n\nconst logger = new Logger('Actions', LogLevel.INFO);\n\ninterface ActionEntry<ID = any> {\n type: 'success' | 'fail' | 'addTasks';\n timestamp: number;\n task?: CronTask<ID>; // The task passed to success/fail\n newTasks?: CronTask<ID>[]; // Tasks to add\n}\n\ninterface TaskContext<ID = any> {\n task: CronTask<ID> | null; // The task being executed (null for batch contexts)\n actions: ActionEntry<ID>[];\n}\n\nexport interface ActionResults<ID = any> {\n failedTasks: CronTask<ID>[];\n successTasks: CronTask<ID>[];\n newTasks: CronTask<ID>[];\n ignoredTasks: CronTask<ID>[];\n}\n\nexport class Actions<ID = any> implements ExecutorActions<ID> {\n private readonly taskRunnerId: string;\n private readonly taskContexts = new Map<string, TaskContext<ID>>();\n\n constructor(taskRunnerId: string) {\n this.taskRunnerId = taskRunnerId;\n }\n\n /**\n * Fork execution context for a specific task (for single-task executors)\n */\n forkForTask(task: CronTask<ID>): ExecutorActions<ID> {\n const taskId = tId(task);\n\n // Initialize context for this task\n const context: TaskContext<ID> = {task, actions: []};\n this.taskContexts.set(taskId, context);\n\n // Return a scoped actions object that tracks everything in this context\n return {\n fail: (t: CronTask<ID>) => {\n context.actions.push({\n type: 'fail',\n timestamp: Date.now(),\n task: t\n });\n logger.error(`[${this.taskRunnerId}] Task failed: ${tId(t)} (${t.type})`);\n },\n\n success: (t: CronTask<ID>) => {\n context.actions.push({\n type: 'success',\n timestamp: Date.now(),\n task: t\n });\n logger.info(`[${this.taskRunnerId}] Task succeeded: ${tId(t)} (${t.type})`);\n },\n\n addTasks: (tasks: CronTask<ID>[]) => {\n context.actions.push({\n type: 'addTasks',\n timestamp: Date.now(),\n newTasks: tasks\n });\n logger.info(`[${this.taskRunnerId}] Task ${taskId} adding ${tasks.length} new tasks`);\n }\n };\n }\n\n // For multi-task executors - they use the root Actions directly (no forking)\n fail(task: CronTask<ID>): void {\n const taskId = tId(task);\n let context = this.taskContexts.get(taskId);\n if (!context) {\n context = {task, actions: []};\n this.taskContexts.set(taskId, context);\n }\n\n context!.actions.push({\n type: 'fail',\n timestamp: Date.now(),\n task\n });\n logger.error(`[${this.taskRunnerId}] Task failed: ${taskId} (${task.type})`);\n }\n\n success(task: CronTask<ID>): void {\n const taskId = tId(task);\n let context = this.taskContexts.get(taskId);\n if (!context) {\n context = {task, actions: []};\n this.taskContexts.set(taskId, context);\n }\n\n context.actions.push({\n type: 'success',\n timestamp: Date.now(),\n task\n });\n logger.info(`[${this.taskRunnerId}] Task succeeded: ${taskId} (${task.type})`);\n }\n\n addTasks(tasks: CronTask<ID>[]): void {\n // For multi-task mode, store in a batch-specific context\n logger.info(`[${this.taskRunnerId}] Adding ${tasks.length} new tasks`);\n\n const batchKey = `__batch_${this.taskRunnerId}__`;\n let batchContext = this.taskContexts.get(batchKey);\n if (!batchContext) {\n batchContext = {task: null, actions: []};\n this.taskContexts.set(batchKey, batchContext);\n }\n batchContext.actions.push({\n type: 'addTasks',\n timestamp: Date.now(),\n newTasks: tasks\n });\n }\n\n addIgnoredTask(task: CronTask<ID>): void {\n const taskId = tId(task);\n this.taskContexts.set(taskId, {task, actions: []});\n logger.warn(`[${this.taskRunnerId}] Task ignored: ${taskId} (${task.type})`);\n }\n\n /**\n * Extract actions for a single task (used by async tasks)\n */\n extractTaskActions(taskId: string): ActionResults<ID> {\n const results: ActionResults<ID> = {\n failedTasks: [],\n successTasks: [],\n newTasks: [],\n ignoredTasks: []\n };\n\n const context = this.taskContexts.get(taskId);\n if (!context) return results;\n\n if (context.actions.length === 0 && context.task) {\n // No actions = ignored task\n results.ignoredTasks.push(context.task);\n } else {\n // Process all actions\n for (const action of context.actions) {\n if (action.type === 'success' && action.task) {\n results.successTasks.push(action.task);\n // If marking a different task, remove its context\n const targetTaskId = tId(action.task);\n if (targetTaskId !== taskId) {\n this.taskContexts.delete(targetTaskId);\n }\n } else if (action.type === 'fail' && action.task) {\n results.failedTasks.push(action.task);\n const targetTaskId = tId(action.task);\n if (targetTaskId !== taskId) {\n this.taskContexts.delete(targetTaskId);\n }\n } else if (action.type === 'addTasks' && action.newTasks) {\n results.newTasks.push(...action.newTasks);\n }\n }\n }\n\n this.taskContexts.delete(taskId);\n return results;\n }\n\n /**\n * Extract sync results including batch context (for sync processing)\n */\n extractSyncResults(excludeTaskIds: string[]): ActionResults<ID> {\n const results: ActionResults<ID> = {\n failedTasks: [],\n successTasks: [],\n newTasks: [],\n ignoredTasks: []\n };\n\n const excludeSet = new Set(excludeTaskIds);\n const batchKey = `__batch_${this.taskRunnerId}__`;\n\n // Process all task contexts except excluded ones\n for (const [taskId, context] of this.taskContexts) {\n if (excludeSet.has(taskId)) continue;\n\n if (taskId === batchKey) {\n // Batch context - only has addTasks\n for (const action of context.actions) {\n if (action.type === 'addTasks' && action.newTasks) {\n results.newTasks.push(...action.newTasks);\n }\n }\n } else {\n // Regular task context\n if (context.actions.length === 0 && context.task) {\n results.ignoredTasks.push(context.task);\n } else {\n for (const action of context.actions) {\n if (action.type === 'success' && action.task) {\n results.successTasks.push(action.task);\n } else if (action.type === 'fail' && action.task) {\n results.failedTasks.push(action.task);\n } else if (action.type === 'addTasks' && action.newTasks) {\n results.newTasks.push(...action.newTasks);\n }\n }\n }\n }\n }\n\n // Clear processed contexts\n for (const [taskId] of this.taskContexts) {\n if (!excludeSet.has(taskId)) {\n this.taskContexts.delete(taskId);\n }\n }\n\n return results;\n }\n\n /**\n * Get all results (mainly for backward compatibility)\n */\n getResults(): ActionResults<ID> {\n return this.extractSyncResults([]);\n }\n}"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Actions.mjs","sources":["../../src/core/Actions.ts"],"sourcesContent":["import {ExecutorActions} from \"./base/interfaces\";\nimport {Logger, LogLevel} from \"@supergrowthai/utils\";\nimport {tId} from \"../utils/task-id-gen.js\";\nimport {CronTask} from \"../adapters\";\n\nconst logger = new Logger('Actions', LogLevel.INFO);\n\ninterface ActionEntry<ID = any> {\n type: 'success' | 'fail' | 'addTasks';\n timestamp: number;\n task?: CronTask<ID>; // The task passed to success/fail\n newTasks?: CronTask<ID>[]; // Tasks to add\n}\n\ninterface TaskContext<ID = any> {\n task: CronTask<ID> | null; // The task being executed (null for batch contexts)\n actions: ActionEntry<ID>[];\n}\n\nexport interface ActionResults<ID = any> {\n failedTasks: CronTask<ID>[];\n successTasks: CronTask<ID>[];\n newTasks: CronTask<ID>[];\n ignoredTasks: CronTask<ID>[];\n}\n\nexport class Actions<ID = any> implements ExecutorActions<ID> {\n private readonly taskRunnerId: string;\n private readonly taskContexts = new Map<string, TaskContext<ID>>();\n\n constructor(taskRunnerId: string) {\n this.taskRunnerId = taskRunnerId;\n }\n\n /**\n * Fork execution context for a specific task (for single-task executors)\n */\n forkForTask(task: CronTask<ID>): ExecutorActions<ID> {\n const taskId = tId(task);\n\n // Initialize context for this task\n const context: TaskContext<ID> = {task, actions: []};\n this.taskContexts.set(taskId, context);\n\n // Return a scoped actions object that tracks everything in this context\n return {\n fail: (t: CronTask<ID>) => {\n context.actions.push({\n type: 'fail',\n timestamp: Date.now(),\n task: t\n });\n logger.error(`[${this.taskRunnerId}] Task failed: ${tId(t)} (${t.type})`);\n },\n\n success: (t: CronTask<ID>) => {\n context.actions.push({\n type: 'success',\n timestamp: Date.now(),\n task: t\n });\n logger.info(`[${this.taskRunnerId}] Task succeeded: ${tId(t)} (${t.type})`);\n },\n\n addTasks: (tasks: CronTask<ID>[]) => {\n context.actions.push({\n type: 'addTasks',\n timestamp: Date.now(),\n newTasks: tasks\n });\n logger.info(`[${this.taskRunnerId}] Task ${taskId} adding ${tasks.length} new tasks`);\n }\n };\n }\n\n // For multi-task executors - they use the root Actions directly (no forking)\n fail(task: CronTask<ID>): void {\n const taskId = tId(task);\n let context = this.taskContexts.get(taskId);\n if (!context) {\n context = {task, actions: []};\n this.taskContexts.set(taskId, context);\n }\n\n context!.actions.push({\n type: 'fail',\n timestamp: Date.now(),\n task\n });\n logger.error(`[${this.taskRunnerId}] Task failed: ${taskId} (${task.type})`);\n }\n\n success(task: CronTask<ID>): void {\n const taskId = tId(task);\n let context = this.taskContexts.get(taskId);\n if (!context) {\n context = {task, actions: []};\n this.taskContexts.set(taskId, context);\n }\n\n context.actions.push({\n type: 'success',\n timestamp: Date.now(),\n task\n });\n logger.info(`[${this.taskRunnerId}] Task succeeded: ${taskId} (${task.type})`);\n }\n\n addTasks(tasks: CronTask<ID>[]): void {\n // For multi-task mode, store in a batch-specific context\n logger.info(`[${this.taskRunnerId}] Adding ${tasks.length} new tasks`);\n\n const batchKey = `__batch_${this.taskRunnerId}__`;\n let batchContext = this.taskContexts.get(batchKey);\n if (!batchContext) {\n batchContext = {task: null, actions: []};\n this.taskContexts.set(batchKey, batchContext);\n }\n batchContext.actions.push({\n type: 'addTasks',\n timestamp: Date.now(),\n newTasks: tasks\n });\n }\n\n addIgnoredTask(task: CronTask<ID>): void {\n const taskId = tId(task);\n this.taskContexts.set(taskId, {task, actions: []});\n logger.warn(`[${this.taskRunnerId}] Task ignored: ${taskId} (${task.type})`);\n }\n\n /**\n * Check the result status for a specific task\n * Returns 'success', 'fail', or 'pending' (no action recorded yet)\n */\n getTaskResultStatus(taskId: string): 'success' | 'fail' | 'pending' {\n const context = this.taskContexts.get(taskId);\n if (!context) return 'pending';\n\n for (const action of context.actions) {\n if (action.type === 'success') return 'success';\n if (action.type === 'fail') return 'fail';\n }\n return 'pending';\n }\n\n /**\n * Extract actions for a single task (used by async tasks)\n */\n extractTaskActions(taskId: string): ActionResults<ID> {\n const results: ActionResults<ID> = {\n failedTasks: [],\n successTasks: [],\n newTasks: [],\n ignoredTasks: []\n };\n\n const context = this.taskContexts.get(taskId);\n if (!context) return results;\n\n if (context.actions.length === 0 && context.task) {\n // No actions = ignored task\n results.ignoredTasks.push(context.task);\n } else {\n // Process all actions\n for (const action of context.actions) {\n if (action.type === 'success' && action.task) {\n results.successTasks.push(action.task);\n // If marking a different task, remove its context\n const targetTaskId = tId(action.task);\n if (targetTaskId !== taskId) {\n this.taskContexts.delete(targetTaskId);\n }\n } else if (action.type === 'fail' && action.task) {\n results.failedTasks.push(action.task);\n const targetTaskId = tId(action.task);\n if (targetTaskId !== taskId) {\n this.taskContexts.delete(targetTaskId);\n }\n } else if (action.type === 'addTasks' && action.newTasks) {\n results.newTasks.push(...action.newTasks);\n }\n }\n }\n\n this.taskContexts.delete(taskId);\n return results;\n }\n\n /**\n * Extract sync results including batch context (for sync processing)\n */\n extractSyncResults(excludeTaskIds: string[]): ActionResults<ID> {\n const results: ActionResults<ID> = {\n failedTasks: [],\n successTasks: [],\n newTasks: [],\n ignoredTasks: []\n };\n\n const excludeSet = new Set(excludeTaskIds);\n const batchKey = `__batch_${this.taskRunnerId}__`;\n\n // Process all task contexts except excluded ones\n for (const [taskId, context] of this.taskContexts) {\n if (excludeSet.has(taskId)) continue;\n\n if (taskId === batchKey) {\n // Batch context - only has addTasks\n for (const action of context.actions) {\n if (action.type === 'addTasks' && action.newTasks) {\n results.newTasks.push(...action.newTasks);\n }\n }\n } else {\n // Regular task context\n if (context.actions.length === 0 && context.task) {\n results.ignoredTasks.push(context.task);\n } else {\n for (const action of context.actions) {\n if (action.type === 'success' && action.task) {\n results.successTasks.push(action.task);\n } else if (action.type === 'fail' && action.task) {\n results.failedTasks.push(action.task);\n } else if (action.type === 'addTasks' && action.newTasks) {\n results.newTasks.push(...action.newTasks);\n }\n }\n }\n }\n }\n\n // Clear processed contexts\n for (const [taskId] of this.taskContexts) {\n if (!excludeSet.has(taskId)) {\n this.taskContexts.delete(taskId);\n }\n }\n\n return results;\n }\n\n /**\n * Get all results (mainly for backward compatibility)\n */\n getResults(): ActionResults<ID> {\n return this.extractSyncResults([]);\n }\n}"],"names":[],"mappings":"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"}