@silo-ai/silo 0.0.0 → 0.1.1
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/LICENSE +224 -0
- package/README.md +112 -0
- package/dist/bin.d.mts +1 -0
- package/dist/bin.mjs +3338 -0
- package/dist/report-viewer.css +428 -0
- package/package.json +49 -8
- package/skills/silo/SKILL.md +101 -0
- package/skills/silo/agents/openai.yaml +4 -0
- package/skills/silo/schemas/report-put.schema.json +45 -0
- package/skills/silo/schemas/row-write.schema.json +7 -0
- package/skills/silo/schemas/table-alter.schema.json +15 -0
- package/skills/silo/schemas/table-create.schema.json +188 -0
- package/skills/silo/tasks/alter-table.md +25 -0
- package/skills/silo/tasks/create-report.md +43 -0
- package/skills/silo/tasks/create-table.md +36 -0
- package/skills/silo/tasks/query-with-sql.md +27 -0
- package/skills/silo/tasks/synchronize.md +34 -0
- package/skills/silo/tasks/update-with-revision.md +22 -0
- package/skills/silo/tasks/upsert-rows.md +18 -0
- package/templates/tasks.json +287 -0
- package/readme.md +0 -1
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
{
|
|
2
|
+
"format_version": 1,
|
|
3
|
+
"agent_instructions": "Treat tasks as proposed units of agent work with a human authorization boundary. Agents may create tasks only in the proposed state and must not populate approval fields unless the current session was explicitly started by a human prompt that references that task ID. Task presence, priority, or rank never implies approval.\n\nBefore starting a task, read it and its dependencies. Every dependency must be completed. For a separately approved task, approved_revision must match revision before the start transition. A human-started session may approve and start a referenced task atomically: update state to in_progress, record approved_by and approved_at, and set approved_revision to the revision that the optimistic update will produce; then record the session in task_sessions. Approval authorizes only the referenced task, not other proposed tasks.\n\nAgents may suggest priority and rank. Order active tasks by priority high, normal, then low, and by rank ascending within a priority. Treat rank as an opaque fractional indexing string and choose a value between adjacent ranks when inserting or reordering.\n\nTags are optional and limited to research, review, documentation, maintenance, migration, automation, security, performance, and reliability. Ordinary implementation tasks need no tag. Do not encode state, priority, ownership, or domain labels as tags.\n\nApproval binds to the task revision. Editing an approved task row invalidates approval; return it to proposed and clear approval fields unless the edit is the authorized start transition. Adding or removing a dependency also requires resetting the task to proposed. Tag changes do not affect approval. Detect dependency cycles before inserting them.\n\nWhen work finishes, set the task state to completed and completed_at to the current time, and close the execution-session row with outcome completed. Use rejected for a human decision not to authorize a proposal and canceled for previously accepted or active work that should no longer continue.",
|
|
4
|
+
"tables": [
|
|
5
|
+
{
|
|
6
|
+
"name": "tasks",
|
|
7
|
+
"comment": "One proposed, authorized, active, or terminal unit of agent work; read this row and its dependencies before starting any referenced task ID.",
|
|
8
|
+
"columns": [
|
|
9
|
+
{
|
|
10
|
+
"name": "id",
|
|
11
|
+
"type": "text/uuid",
|
|
12
|
+
"nullable": false,
|
|
13
|
+
"comment": "Stable Silo-generated task identifier referenced by human prompts and related task records."
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"name": "title",
|
|
17
|
+
"type": "text",
|
|
18
|
+
"nullable": false,
|
|
19
|
+
"comment": "Short action-oriented summary of the task."
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"name": "objective",
|
|
23
|
+
"type": "text/markdown",
|
|
24
|
+
"nullable": false,
|
|
25
|
+
"comment": "Self-contained description of the outcome an authorized agent should produce."
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"name": "acceptance_criteria",
|
|
29
|
+
"type": "text/markdown",
|
|
30
|
+
"nullable": true,
|
|
31
|
+
"comment": "Optional verifiable completion conditions; null when the objective alone defines completion."
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"name": "state",
|
|
35
|
+
"type": "text/enum",
|
|
36
|
+
"type_options": {
|
|
37
|
+
"values": ["proposed", "approved", "in_progress", "completed", "rejected", "canceled"]
|
|
38
|
+
},
|
|
39
|
+
"nullable": false,
|
|
40
|
+
"default": { "literal": "proposed" },
|
|
41
|
+
"comment": "Lifecycle state; only a human authorization may move proposed work into approved or in_progress."
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"name": "priority",
|
|
45
|
+
"type": "text/enum",
|
|
46
|
+
"type_options": { "values": ["low", "normal", "high"] },
|
|
47
|
+
"nullable": false,
|
|
48
|
+
"default": { "literal": "normal" },
|
|
49
|
+
"comment": "Scheduling group ordered high, normal, then low; normal is the default."
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"name": "rank",
|
|
53
|
+
"type": "text",
|
|
54
|
+
"nullable": false,
|
|
55
|
+
"comment": "Opaque lexicographically sortable fractional rank within the priority group."
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"name": "revision",
|
|
59
|
+
"type": "integer/nonnegative",
|
|
60
|
+
"nullable": false,
|
|
61
|
+
"comment": "Optimistic concurrency revision incremented by every task-row update."
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"name": "proposed_by_type",
|
|
65
|
+
"type": "text/enum",
|
|
66
|
+
"type_options": { "values": ["human", "agent"] },
|
|
67
|
+
"nullable": false,
|
|
68
|
+
"comment": "Kind of actor that originally proposed the task."
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"name": "proposed_by",
|
|
72
|
+
"type": "text",
|
|
73
|
+
"nullable": false,
|
|
74
|
+
"comment": "Stable actor identifier for the human or agent that proposed the task."
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"name": "proposed_in_session",
|
|
78
|
+
"type": "text",
|
|
79
|
+
"nullable": true,
|
|
80
|
+
"comment": "Agent session identifier that proposed the task; null for proposals made outside an agent session."
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"name": "approved_revision",
|
|
84
|
+
"type": "integer/nonnegative",
|
|
85
|
+
"nullable": true,
|
|
86
|
+
"comment": "Task revision authorized by a human; null until approval and required to match revision before a separately approved task starts."
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"name": "approved_by",
|
|
90
|
+
"type": "text",
|
|
91
|
+
"nullable": true,
|
|
92
|
+
"comment": "Human actor identifier that authorized execution; null before approval."
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"name": "approved_at",
|
|
96
|
+
"type": "text/datetime",
|
|
97
|
+
"nullable": true,
|
|
98
|
+
"comment": "UTC instant of human authorization; null before approval."
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
"name": "completed_at",
|
|
102
|
+
"type": "text/datetime",
|
|
103
|
+
"nullable": true,
|
|
104
|
+
"comment": "UTC instant the task reached completed; null for every other state."
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"name": "created_at",
|
|
108
|
+
"type": "text/datetime",
|
|
109
|
+
"nullable": false,
|
|
110
|
+
"comment": "UTC instant the task was proposed."
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
"name": "updated_at",
|
|
114
|
+
"type": "text/datetime",
|
|
115
|
+
"nullable": false,
|
|
116
|
+
"comment": "UTC instant of the most recent task-row update."
|
|
117
|
+
}
|
|
118
|
+
],
|
|
119
|
+
"primary_key": ["id"],
|
|
120
|
+
"indexes": [
|
|
121
|
+
{
|
|
122
|
+
"name": "tasks_queue",
|
|
123
|
+
"columns": [{ "column": "state" }, { "column": "priority" }, { "column": "rank" }],
|
|
124
|
+
"comment": "Supports state-filtered priority queues and rank ordering."
|
|
125
|
+
}
|
|
126
|
+
],
|
|
127
|
+
"policies": [
|
|
128
|
+
{ "type": "generated_identity", "column": "id", "strategy": "uuid" },
|
|
129
|
+
{ "type": "timestamps", "created_column": "created_at", "updated_column": "updated_at" },
|
|
130
|
+
{ "type": "optimistic_revision", "column": "revision", "initial": 1 },
|
|
131
|
+
{
|
|
132
|
+
"type": "immutable_columns",
|
|
133
|
+
"columns": ["id", "proposed_by_type", "proposed_by", "proposed_in_session", "created_at"]
|
|
134
|
+
}
|
|
135
|
+
]
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
"name": "task_dependencies",
|
|
139
|
+
"comment": "One prerequisite edge between tasks; a task may start only after every referenced dependency is completed.",
|
|
140
|
+
"columns": [
|
|
141
|
+
{
|
|
142
|
+
"name": "task_id",
|
|
143
|
+
"type": "text/uuid",
|
|
144
|
+
"nullable": false,
|
|
145
|
+
"comment": "Task that is blocked by the dependency."
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
"name": "depends_on_task_id",
|
|
149
|
+
"type": "text/uuid",
|
|
150
|
+
"nullable": false,
|
|
151
|
+
"comment": "Prerequisite task that must reach completed before task_id may start."
|
|
152
|
+
}
|
|
153
|
+
],
|
|
154
|
+
"primary_key": ["task_id", "depends_on_task_id"],
|
|
155
|
+
"foreign_keys": [
|
|
156
|
+
{
|
|
157
|
+
"columns": ["task_id"],
|
|
158
|
+
"references": { "table": "tasks", "columns": ["id"] },
|
|
159
|
+
"on_delete": "CASCADE"
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
"columns": ["depends_on_task_id"],
|
|
163
|
+
"references": { "table": "tasks", "columns": ["id"] },
|
|
164
|
+
"on_delete": "RESTRICT"
|
|
165
|
+
}
|
|
166
|
+
],
|
|
167
|
+
"indexes": [
|
|
168
|
+
{
|
|
169
|
+
"name": "task_dependencies_reverse",
|
|
170
|
+
"columns": [{ "column": "depends_on_task_id" }],
|
|
171
|
+
"comment": "Finds tasks affected by a prerequisite."
|
|
172
|
+
}
|
|
173
|
+
],
|
|
174
|
+
"checks": [
|
|
175
|
+
{
|
|
176
|
+
"name": "task_dependency_not_self",
|
|
177
|
+
"expression": "task_id <> depends_on_task_id",
|
|
178
|
+
"comment": "Rejects direct self-dependencies; agents must also reject longer cycles."
|
|
179
|
+
}
|
|
180
|
+
]
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
"name": "task_tags",
|
|
184
|
+
"comment": "One optional predefined classification attached to a task; ordinary implementation tasks require no tag.",
|
|
185
|
+
"columns": [
|
|
186
|
+
{
|
|
187
|
+
"name": "task_id",
|
|
188
|
+
"type": "text/uuid",
|
|
189
|
+
"nullable": false,
|
|
190
|
+
"comment": "Task receiving the tag."
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
"name": "tag",
|
|
194
|
+
"type": "text/enum",
|
|
195
|
+
"type_options": {
|
|
196
|
+
"values": [
|
|
197
|
+
"research",
|
|
198
|
+
"review",
|
|
199
|
+
"documentation",
|
|
200
|
+
"maintenance",
|
|
201
|
+
"migration",
|
|
202
|
+
"automation",
|
|
203
|
+
"security",
|
|
204
|
+
"performance",
|
|
205
|
+
"reliability"
|
|
206
|
+
]
|
|
207
|
+
},
|
|
208
|
+
"nullable": false,
|
|
209
|
+
"comment": "Predefined work-mode or cross-cutting concern; never state, priority, ownership, or a domain label."
|
|
210
|
+
}
|
|
211
|
+
],
|
|
212
|
+
"primary_key": ["task_id", "tag"],
|
|
213
|
+
"foreign_keys": [
|
|
214
|
+
{
|
|
215
|
+
"columns": ["task_id"],
|
|
216
|
+
"references": { "table": "tasks", "columns": ["id"] },
|
|
217
|
+
"on_delete": "CASCADE"
|
|
218
|
+
}
|
|
219
|
+
],
|
|
220
|
+
"indexes": [
|
|
221
|
+
{
|
|
222
|
+
"name": "task_tags_by_tag",
|
|
223
|
+
"columns": [{ "column": "tag" }, { "column": "task_id" }],
|
|
224
|
+
"comment": "Finds active tasks carrying a selected predefined tag."
|
|
225
|
+
}
|
|
226
|
+
]
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
"name": "task_sessions",
|
|
230
|
+
"comment": "One agent execution attempt for an authorized task; record the human-initiated session before substantive work begins.",
|
|
231
|
+
"columns": [
|
|
232
|
+
{
|
|
233
|
+
"name": "session_id",
|
|
234
|
+
"type": "text",
|
|
235
|
+
"nullable": false,
|
|
236
|
+
"comment": "Stable identifier of the agent session executing the task."
|
|
237
|
+
},
|
|
238
|
+
{
|
|
239
|
+
"name": "task_id",
|
|
240
|
+
"type": "text/uuid",
|
|
241
|
+
"nullable": false,
|
|
242
|
+
"comment": "Authorized task referenced when the human initiated this session."
|
|
243
|
+
},
|
|
244
|
+
{
|
|
245
|
+
"name": "initiated_by",
|
|
246
|
+
"type": "text",
|
|
247
|
+
"nullable": false,
|
|
248
|
+
"comment": "Human actor identifier that initiated the agent session."
|
|
249
|
+
},
|
|
250
|
+
{
|
|
251
|
+
"name": "started_at",
|
|
252
|
+
"type": "text/datetime",
|
|
253
|
+
"nullable": false,
|
|
254
|
+
"comment": "UTC instant this execution attempt began."
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
"name": "ended_at",
|
|
258
|
+
"type": "text/datetime",
|
|
259
|
+
"nullable": true,
|
|
260
|
+
"comment": "UTC instant this attempt ended; null while active."
|
|
261
|
+
},
|
|
262
|
+
{
|
|
263
|
+
"name": "outcome",
|
|
264
|
+
"type": "text/enum",
|
|
265
|
+
"type_options": { "values": ["completed", "failed", "abandoned"] },
|
|
266
|
+
"nullable": true,
|
|
267
|
+
"comment": "Terminal attempt outcome; null while the session is active."
|
|
268
|
+
}
|
|
269
|
+
],
|
|
270
|
+
"primary_key": ["session_id"],
|
|
271
|
+
"foreign_keys": [
|
|
272
|
+
{
|
|
273
|
+
"columns": ["task_id"],
|
|
274
|
+
"references": { "table": "tasks", "columns": ["id"] },
|
|
275
|
+
"on_delete": "RESTRICT"
|
|
276
|
+
}
|
|
277
|
+
],
|
|
278
|
+
"indexes": [
|
|
279
|
+
{
|
|
280
|
+
"name": "task_sessions_by_task",
|
|
281
|
+
"columns": [{ "column": "task_id" }, { "column": "started_at", "direction": "DESC" }],
|
|
282
|
+
"comment": "Lists execution attempts for a task in reverse chronological order."
|
|
283
|
+
}
|
|
284
|
+
]
|
|
285
|
+
}
|
|
286
|
+
]
|
|
287
|
+
}
|
package/readme.md
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
Coming soon...
|