@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.
- package/README.md +66 -0
- package/dist/commands/dashboard.d.ts +7 -0
- package/dist/commands/dashboard.d.ts.map +1 -0
- package/dist/commands/dashboard.js +30 -0
- package/dist/commands/dashboard.js.map +1 -0
- package/dist/commands/init.d.ts +8 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +316 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/kanban.d.ts +7 -0
- package/dist/commands/kanban.d.ts.map +1 -0
- package/dist/commands/kanban.js +68 -0
- package/dist/commands/kanban.js.map +1 -0
- package/dist/commands/report.d.ts +8 -0
- package/dist/commands/report.d.ts.map +1 -0
- package/dist/commands/report.js +60 -0
- package/dist/commands/report.js.map +1 -0
- package/dist/commands/seed.d.ts +6 -0
- package/dist/commands/seed.d.ts.map +1 -0
- package/dist/commands/seed.js +30 -0
- package/dist/commands/seed.js.map +1 -0
- package/dist/commands/status.d.ts +6 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +62 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/generators/agent-ops-scripts.d.ts +8 -0
- package/dist/generators/agent-ops-scripts.d.ts.map +1 -0
- package/dist/generators/agent-ops-scripts.js +843 -0
- package/dist/generators/agent-ops-scripts.js.map +1 -0
- package/dist/generators/agent-ops.d.ts +6 -0
- package/dist/generators/agent-ops.d.ts.map +1 -0
- package/dist/generators/agent-ops.js +290 -0
- package/dist/generators/agent-ops.js.map +1 -0
- package/dist/generators/claude-hooks.d.ts +6 -0
- package/dist/generators/claude-hooks.d.ts.map +1 -0
- package/dist/generators/claude-hooks.js +260 -0
- package/dist/generators/claude-hooks.js.map +1 -0
- package/dist/generators/cli-aliases.d.ts +6 -0
- package/dist/generators/cli-aliases.d.ts.map +1 -0
- package/dist/generators/cli-aliases.js +187 -0
- package/dist/generators/cli-aliases.js.map +1 -0
- package/dist/generators/dashboard.d.ts +6 -0
- package/dist/generators/dashboard.d.ts.map +1 -0
- package/dist/generators/dashboard.js +732 -0
- package/dist/generators/dashboard.js.map +1 -0
- package/dist/generators/git-hook.d.ts +6 -0
- package/dist/generators/git-hook.d.ts.map +1 -0
- package/dist/generators/git-hook.js +163 -0
- package/dist/generators/git-hook.js.map +1 -0
- package/dist/generators/http.d.ts +6 -0
- package/dist/generators/http.d.ts.map +1 -0
- package/dist/generators/http.js +175 -0
- package/dist/generators/http.js.map +1 -0
- package/dist/generators/orchestrator.d.ts +6 -0
- package/dist/generators/orchestrator.d.ts.map +1 -0
- package/dist/generators/orchestrator.js +391 -0
- package/dist/generators/orchestrator.js.map +1 -0
- package/dist/generators/schema.d.ts +8 -0
- package/dist/generators/schema.d.ts.map +1 -0
- package/dist/generators/schema.js +470 -0
- package/dist/generators/schema.js.map +1 -0
- package/dist/generators/skill.d.ts +6 -0
- package/dist/generators/skill.d.ts.map +1 -0
- package/dist/generators/skill.js +147 -0
- package/dist/generators/skill.js.map +1 -0
- package/dist/generators/slash-commands.d.ts +6 -0
- package/dist/generators/slash-commands.d.ts.map +1 -0
- package/dist/generators/slash-commands.js +268 -0
- package/dist/generators/slash-commands.js.map +1 -0
- package/dist/generators/tasks.d.ts +6 -0
- package/dist/generators/tasks.d.ts.map +1 -0
- package/dist/generators/tasks.js +451 -0
- package/dist/generators/tasks.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +54 -0
- package/dist/index.js.map +1 -0
- package/dist/presets/research.d.ts +3 -0
- package/dist/presets/research.d.ts.map +1 -0
- package/dist/presets/research.js +56 -0
- package/dist/presets/research.js.map +1 -0
- package/dist/presets/software.d.ts +3 -0
- package/dist/presets/software.d.ts.map +1 -0
- package/dist/presets/software.js +56 -0
- package/dist/presets/software.js.map +1 -0
- package/dist/utils/detect.d.ts +3 -0
- package/dist/utils/detect.d.ts.map +1 -0
- package/dist/utils/detect.js +76 -0
- package/dist/utils/detect.js.map +1 -0
- package/dist/utils/merge.d.ts +14 -0
- package/dist/utils/merge.d.ts.map +1 -0
- package/dist/utils/merge.js +43 -0
- package/dist/utils/merge.js.map +1 -0
- 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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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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"}
|