@yattalo/task-system 0.1.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 (94) hide show
  1. package/README.md +66 -0
  2. package/dist/commands/dashboard.d.ts +7 -0
  3. package/dist/commands/dashboard.d.ts.map +1 -0
  4. package/dist/commands/dashboard.js +30 -0
  5. package/dist/commands/dashboard.js.map +1 -0
  6. package/dist/commands/init.d.ts +8 -0
  7. package/dist/commands/init.d.ts.map +1 -0
  8. package/dist/commands/init.js +316 -0
  9. package/dist/commands/init.js.map +1 -0
  10. package/dist/commands/kanban.d.ts +7 -0
  11. package/dist/commands/kanban.d.ts.map +1 -0
  12. package/dist/commands/kanban.js +68 -0
  13. package/dist/commands/kanban.js.map +1 -0
  14. package/dist/commands/report.d.ts +8 -0
  15. package/dist/commands/report.d.ts.map +1 -0
  16. package/dist/commands/report.js +60 -0
  17. package/dist/commands/report.js.map +1 -0
  18. package/dist/commands/seed.d.ts +6 -0
  19. package/dist/commands/seed.d.ts.map +1 -0
  20. package/dist/commands/seed.js +30 -0
  21. package/dist/commands/seed.js.map +1 -0
  22. package/dist/commands/status.d.ts +6 -0
  23. package/dist/commands/status.d.ts.map +1 -0
  24. package/dist/commands/status.js +62 -0
  25. package/dist/commands/status.js.map +1 -0
  26. package/dist/generators/agent-ops-scripts.d.ts +8 -0
  27. package/dist/generators/agent-ops-scripts.d.ts.map +1 -0
  28. package/dist/generators/agent-ops-scripts.js +843 -0
  29. package/dist/generators/agent-ops-scripts.js.map +1 -0
  30. package/dist/generators/agent-ops.d.ts +6 -0
  31. package/dist/generators/agent-ops.d.ts.map +1 -0
  32. package/dist/generators/agent-ops.js +290 -0
  33. package/dist/generators/agent-ops.js.map +1 -0
  34. package/dist/generators/claude-hooks.d.ts +6 -0
  35. package/dist/generators/claude-hooks.d.ts.map +1 -0
  36. package/dist/generators/claude-hooks.js +260 -0
  37. package/dist/generators/claude-hooks.js.map +1 -0
  38. package/dist/generators/cli-aliases.d.ts +6 -0
  39. package/dist/generators/cli-aliases.d.ts.map +1 -0
  40. package/dist/generators/cli-aliases.js +187 -0
  41. package/dist/generators/cli-aliases.js.map +1 -0
  42. package/dist/generators/dashboard.d.ts +6 -0
  43. package/dist/generators/dashboard.d.ts.map +1 -0
  44. package/dist/generators/dashboard.js +732 -0
  45. package/dist/generators/dashboard.js.map +1 -0
  46. package/dist/generators/git-hook.d.ts +6 -0
  47. package/dist/generators/git-hook.d.ts.map +1 -0
  48. package/dist/generators/git-hook.js +163 -0
  49. package/dist/generators/git-hook.js.map +1 -0
  50. package/dist/generators/http.d.ts +6 -0
  51. package/dist/generators/http.d.ts.map +1 -0
  52. package/dist/generators/http.js +175 -0
  53. package/dist/generators/http.js.map +1 -0
  54. package/dist/generators/orchestrator.d.ts +6 -0
  55. package/dist/generators/orchestrator.d.ts.map +1 -0
  56. package/dist/generators/orchestrator.js +391 -0
  57. package/dist/generators/orchestrator.js.map +1 -0
  58. package/dist/generators/schema.d.ts +8 -0
  59. package/dist/generators/schema.d.ts.map +1 -0
  60. package/dist/generators/schema.js +470 -0
  61. package/dist/generators/schema.js.map +1 -0
  62. package/dist/generators/skill.d.ts +6 -0
  63. package/dist/generators/skill.d.ts.map +1 -0
  64. package/dist/generators/skill.js +147 -0
  65. package/dist/generators/skill.js.map +1 -0
  66. package/dist/generators/slash-commands.d.ts +6 -0
  67. package/dist/generators/slash-commands.d.ts.map +1 -0
  68. package/dist/generators/slash-commands.js +268 -0
  69. package/dist/generators/slash-commands.js.map +1 -0
  70. package/dist/generators/tasks.d.ts +6 -0
  71. package/dist/generators/tasks.d.ts.map +1 -0
  72. package/dist/generators/tasks.js +451 -0
  73. package/dist/generators/tasks.js.map +1 -0
  74. package/dist/index.d.ts +3 -0
  75. package/dist/index.d.ts.map +1 -0
  76. package/dist/index.js +54 -0
  77. package/dist/index.js.map +1 -0
  78. package/dist/presets/research.d.ts +3 -0
  79. package/dist/presets/research.d.ts.map +1 -0
  80. package/dist/presets/research.js +56 -0
  81. package/dist/presets/research.js.map +1 -0
  82. package/dist/presets/software.d.ts +3 -0
  83. package/dist/presets/software.d.ts.map +1 -0
  84. package/dist/presets/software.js +56 -0
  85. package/dist/presets/software.js.map +1 -0
  86. package/dist/utils/detect.d.ts +3 -0
  87. package/dist/utils/detect.d.ts.map +1 -0
  88. package/dist/utils/detect.js +76 -0
  89. package/dist/utils/detect.js.map +1 -0
  90. package/dist/utils/merge.d.ts +14 -0
  91. package/dist/utils/merge.d.ts.map +1 -0
  92. package/dist/utils/merge.js +43 -0
  93. package/dist/utils/merge.js.map +1 -0
  94. package/package.json +39 -0
@@ -0,0 +1,451 @@
1
+ // ============================================================
2
+ // Generator: Layer 1 — Convex CRUD Tasks
3
+ // Generates convex/taskSystem/tasks.ts
4
+ // ============================================================
5
+ import { writeFileSync } from "node:fs";
6
+ import { join } from "node:path";
7
+ import { hasSoftwareExtensions, hasResearchExtensions, getTableName, } from "@yattalo/task-system-core";
8
+ export function generateTasks(ctx) {
9
+ const { config, targetDir, dryRun } = ctx;
10
+ const tableName = getTableName(config);
11
+ const isSoftware = hasSoftwareExtensions(config);
12
+ const isResearch = hasResearchExtensions(config);
13
+ const hasAgentOps = config.extensions.agentOps;
14
+ const agentKeys = Object.keys(config.agents);
15
+ const agentUnion = agentKeys.map((k) => `v.literal("${k}")`).join(", ");
16
+ const L = [];
17
+ // Header
18
+ L.push(`// ============================================================`);
19
+ L.push(`// Task System CRUD — generated by @yattalo/task-system`);
20
+ L.push(`// Project: ${config.projectName} | Table: ${tableName}`);
21
+ L.push(`// ============================================================`);
22
+ L.push(``);
23
+ L.push(`import { v } from "convex/values";`);
24
+ L.push(`import { query, mutation } from "../_generated/server";`);
25
+ L.push(``);
26
+ L.push(`const TABLE = "${tableName}" as const;`);
27
+ L.push(``);
28
+ // AgentOps trigger helper
29
+ if (hasAgentOps) {
30
+ L.push(`// ── AgentOps Trigger Helper ──`);
31
+ L.push(``);
32
+ L.push(`async function checkAgentOpsTriggers(`);
33
+ L.push(` ctx: { db: any },`);
34
+ L.push(` eventType: string,`);
35
+ L.push(` eventData: Record<string, unknown>,`);
36
+ L.push(`) {`);
37
+ L.push(` const triggerJobs = await ctx.db`);
38
+ L.push(` .query("agentOpsJobs")`);
39
+ L.push(` .withIndex("by_scheduleType", (q: any) => q.eq("scheduleType", "trigger"))`);
40
+ L.push(` .collect();`);
41
+ L.push(``);
42
+ L.push(` const enabled = triggerJobs.filter(`);
43
+ L.push(` (j: any) => j.enabled && j.triggerType === eventType,`);
44
+ L.push(` );`);
45
+ L.push(``);
46
+ L.push(` for (const job of enabled) {`);
47
+ L.push(` const filter = job.triggerFilter as Record<string, unknown> | undefined;`);
48
+ L.push(` if (filter) {`);
49
+ L.push(` const matches = Object.entries(filter).every(([k, val]) => eventData[k] === val);`);
50
+ L.push(` if (!matches) continue;`);
51
+ L.push(` }`);
52
+ L.push(` const now = Date.now();`);
53
+ L.push(` await ctx.db.insert("agentOpsRuns", {`);
54
+ L.push(` runId: \`\${job.jobId}-trigger-\${now}\`,`);
55
+ L.push(` jobId: job.jobId,`);
56
+ L.push(` status: "queued",`);
57
+ L.push(` agent: job.agent,`);
58
+ L.push(` prompt: job.prompt,`);
59
+ L.push(` executionMode: job.executionMode,`);
60
+ L.push(` queuedAt: now,`);
61
+ L.push(` triggeredBy: "trigger",`);
62
+ L.push(` triggerContext: { event: eventType, ...eventData },`);
63
+ L.push(` baseBranch: job.prBaseBranch,`);
64
+ L.push(` logs: [{ timestamp: now, level: "info", message: \`Triggered by \${eventType}\` }],`);
65
+ L.push(` });`);
66
+ L.push(` await ctx.db.patch(job._id, { lastRunAt: now, totalRuns: job.totalRuns + 1, updatedAt: now });`);
67
+ L.push(` }`);
68
+ L.push(`}`);
69
+ L.push(``);
70
+ }
71
+ // ── QUERIES ──
72
+ L.push(`// ══════════════════════════════════════════════════════════════`);
73
+ L.push(`// QUERIES`);
74
+ L.push(`// ══════════════════════════════════════════════════════════════`);
75
+ L.push(``);
76
+ // get
77
+ L.push(`export const get = query({`);
78
+ L.push(` args: { taskId: v.string() },`);
79
+ L.push(` handler: async (ctx, { taskId }) => {`);
80
+ L.push(` return await ctx.db.query(TABLE).withIndex("by_taskId", (q) => q.eq("taskId", taskId)).unique();`);
81
+ L.push(` },`);
82
+ L.push(`});`);
83
+ L.push(``);
84
+ // getById
85
+ L.push(`export const getById = query({`);
86
+ L.push(` args: { id: v.id(TABLE) },`);
87
+ L.push(` handler: async (ctx, { id }) => ctx.db.get(id),`);
88
+ L.push(`});`);
89
+ L.push(``);
90
+ // list
91
+ L.push(`export const list = query({`);
92
+ L.push(` args: {`);
93
+ L.push(` agent: v.optional(v.union(${agentUnion})),`);
94
+ L.push(` status: v.optional(v.string()),`);
95
+ L.push(` priority: v.optional(v.string()),`);
96
+ L.push(` wave: v.optional(v.number()),`);
97
+ L.push(` category: v.optional(v.string()),`);
98
+ if (config.phases.length > 0) {
99
+ L.push(` phaseId: v.optional(v.string()),`);
100
+ }
101
+ L.push(` limit: v.optional(v.number()),`);
102
+ L.push(` },`);
103
+ L.push(` handler: async (ctx, args) => {`);
104
+ L.push(` let tasks;`);
105
+ L.push(` if (args.agent) {`);
106
+ L.push(` tasks = await ctx.db.query(TABLE).withIndex("by_agent", (q) => q.eq("agent", args.agent!)).collect();`);
107
+ L.push(` } else if (args.status) {`);
108
+ L.push(` tasks = await ctx.db.query(TABLE).withIndex("by_status", (q) => q.eq("status", args.status as any)).collect();`);
109
+ L.push(` } else {`);
110
+ L.push(` tasks = await ctx.db.query(TABLE).collect();`);
111
+ L.push(` }`);
112
+ L.push(` if (args.priority) tasks = tasks.filter((t) => t.priority === args.priority);`);
113
+ L.push(` if (args.wave !== undefined) tasks = tasks.filter((t) => t.wave === args.wave);`);
114
+ L.push(` if (args.category) tasks = tasks.filter((t) => t.category === args.category);`);
115
+ if (config.phases.length > 0) {
116
+ L.push(` if (args.phaseId) tasks = tasks.filter((t) => t.phaseId === args.phaseId);`);
117
+ }
118
+ L.push(` const order: Record<string, number> = { CRITICAL: 0, HIGH: 1, MEDIUM: 2, LOW: 3 };`);
119
+ L.push(` tasks.sort((a, b) => {`);
120
+ L.push(` if (a.wave !== b.wave) return a.wave - b.wave;`);
121
+ L.push(` const ap = order[a.priority] ?? 99, bp = order[b.priority] ?? 99;`);
122
+ L.push(` if (ap !== bp) return ap - bp;`);
123
+ L.push(` return a.taskId.localeCompare(b.taskId);`);
124
+ L.push(` });`);
125
+ L.push(` return args.limit ? tasks.slice(0, args.limit) : tasks;`);
126
+ L.push(` },`);
127
+ L.push(`});`);
128
+ L.push(``);
129
+ // getKanban
130
+ L.push(`export const getKanban = query({`);
131
+ L.push(` args: {},`);
132
+ L.push(` handler: async (ctx) => {`);
133
+ L.push(` const all = await ctx.db.query(TABLE).collect();`);
134
+ L.push(` return {`);
135
+ L.push(` backlog: all.filter((t) => t.status === "backlog" || t.status === "pending"),`);
136
+ L.push(` todo: all.filter((t) => t.status === "todo"),`);
137
+ L.push(` in_progress: all.filter((t) => t.status === "in_progress"),`);
138
+ L.push(` in_review: all.filter((t) => t.status === "in_review"),`);
139
+ L.push(` blocked: all.filter((t) => t.status === "blocked"),`);
140
+ L.push(` done: all.filter((t) => t.status === "done"),`);
141
+ L.push(` cancelled: all.filter((t) => t.status === "cancelled"),`);
142
+ L.push(` };`);
143
+ L.push(` },`);
144
+ L.push(`});`);
145
+ L.push(``);
146
+ // getBlockedTasks
147
+ L.push(`export const getBlockedTasks = query({`);
148
+ L.push(` args: { taskId: v.string() },`);
149
+ L.push(` handler: async (ctx, { taskId }) => {`);
150
+ L.push(` const task = await ctx.db.query(TABLE).withIndex("by_taskId", (q) => q.eq("taskId", taskId)).unique();`);
151
+ L.push(` if (!task?.blocks?.length) return [];`);
152
+ L.push(` const results = [];`);
153
+ L.push(` for (const id of task.blocks) {`);
154
+ L.push(` const t = await ctx.db.query(TABLE).withIndex("by_taskId", (q) => q.eq("taskId", id)).unique();`);
155
+ L.push(` if (t) results.push(t);`);
156
+ L.push(` }`);
157
+ L.push(` return results;`);
158
+ L.push(` },`);
159
+ L.push(`});`);
160
+ L.push(``);
161
+ // search
162
+ L.push(`export const search = query({`);
163
+ L.push(` args: { query: v.string() },`);
164
+ L.push(` handler: async (ctx, { query: q }) => {`);
165
+ L.push(` const all = await ctx.db.query(TABLE).collect();`);
166
+ L.push(` const lq = q.toLowerCase();`);
167
+ L.push(` return all.filter((t) =>`);
168
+ L.push(` t.title.toLowerCase().includes(lq) ||`);
169
+ L.push(` t.taskId.toLowerCase().includes(lq) ||`);
170
+ L.push(` (t.description ?? "").toLowerCase().includes(lq) ||`);
171
+ L.push(` (t.tags ?? []).some((tag) => tag.toLowerCase().includes(lq))`);
172
+ L.push(` );`);
173
+ L.push(` },`);
174
+ L.push(`});`);
175
+ L.push(``);
176
+ // getStats
177
+ L.push(`export const getStats = query({`);
178
+ L.push(` args: {},`);
179
+ L.push(` handler: async (ctx) => {`);
180
+ L.push(` const all = await ctx.db.query(TABLE).collect();`);
181
+ L.push(` const byStatus: Record<string, number> = {};`);
182
+ L.push(` const byAgent: Record<string, number> = {};`);
183
+ L.push(` let done = 0;`);
184
+ L.push(` for (const t of all) {`);
185
+ L.push(` byStatus[t.status] = (byStatus[t.status] ?? 0) + 1;`);
186
+ L.push(` byAgent[t.agent] = (byAgent[t.agent] ?? 0) + 1;`);
187
+ L.push(` if (t.status === "done") done++;`);
188
+ L.push(` }`);
189
+ L.push(` return { total: all.length, byStatus, byAgent, done };`);
190
+ L.push(` },`);
191
+ L.push(`});`);
192
+ L.push(``);
193
+ // checkDependencies
194
+ L.push(`export const checkDependencies = query({`);
195
+ L.push(` args: { taskId: v.string() },`);
196
+ L.push(` handler: async (ctx, { taskId }) => {`);
197
+ L.push(` const task = await ctx.db.query(TABLE).withIndex("by_taskId", (q) => q.eq("taskId", taskId)).unique();`);
198
+ L.push(` if (!task?.dependencies?.length) return { canStart: true, unmetDependencies: [] as string[], blockingTasks: [] as any[] };`);
199
+ L.push(` const unmet: string[] = [];`);
200
+ L.push(` const blocking: any[] = [];`);
201
+ L.push(` for (const depId of task.dependencies) {`);
202
+ L.push(` const dep = await ctx.db.query(TABLE).withIndex("by_taskId", (q) => q.eq("taskId", depId)).unique();`);
203
+ L.push(` if (!dep || dep.status !== "done") { unmet.push(depId); if (dep) blocking.push(dep); }`);
204
+ L.push(` }`);
205
+ L.push(` return { canStart: unmet.length === 0, unmetDependencies: unmet, blockingTasks: blocking };`);
206
+ L.push(` },`);
207
+ L.push(`});`);
208
+ L.push(``);
209
+ // ── MUTATIONS ──
210
+ L.push(`// ══════════════════════════════════════════════════════════════`);
211
+ L.push(`// MUTATIONS`);
212
+ L.push(`// ══════════════════════════════════════════════════════════════`);
213
+ L.push(``);
214
+ // create
215
+ L.push(`export const create = mutation({`);
216
+ L.push(` args: {`);
217
+ L.push(` taskId: v.string(),`);
218
+ L.push(` agent: v.union(${agentUnion}),`);
219
+ L.push(` title: v.string(),`);
220
+ L.push(` description: v.optional(v.string()),`);
221
+ L.push(` priority: v.optional(v.union(v.literal("CRITICAL"), v.literal("HIGH"), v.literal("MEDIUM"), v.literal("LOW"))),`);
222
+ L.push(` status: v.optional(v.string()),`);
223
+ L.push(` category: v.optional(v.string()),`);
224
+ L.push(` phaseId: v.optional(v.string()),`);
225
+ L.push(` wave: v.optional(v.number()),`);
226
+ L.push(` estimatedHours: v.optional(v.number()),`);
227
+ L.push(` dependencies: v.optional(v.array(v.string())),`);
228
+ L.push(` tags: v.optional(v.array(v.string())),`);
229
+ L.push(` acceptanceCriteria: v.optional(v.array(v.string())),`);
230
+ if (isSoftware) {
231
+ L.push(` filesExpected: v.optional(v.array(v.string())),`);
232
+ }
233
+ if (isResearch) {
234
+ L.push(` artifactsExpected: v.optional(v.array(v.string())),`);
235
+ L.push(` confidenceLevel: v.optional(v.number()),`);
236
+ L.push(` sourceIds: v.optional(v.array(v.string())),`);
237
+ }
238
+ L.push(` },`);
239
+ L.push(` handler: async (ctx, args) => {`);
240
+ L.push(` const now = Date.now();`);
241
+ L.push(` const deps = args.dependencies ?? [];`);
242
+ L.push(` let initStatus = args.status ?? "todo";`);
243
+ L.push(``);
244
+ L.push(` // Auto-block if unmet dependencies`);
245
+ L.push(` if (deps.length > 0) {`);
246
+ L.push(` for (const depId of deps) {`);
247
+ L.push(` const dep = await ctx.db.query(TABLE).withIndex("by_taskId", (q) => q.eq("taskId", depId)).unique();`);
248
+ L.push(` if (!dep || dep.status !== "done") { initStatus = "blocked"; break; }`);
249
+ L.push(` }`);
250
+ L.push(` }`);
251
+ L.push(``);
252
+ L.push(` const id = await ctx.db.insert(TABLE, {`);
253
+ L.push(` taskId: args.taskId,`);
254
+ L.push(` agent: args.agent,`);
255
+ L.push(` title: args.title,`);
256
+ L.push(` description: args.description,`);
257
+ L.push(` priority: args.priority ?? "MEDIUM",`);
258
+ L.push(` status: initStatus as any,`);
259
+ L.push(` category: args.category as any,`);
260
+ if (config.phases.length > 0) {
261
+ L.push(` phaseId: args.phaseId as any,`);
262
+ }
263
+ L.push(` wave: args.wave ?? 1,`);
264
+ L.push(` estimatedHours: args.estimatedHours,`);
265
+ L.push(` dependencies: deps,`);
266
+ L.push(` tags: args.tags,`);
267
+ L.push(` acceptanceCriteria: args.acceptanceCriteria,`);
268
+ if (isSoftware) {
269
+ L.push(` filesExpected: args.filesExpected ?? [],`);
270
+ L.push(` commits: [],`);
271
+ }
272
+ if (isResearch) {
273
+ L.push(` artifactsExpected: args.artifactsExpected ?? [],`);
274
+ L.push(` artifacts: [],`);
275
+ L.push(` confidenceLevel: args.confidenceLevel,`);
276
+ L.push(` sourceIds: args.sourceIds,`);
277
+ }
278
+ L.push(` statusHistory: [{ status: initStatus, timestamp: now }],`);
279
+ L.push(` createdAt: now,`);
280
+ L.push(` updatedAt: now,`);
281
+ L.push(` });`);
282
+ L.push(` return id;`);
283
+ L.push(` },`);
284
+ L.push(`});`);
285
+ L.push(``);
286
+ // update
287
+ L.push(`export const update = mutation({`);
288
+ L.push(` args: { taskId: v.string(), fields: v.any() },`);
289
+ L.push(` handler: async (ctx, { taskId, fields }) => {`);
290
+ L.push(` const task = await ctx.db.query(TABLE).withIndex("by_taskId", (q) => q.eq("taskId", taskId)).unique();`);
291
+ L.push(` if (!task) throw new Error(\`Task \${taskId} not found\`);`);
292
+ L.push(` await ctx.db.patch(task._id, { ...fields, updatedAt: Date.now() });`);
293
+ L.push(` },`);
294
+ L.push(`});`);
295
+ L.push(``);
296
+ // changeStatus
297
+ L.push(`export const changeStatus = mutation({`);
298
+ L.push(` args: {`);
299
+ L.push(` taskId: v.string(),`);
300
+ L.push(` newStatus: v.string(),`);
301
+ L.push(` note: v.optional(v.string()),`);
302
+ L.push(` agent: v.optional(v.string()),`);
303
+ L.push(` },`);
304
+ L.push(` handler: async (ctx, { taskId, newStatus, note, agent }) => {`);
305
+ L.push(` const task = await ctx.db.query(TABLE).withIndex("by_taskId", (q) => q.eq("taskId", taskId)).unique();`);
306
+ L.push(` if (!task) throw new Error(\`Task \${taskId} not found\`);`);
307
+ L.push(` const now = Date.now();`);
308
+ L.push(` const history = [...(task.statusHistory ?? []), { status: newStatus, timestamp: now, note, agent }];`);
309
+ L.push(` const patch: Record<string, unknown> = { status: newStatus, statusHistory: history, updatedAt: now };`);
310
+ L.push(` if (newStatus === "in_progress" && !task.startedAt) patch.startedAt = now;`);
311
+ L.push(` if (newStatus === "done") patch.completedAt = now;`);
312
+ L.push(` await ctx.db.patch(task._id, patch);`);
313
+ L.push(``);
314
+ L.push(` // Auto-unblock dependents when done`);
315
+ L.push(` if (newStatus === "done") {`);
316
+ L.push(` const all = await ctx.db.query(TABLE).collect();`);
317
+ L.push(` for (const t of all) {`);
318
+ L.push(` if (t.status !== "blocked" || !t.dependencies?.includes(taskId)) continue;`);
319
+ L.push(` const allMet = t.dependencies.every((d) => {`);
320
+ L.push(` if (d === taskId) return true;`);
321
+ L.push(` const dep = all.find((x) => x.taskId === d);`);
322
+ L.push(` return dep?.status === "done";`);
323
+ L.push(` });`);
324
+ L.push(` if (allMet) await ctx.db.patch(t._id, { status: "todo", updatedAt: now });`);
325
+ L.push(` }`);
326
+ L.push(` }`);
327
+ if (hasAgentOps) {
328
+ L.push(``);
329
+ L.push(` await checkAgentOpsTriggers(ctx, "status_change", { taskId, agent: task.agent, priority: task.priority, status: newStatus });`);
330
+ }
331
+ L.push(` },`);
332
+ L.push(`});`);
333
+ L.push(``);
334
+ // addBlocker
335
+ L.push(`export const addBlocker = mutation({`);
336
+ L.push(` args: { taskId: v.string(), reason: v.string() },`);
337
+ L.push(` handler: async (ctx, { taskId, reason }) => {`);
338
+ L.push(` const task = await ctx.db.query(TABLE).withIndex("by_taskId", (q) => q.eq("taskId", taskId)).unique();`);
339
+ L.push(` if (!task) throw new Error(\`Task \${taskId} not found\`);`);
340
+ L.push(` const blockers = [...(task.blockers ?? []), { reason, createdAt: Date.now() }];`);
341
+ L.push(` await ctx.db.patch(task._id, { blockers, status: "blocked", updatedAt: Date.now() });`);
342
+ L.push(` },`);
343
+ L.push(`});`);
344
+ L.push(``);
345
+ // resolveBlocker
346
+ L.push(`export const resolveBlocker = mutation({`);
347
+ L.push(` args: { taskId: v.string(), index: v.number() },`);
348
+ L.push(` handler: async (ctx, { taskId, index }) => {`);
349
+ L.push(` const task = await ctx.db.query(TABLE).withIndex("by_taskId", (q) => q.eq("taskId", taskId)).unique();`);
350
+ L.push(` if (!task) throw new Error(\`Task \${taskId} not found\`);`);
351
+ L.push(` const blockers = [...(task.blockers ?? [])];`);
352
+ L.push(` if (blockers[index]) blockers[index] = { ...blockers[index], resolvedAt: Date.now(), resolvedBy: "system" };`);
353
+ L.push(` const allResolved = blockers.every((b) => b.resolvedAt);`);
354
+ L.push(` await ctx.db.patch(task._id, { blockers, status: allResolved ? "todo" : "blocked", updatedAt: Date.now() });`);
355
+ L.push(` },`);
356
+ L.push(`});`);
357
+ L.push(``);
358
+ // remove
359
+ L.push(`export const remove = mutation({`);
360
+ L.push(` args: { taskId: v.string() },`);
361
+ L.push(` handler: async (ctx, { taskId }) => {`);
362
+ L.push(` const task = await ctx.db.query(TABLE).withIndex("by_taskId", (q) => q.eq("taskId", taskId)).unique();`);
363
+ L.push(` if (!task) throw new Error(\`Task \${taskId} not found\`);`);
364
+ L.push(` await ctx.db.delete(task._id);`);
365
+ L.push(` },`);
366
+ L.push(`});`);
367
+ L.push(``);
368
+ // bulkImport
369
+ L.push(`export const bulkImport = mutation({`);
370
+ L.push(` args: { tasks: v.array(v.any()), source: v.string() },`);
371
+ L.push(` handler: async (ctx, { tasks, source }) => {`);
372
+ L.push(` const now = Date.now();`);
373
+ L.push(` let created = 0, updated = 0;`);
374
+ L.push(` for (const t of tasks) {`);
375
+ L.push(` const existing = await ctx.db.query(TABLE).withIndex("by_taskId", (q) => q.eq("taskId", t.taskId)).unique();`);
376
+ L.push(` if (existing) {`);
377
+ L.push(` await ctx.db.patch(existing._id, { ...t, updatedAt: now });`);
378
+ L.push(` updated++;`);
379
+ L.push(` } else {`);
380
+ L.push(` await ctx.db.insert(TABLE, { ...t, createdAt: now, updatedAt: now });`);
381
+ L.push(` created++;`);
382
+ L.push(` }`);
383
+ L.push(` }`);
384
+ L.push(` await ctx.db.insert("taskSyncLog", {`);
385
+ L.push(` operation: "import", source, tasksAffected: created + updated,`);
386
+ L.push(` tasksCreated: created, tasksUpdated: updated, timestamp: now,`);
387
+ L.push(` });`);
388
+ L.push(` return { created, updated };`);
389
+ L.push(` },`);
390
+ L.push(`});`);
391
+ L.push(``);
392
+ // Software: addCommit
393
+ if (isSoftware && config.extensions.commitTracking) {
394
+ L.push(`// ── Software: Commit Tracking ──`);
395
+ L.push(``);
396
+ L.push(`export const addCommit = mutation({`);
397
+ L.push(` args: {`);
398
+ L.push(` taskId: v.string(),`);
399
+ L.push(` hash: v.string(),`);
400
+ L.push(` message: v.string(),`);
401
+ L.push(` filesChanged: v.optional(v.array(v.string())),`);
402
+ L.push(` agent: v.optional(v.string()),`);
403
+ L.push(` },`);
404
+ L.push(` handler: async (ctx, args) => {`);
405
+ L.push(` const task = await ctx.db.query(TABLE).withIndex("by_taskId", (q) => q.eq("taskId", args.taskId)).unique();`);
406
+ L.push(` if (!task) throw new Error(\`Task \${args.taskId} not found\`);`);
407
+ L.push(` const commits = [...(task.commits ?? []), {`);
408
+ L.push(` hash: args.hash, message: args.message, timestamp: Date.now(),`);
409
+ L.push(` filesChanged: args.filesChanged, agent: args.agent,`);
410
+ L.push(` }];`);
411
+ L.push(` await ctx.db.patch(task._id, { commits, updatedAt: Date.now() });`);
412
+ if (hasAgentOps) {
413
+ L.push(` await checkAgentOpsTriggers(ctx, "commit", { taskId: args.taskId, agent: task.agent, priority: task.priority });`);
414
+ }
415
+ L.push(` },`);
416
+ L.push(`});`);
417
+ L.push(``);
418
+ }
419
+ // Research: addArtifact
420
+ if (isResearch) {
421
+ L.push(`// ── Research: Artifact Tracking ──`);
422
+ L.push(``);
423
+ L.push(`export const addArtifact = mutation({`);
424
+ L.push(` args: {`);
425
+ L.push(` taskId: v.string(),`);
426
+ L.push(` id: v.string(),`);
427
+ L.push(` type: v.string(),`);
428
+ L.push(` description: v.string(),`);
429
+ L.push(` filePath: v.optional(v.string()),`);
430
+ L.push(` agent: v.optional(v.string()),`);
431
+ L.push(` },`);
432
+ L.push(` handler: async (ctx, args) => {`);
433
+ L.push(` const task = await ctx.db.query(TABLE).withIndex("by_taskId", (q) => q.eq("taskId", args.taskId)).unique();`);
434
+ L.push(` if (!task) throw new Error(\`Task \${args.taskId} not found\`);`);
435
+ L.push(` const artifacts = [...(task.artifacts ?? []), {`);
436
+ L.push(` id: args.id, type: args.type, description: args.description,`);
437
+ L.push(` timestamp: Date.now(), filePath: args.filePath, agent: args.agent,`);
438
+ L.push(` }];`);
439
+ L.push(` await ctx.db.patch(task._id, { artifacts, updatedAt: Date.now() });`);
440
+ L.push(` },`);
441
+ L.push(`});`);
442
+ L.push(``);
443
+ }
444
+ const content = L.join("\n");
445
+ const filePath = join(targetDir, "convex", "taskSystem", "tasks.ts");
446
+ if (!dryRun) {
447
+ writeFileSync(filePath, content, "utf-8");
448
+ }
449
+ return { file: "convex/taskSystem/tasks.ts", lines: L.length };
450
+ }
451
+ //# sourceMappingURL=tasks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/generators/tasks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,54 @@
1
+ #!/usr/bin/env node
2
+ // ============================================================
3
+ // @yattalo/task-system — CLI Entry Point
4
+ // ============================================================
5
+ import { Command } from "commander";
6
+ import { initCommand } from "./commands/init.js";
7
+ import { seedCommand } from "./commands/seed.js";
8
+ import { statusCommand } from "./commands/status.js";
9
+ import { kanbanCommand } from "./commands/kanban.js";
10
+ import { dashboardCommand } from "./commands/dashboard.js";
11
+ import { reportCommand } from "./commands/report.js";
12
+ const program = new Command();
13
+ program
14
+ .name("task-system")
15
+ .description("Portable multi-agent task orchestration scaffold")
16
+ .version("0.1.0");
17
+ program
18
+ .command("init")
19
+ .description("Scaffold task system into current project")
20
+ .option("--preset <preset>", "Use preset config (software|research)")
21
+ .option("--dir <dir>", "Target directory", process.cwd())
22
+ .option("--dry-run", "Show what would be generated without writing files")
23
+ .action(initCommand);
24
+ program
25
+ .command("seed")
26
+ .description("Run orchestrator:seed to import task definitions")
27
+ .option("--dir <dir>", "Project directory", process.cwd())
28
+ .action(seedCommand);
29
+ program
30
+ .command("status")
31
+ .description("Show task stats in terminal")
32
+ .option("--dir <dir>", "Project directory", process.cwd())
33
+ .action(statusCommand);
34
+ program
35
+ .command("kanban")
36
+ .description("Show Kanban board in terminal")
37
+ .option("--dir <dir>", "Project directory", process.cwd())
38
+ .option("--agent <agent>", "Filter by agent")
39
+ .action(kanbanCommand);
40
+ program
41
+ .command("dashboard")
42
+ .description("Serve HTML dashboard in browser")
43
+ .option("--dir <dir>", "Project directory", process.cwd())
44
+ .option("--port <port>", "Port number", "3456")
45
+ .action(dashboardCommand);
46
+ program
47
+ .command("report")
48
+ .description("Generate markdown report")
49
+ .option("--dir <dir>", "Project directory", process.cwd())
50
+ .option("--scope <agent>", "Filter by agent")
51
+ .option("--output <file>", "Output file path")
52
+ .action(reportCommand);
53
+ program.parse();
54
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,+DAA+D;AAC/D,yCAAyC;AACzC,+DAA+D;AAE/D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,aAAa,CAAC;KACnB,WAAW,CAAC,kDAAkD,CAAC;KAC/D,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,2CAA2C,CAAC;KACxD,MAAM,CAAC,mBAAmB,EAAE,uCAAuC,CAAC;KACpE,MAAM,CAAC,aAAa,EAAE,kBAAkB,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;KACxD,MAAM,CAAC,WAAW,EAAE,oDAAoD,CAAC;KACzE,MAAM,CAAC,WAAW,CAAC,CAAC;AAEvB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,kDAAkD,CAAC;KAC/D,MAAM,CAAC,aAAa,EAAE,mBAAmB,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;KACzD,MAAM,CAAC,WAAW,CAAC,CAAC;AAEvB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,6BAA6B,CAAC;KAC1C,MAAM,CAAC,aAAa,EAAE,mBAAmB,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;KACzD,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,+BAA+B,CAAC;KAC5C,MAAM,CAAC,aAAa,EAAE,mBAAmB,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;KACzD,MAAM,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;KAC5C,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,OAAO;KACJ,OAAO,CAAC,WAAW,CAAC;KACpB,WAAW,CAAC,iCAAiC,CAAC;KAC9C,MAAM,CAAC,aAAa,EAAE,mBAAmB,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;KACzD,MAAM,CAAC,eAAe,EAAE,aAAa,EAAE,MAAM,CAAC;KAC9C,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAE5B,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,0BAA0B,CAAC;KACvC,MAAM,CAAC,aAAa,EAAE,mBAAmB,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;KACzD,MAAM,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;KAC5C,MAAM,CAAC,iBAAiB,EAAE,kBAAkB,CAAC;KAC7C,MAAM,CAAC,aAAa,CAAC,CAAC;AAEzB,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { TaskSystemConfig } from "@yattalo/task-system-core";
2
+ export declare const researchPreset: TaskSystemConfig;
3
+ //# sourceMappingURL=research.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"research.d.ts","sourceRoot":"","sources":["../../src/presets/research.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAElE,eAAO,MAAM,cAAc,EAAE,gBA0D5B,CAAC"}
@@ -0,0 +1,56 @@
1
+ // ============================================================
2
+ // Preset: Market Research (like ricerca_preliminare_verco)
3
+ // ============================================================
4
+ export const researchPreset = {
5
+ projectName: "my-research",
6
+ tableName: "agentTasks",
7
+ agents: {
8
+ claude: { label: "Claude Code", icon: "CL", color: "#35401E" },
9
+ codex: { label: "Codex", icon: "CX", color: "#733E20" },
10
+ gemini: { label: "Gemini CLI", icon: "GE", color: "#8C8354" },
11
+ antigravity: { label: "Antigravity", icon: "AG", color: "#4A3F6B" },
12
+ },
13
+ categories: [
14
+ "research",
15
+ "validation",
16
+ "synthesis",
17
+ "visual",
18
+ "presentation",
19
+ "documentation",
20
+ ],
21
+ phases: [
22
+ { id: "desk-research", label: "Desk Research", wave: 1 },
23
+ { id: "client-discovery", label: "Client Discovery", wave: 2 },
24
+ { id: "validation", label: "Validation", wave: 3 },
25
+ { id: "competitor-intel", label: "Competitor Intel", wave: 4 },
26
+ { id: "synthesis", label: "Synthesis & Output", wave: 5 },
27
+ ],
28
+ taskIdPattern: "[A-Z]{2}\\d{1,3}",
29
+ extensions: {
30
+ commitTracking: false,
31
+ scopeCreepDetection: false,
32
+ reviewFindings: false,
33
+ confidenceTracking: true,
34
+ evidenceTracker: true,
35
+ handoffLog: true,
36
+ checkpointLog: true,
37
+ agentOps: false,
38
+ },
39
+ dashboard: {
40
+ pollingInterval: 5000,
41
+ theme: "dark",
42
+ },
43
+ agentOps: {
44
+ pollInterval: 30000,
45
+ maxConcurrentRuns: 2,
46
+ maxRunsPerDay: 50,
47
+ defaultTimeoutMinutes: 45,
48
+ protectedBranches: ["main"],
49
+ agentCommands: {
50
+ claude: "claude",
51
+ gemini: "gemini",
52
+ codex: "codex",
53
+ },
54
+ },
55
+ };
56
+ //# sourceMappingURL=research.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"research.js","sourceRoot":"","sources":["../../src/presets/research.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,2DAA2D;AAC3D,+DAA+D;AAI/D,MAAM,CAAC,MAAM,cAAc,GAAqB;IAC9C,WAAW,EAAE,aAAa;IAC1B,SAAS,EAAE,YAAY;IAEvB,MAAM,EAAE;QACN,MAAM,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE;QAC9D,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE;QACvD,MAAM,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE;QAC7D,WAAW,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE;KACpE;IAED,UAAU,EAAE;QACV,UAAU;QACV,YAAY;QACZ,WAAW;QACX,QAAQ;QACR,cAAc;QACd,eAAe;KAChB;IAED,MAAM,EAAE;QACN,EAAE,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,EAAE;QACxD,EAAE,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,EAAE;QAC9D,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,EAAE;QAClD,EAAE,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,EAAE;QAC9D,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,EAAE;KAC1D;IAED,aAAa,EAAE,kBAAkB;IAEjC,UAAU,EAAE;QACV,cAAc,EAAE,KAAK;QACrB,mBAAmB,EAAE,KAAK;QAC1B,cAAc,EAAE,KAAK;QACrB,kBAAkB,EAAE,IAAI;QACxB,eAAe,EAAE,IAAI;QACrB,UAAU,EAAE,IAAI;QAChB,aAAa,EAAE,IAAI;QACnB,QAAQ,EAAE,KAAK;KAChB;IAED,SAAS,EAAE;QACT,eAAe,EAAE,IAAI;QACrB,KAAK,EAAE,MAAM;KACd;IAED,QAAQ,EAAE;QACR,YAAY,EAAE,KAAK;QACnB,iBAAiB,EAAE,CAAC;QACpB,aAAa,EAAE,EAAE;QACjB,qBAAqB,EAAE,EAAE;QACzB,iBAAiB,EAAE,CAAC,MAAM,CAAC;QAC3B,aAAa,EAAE;YACb,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,QAAQ;YAChB,KAAK,EAAE,OAAO;SACf;KACF;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { TaskSystemConfig } from "@yattalo/task-system-core";
2
+ export declare const softwarePreset: TaskSystemConfig;
3
+ //# sourceMappingURL=software.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"software.d.ts","sourceRoot":"","sources":["../../src/presets/software.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAElE,eAAO,MAAM,cAAc,EAAE,gBA0D5B,CAAC"}