agent-office 0.6.23 → 0.7.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/AGENTS.md +0 -0
- package/CONTEXT.md +77 -0
- package/README.md +87 -6
- package/dist/commands/cron-requests.d.ts +5 -5
- package/dist/commands/cron-requests.d.ts.map +1 -1
- package/dist/commands/cron-requests.js +9 -14
- package/dist/commands/cron-requests.js.map +1 -1
- package/dist/commands/crons.d.ts +9 -9
- package/dist/commands/crons.d.ts.map +1 -1
- package/dist/commands/crons.js +17 -27
- package/dist/commands/crons.js.map +1 -1
- package/dist/commands/messages.d.ts +6 -6
- package/dist/commands/messages.d.ts.map +1 -1
- package/dist/commands/messages.js +11 -18
- package/dist/commands/messages.js.map +1 -1
- package/dist/commands/sessions.d.ts +5 -5
- package/dist/commands/sessions.d.ts.map +1 -1
- package/dist/commands/sessions.js +10 -16
- package/dist/commands/sessions.js.map +1 -1
- package/dist/commands/task-columns.d.ts +1 -1
- package/dist/commands/task-columns.d.ts.map +1 -1
- package/dist/commands/task-columns.js +2 -4
- package/dist/commands/task-columns.js.map +1 -1
- package/dist/commands/tasks.d.ts +10 -10
- package/dist/commands/tasks.d.ts.map +1 -1
- package/dist/commands/tasks.js +20 -31
- package/dist/commands/tasks.js.map +1 -1
- package/dist/contracts/commands.d.ts +38 -0
- package/dist/contracts/commands.d.ts.map +1 -0
- package/dist/contracts/commands.js +469 -0
- package/dist/contracts/commands.js.map +1 -0
- package/dist/index.js +1062 -160
- package/dist/index.js.map +1 -1
- package/dist/lib/input.d.ts +7 -0
- package/dist/lib/input.d.ts.map +1 -0
- package/dist/lib/input.js +94 -0
- package/dist/lib/input.js.map +1 -0
- package/dist/lib/mcp.d.ts +36 -0
- package/dist/lib/mcp.d.ts.map +1 -0
- package/dist/lib/mcp.js +150 -0
- package/dist/lib/mcp.js.map +1 -0
- package/dist/lib/output.d.ts +9 -1
- package/dist/lib/output.d.ts.map +1 -1
- package/dist/lib/output.js +59 -4
- package/dist/lib/output.js.map +1 -1
- package/dist/lib/schema.d.ts +35 -0
- package/dist/lib/schema.d.ts.map +1 -0
- package/dist/lib/schema.js +441 -0
- package/dist/lib/schema.js.map +1 -0
- package/dist/lib/validation.d.ts +15 -0
- package/dist/lib/validation.d.ts.map +1 -0
- package/dist/lib/validation.js +140 -0
- package/dist/lib/validation.js.map +1 -0
- package/package.json +5 -2
- package/skills/SKILL-create-coworker.md +51 -0
- package/skills/SKILL-cron-jobs.md +106 -0
- package/skills/SKILL-send-message.md +56 -0
- package/skills/SKILL-task-management.md +86 -0
|
@@ -0,0 +1,441 @@
|
|
|
1
|
+
export const commandSchemas = [
|
|
2
|
+
// Coworker Management
|
|
3
|
+
{
|
|
4
|
+
name: 'list-coworkers',
|
|
5
|
+
description: 'List all coworkers (sessions)',
|
|
6
|
+
examples: ['agent-office --sqlite ./data.db list-coworkers --output json'],
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
name: 'create-coworker',
|
|
10
|
+
description: 'Create a new coworker (session)',
|
|
11
|
+
options: [
|
|
12
|
+
{
|
|
13
|
+
flags: '--json <json>',
|
|
14
|
+
description: 'Full JSON payload with name and coworkerType fields (required)',
|
|
15
|
+
required: true,
|
|
16
|
+
},
|
|
17
|
+
],
|
|
18
|
+
examples: [
|
|
19
|
+
'agent-office --sqlite ./data.db create-coworker --json \'{\"name\": \"Alice\", \"coworkerType\": \"developer\"}\'',
|
|
20
|
+
],
|
|
21
|
+
mutating: true,
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
name: 'delete-coworker',
|
|
25
|
+
description: 'Delete a coworker (session) and all their data',
|
|
26
|
+
options: [{ flags: '--json <json>', description: 'Full JSON payload with name field (required)', required: true }],
|
|
27
|
+
examples: ['agent-office --sqlite ./data.db delete-coworker --json \'{\"name\": \"Alice\"}\' --dry-run'],
|
|
28
|
+
mutating: true,
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
name: 'update-coworker',
|
|
32
|
+
description: "Update a coworker's information (status, description, philosophy, visual description)",
|
|
33
|
+
options: [
|
|
34
|
+
{
|
|
35
|
+
flags: '--json <json>',
|
|
36
|
+
description: 'Full JSON payload with name (required) and optional fields',
|
|
37
|
+
required: true,
|
|
38
|
+
},
|
|
39
|
+
],
|
|
40
|
+
examples: [
|
|
41
|
+
'agent-office --sqlite ./data.db update-coworker --json \'{\"name\": \"Alice\", \"status\": \"busy\", \"description\": \"Senior dev\"}\'',
|
|
42
|
+
],
|
|
43
|
+
mutating: true,
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
name: 'get-coworker-info',
|
|
47
|
+
description: 'Get coworker information (name, description, philosophy)',
|
|
48
|
+
options: [{ flags: '--json <json>', description: 'Full JSON payload with name field (required)', required: true }],
|
|
49
|
+
examples: [
|
|
50
|
+
'agent-office --sqlite ./data.db get-coworker-info --json \'{\"name\": \"Alice\"}\' --fields name,status',
|
|
51
|
+
],
|
|
52
|
+
},
|
|
53
|
+
// Message Commands
|
|
54
|
+
{
|
|
55
|
+
name: 'send-message',
|
|
56
|
+
description: 'Send a message to one or more recipients',
|
|
57
|
+
options: [
|
|
58
|
+
{
|
|
59
|
+
flags: '--json <json>',
|
|
60
|
+
description: 'Full JSON payload with from, to (array), and body fields (required)',
|
|
61
|
+
required: true,
|
|
62
|
+
},
|
|
63
|
+
],
|
|
64
|
+
examples: [
|
|
65
|
+
'agent-office --sqlite ./data.db send-message --json \'{\"from\": \"Alice\", \"to\": [\"Bob\"], \"body\": \"Hello!\"}\'',
|
|
66
|
+
],
|
|
67
|
+
mutating: true,
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
name: 'check-unread-messages',
|
|
71
|
+
description: 'Check if there are unread messages for a coworker',
|
|
72
|
+
options: [
|
|
73
|
+
{ flags: '--json <json>', description: 'Full JSON payload with coworker field (required)', required: true },
|
|
74
|
+
],
|
|
75
|
+
examples: [
|
|
76
|
+
'agent-office --sqlite ./data.db check-unread-messages --json \'{\"coworker\": \"Bob\"}\' --output json',
|
|
77
|
+
],
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
name: 'get-unread-messages',
|
|
81
|
+
description: 'Get all unread messages for a coworker and mark as read',
|
|
82
|
+
options: [
|
|
83
|
+
{ flags: '--json <json>', description: 'Full JSON payload with coworker field (required)', required: true },
|
|
84
|
+
],
|
|
85
|
+
examples: [
|
|
86
|
+
'agent-office --sqlite ./data.db get-unread-messages --json \'{\"coworker\": \"Bob\"}\' --fields id,from_name,body',
|
|
87
|
+
],
|
|
88
|
+
mutating: true,
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
name: 'list-messages-between',
|
|
92
|
+
description: 'Show all messages between two coworkers',
|
|
93
|
+
options: [
|
|
94
|
+
{
|
|
95
|
+
flags: '--json <json>',
|
|
96
|
+
description: 'Full JSON payload with coworker1, coworker2 (required) and optional start/end ISO timestamps',
|
|
97
|
+
required: true,
|
|
98
|
+
},
|
|
99
|
+
],
|
|
100
|
+
examples: [
|
|
101
|
+
'agent-office --sqlite ./data.db list-messages-between --json \'{\"coworker1\": \"Alice\", \"coworker2\": \"Bob\"}\'',
|
|
102
|
+
],
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
name: 'list-messages-to-notify',
|
|
106
|
+
description: 'List unread messages older than specified hours that have not been notified',
|
|
107
|
+
options: [
|
|
108
|
+
{
|
|
109
|
+
flags: '--json <json>',
|
|
110
|
+
description: 'Full JSON payload with coworker and hours fields (required)',
|
|
111
|
+
required: true,
|
|
112
|
+
},
|
|
113
|
+
],
|
|
114
|
+
examples: [
|
|
115
|
+
'agent-office --sqlite ./data.db list-messages-to-notify --json \'{\"coworker\": \"Bob\", \"hours\": 24}\'',
|
|
116
|
+
],
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
name: 'mark-messages-as-notified',
|
|
120
|
+
description: 'Mark specific messages as notified',
|
|
121
|
+
options: [{ flags: '--json <json>', description: 'Full JSON payload with ids array (required)', required: true }],
|
|
122
|
+
examples: ['agent-office --sqlite ./data.db mark-messages-as-notified --json \'{\"ids\": [1, 2, 3]}\' --dry-run'],
|
|
123
|
+
mutating: true,
|
|
124
|
+
},
|
|
125
|
+
// Cron commands
|
|
126
|
+
{
|
|
127
|
+
name: 'list-crons',
|
|
128
|
+
description: 'List all cron jobs for a specific coworker',
|
|
129
|
+
options: [
|
|
130
|
+
{ flags: '--json <json>', description: 'Full JSON payload with coworker field (required)', required: true },
|
|
131
|
+
],
|
|
132
|
+
examples: [
|
|
133
|
+
'agent-office --sqlite ./data.db list-crons --json \'{\"coworker\": \"Alice\"}\' --fields name,schedule',
|
|
134
|
+
],
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
name: 'delete-cron',
|
|
138
|
+
description: 'Delete a cron job',
|
|
139
|
+
options: [{ flags: '--json <json>', description: 'Full JSON payload with id field (required)', required: true }],
|
|
140
|
+
examples: ['agent-office --sqlite ./data.db delete-cron --json \'{\"id\": 1}\' --dry-run'],
|
|
141
|
+
mutating: true,
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
name: 'enable-cron',
|
|
145
|
+
description: 'Enable a cron job',
|
|
146
|
+
options: [{ flags: '--json <json>', description: 'Full JSON payload with id field (required)', required: true }],
|
|
147
|
+
examples: ['agent-office --sqlite ./data.db enable-cron --json \'{\"id\": 1}\' --dry-run'],
|
|
148
|
+
mutating: true,
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
name: 'disable-cron',
|
|
152
|
+
description: 'Disable a cron job',
|
|
153
|
+
options: [{ flags: '--json <json>', description: 'Full JSON payload with id field (required)', required: true }],
|
|
154
|
+
examples: ['agent-office --sqlite ./data.db disable-cron --json \'{\"id\": 1}\' --dry-run'],
|
|
155
|
+
mutating: true,
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
name: 'cron-history',
|
|
159
|
+
description: 'Get cron job execution history',
|
|
160
|
+
options: [
|
|
161
|
+
{
|
|
162
|
+
flags: '--json <json>',
|
|
163
|
+
description: 'Full JSON payload with id (required) and optional limit fields',
|
|
164
|
+
required: true,
|
|
165
|
+
},
|
|
166
|
+
],
|
|
167
|
+
examples: ['agent-office --sqlite ./data.db cron-history --json \'{\"id\": 1, \"limit\": 10}\''],
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
name: 'check-cron-jobs',
|
|
171
|
+
description: 'Check if there are any active cron jobs for a coworker this minute',
|
|
172
|
+
options: [
|
|
173
|
+
{ flags: '--json <json>', description: 'Full JSON payload with coworker field (required)', required: true },
|
|
174
|
+
],
|
|
175
|
+
examples: ['agent-office --sqlite ./data.db check-cron-jobs --json \'{\"coworker\": \"Alice\"}\''],
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
name: 'list-active-cron-actions',
|
|
179
|
+
description: 'List all active cron actions for a specific coworker that should run this minute (for AI execution)',
|
|
180
|
+
options: [
|
|
181
|
+
{ flags: '--json <json>', description: 'Full JSON payload with coworker field (required)', required: true },
|
|
182
|
+
],
|
|
183
|
+
examples: ['agent-office --sqlite ./data.db list-active-cron-actions --json \'{\"coworker\": \"Alice\"}\''],
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
name: 'create-cron',
|
|
187
|
+
description: 'Create a new cron job directly',
|
|
188
|
+
options: [
|
|
189
|
+
{
|
|
190
|
+
flags: '--json <json>',
|
|
191
|
+
description: 'Full JSON payload with name, coworker, schedule, task, notify, timezone (all required)',
|
|
192
|
+
required: true,
|
|
193
|
+
},
|
|
194
|
+
],
|
|
195
|
+
examples: [
|
|
196
|
+
'agent-office --sqlite ./data.db create-cron --json \'{\"name\": \"Daily Report\", \"coworker\": \"Alice\", \"schedule\": \"0 9 * * *\", \"task\": \"Send report\", \"notify\": \"Bob\", \"timezone\": \"America/New_York\"}\' --dry-run',
|
|
197
|
+
],
|
|
198
|
+
mutating: true,
|
|
199
|
+
},
|
|
200
|
+
// Cron request management commands
|
|
201
|
+
{
|
|
202
|
+
name: 'list-cron-requests',
|
|
203
|
+
description: 'List all cron job requests',
|
|
204
|
+
examples: ['agent-office --sqlite ./data.db list-cron-requests --output json'],
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
name: 'request-cron',
|
|
208
|
+
description: 'Create a new cron job request (requires approval)',
|
|
209
|
+
options: [
|
|
210
|
+
{
|
|
211
|
+
flags: '--json <json>',
|
|
212
|
+
description: 'Full JSON payload with name, coworker, schedule, task, notify, timezone (all required)',
|
|
213
|
+
required: true,
|
|
214
|
+
},
|
|
215
|
+
],
|
|
216
|
+
examples: [
|
|
217
|
+
'agent-office --sqlite ./data.db request-cron --json \'{\"name\": \"Weekly Report\", \"coworker\": \"Alice\", \"schedule\": \"0 9 * * 1\", \"task\": \"Generate report\", \"notify\": \"Bob\", \"timezone\": \"America/New_York\"}\'',
|
|
218
|
+
],
|
|
219
|
+
mutating: true,
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
name: 'get-cron-request',
|
|
223
|
+
description: 'Get details of a cron job request',
|
|
224
|
+
options: [{ flags: '--json <json>', description: 'Full JSON payload with id field (required)', required: true }],
|
|
225
|
+
examples: ['agent-office --sqlite ./data.db get-cron-request --json \'{\"id\": 1}\''],
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
name: 'approve-cron-request',
|
|
229
|
+
description: 'Approve a pending cron job request',
|
|
230
|
+
options: [
|
|
231
|
+
{
|
|
232
|
+
flags: '--json <json>',
|
|
233
|
+
description: 'Full JSON payload with id, reviewer (required) and optional notes fields',
|
|
234
|
+
required: true,
|
|
235
|
+
},
|
|
236
|
+
],
|
|
237
|
+
examples: [
|
|
238
|
+
'agent-office --sqlite ./data.db approve-cron-request --json \'{\"id\": 1, \"reviewer\": \"Manager\", \"notes\": \"Approved\"}\' --dry-run',
|
|
239
|
+
],
|
|
240
|
+
mutating: true,
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
name: 'reject-cron-request',
|
|
244
|
+
description: 'Reject a pending cron job request',
|
|
245
|
+
options: [
|
|
246
|
+
{
|
|
247
|
+
flags: '--json <json>',
|
|
248
|
+
description: 'Full JSON payload with id, reviewer (required) and optional notes fields',
|
|
249
|
+
required: true,
|
|
250
|
+
},
|
|
251
|
+
],
|
|
252
|
+
examples: [
|
|
253
|
+
'agent-office --sqlite ./data.db reject-cron-request --json \'{\"id\": 1, \"reviewer\": \"Manager\", \"notes\": \"Schedule conflicts\"}\' --dry-run',
|
|
254
|
+
],
|
|
255
|
+
mutating: true,
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
name: 'delete-cron-request',
|
|
259
|
+
description: 'Delete a cron job request',
|
|
260
|
+
options: [{ flags: '--json <json>', description: 'Full JSON payload with id field (required)', required: true }],
|
|
261
|
+
examples: ['agent-office --sqlite ./data.db delete-cron-request --json \'{\"id\": 1}\' --dry-run'],
|
|
262
|
+
mutating: true,
|
|
263
|
+
},
|
|
264
|
+
// Task board commands
|
|
265
|
+
{
|
|
266
|
+
name: 'add-task',
|
|
267
|
+
description: 'Create a new task',
|
|
268
|
+
options: [
|
|
269
|
+
{
|
|
270
|
+
flags: '--json <json>',
|
|
271
|
+
description: 'Full JSON payload with title, column (required) and optional description, assignee, dependencies fields',
|
|
272
|
+
required: true,
|
|
273
|
+
},
|
|
274
|
+
],
|
|
275
|
+
examples: [
|
|
276
|
+
'agent-office --sqlite ./data.db add-task --json \'{\"title\": \"Implement auth\", \"column\": \"idea\", \"assignee\": \"Alice\"}\' --dry-run',
|
|
277
|
+
],
|
|
278
|
+
mutating: true,
|
|
279
|
+
},
|
|
280
|
+
{
|
|
281
|
+
name: 'list-tasks',
|
|
282
|
+
description: 'List all tasks',
|
|
283
|
+
options: [
|
|
284
|
+
{
|
|
285
|
+
flags: '--json <json>',
|
|
286
|
+
description: 'Optional JSON payload with assignee, column, search filter fields',
|
|
287
|
+
required: false,
|
|
288
|
+
},
|
|
289
|
+
],
|
|
290
|
+
examples: [
|
|
291
|
+
'agent-office --sqlite ./data.db list-tasks --json \'{\"assignee\": \"Alice\"}\' --fields id,title,column',
|
|
292
|
+
],
|
|
293
|
+
},
|
|
294
|
+
{
|
|
295
|
+
name: 'get-task',
|
|
296
|
+
description: 'Get a task by ID',
|
|
297
|
+
options: [{ flags: '--json <json>', description: 'Full JSON payload with id field (required)', required: true }],
|
|
298
|
+
examples: ['agent-office --sqlite ./data.db get-task --json \'{\"id\": 1}\''],
|
|
299
|
+
},
|
|
300
|
+
{
|
|
301
|
+
name: 'update-task',
|
|
302
|
+
description: 'Update a task',
|
|
303
|
+
options: [
|
|
304
|
+
{
|
|
305
|
+
flags: '--json <json>',
|
|
306
|
+
description: 'Full JSON payload with id (required) and optional title, description, assignee, column, dependencies fields',
|
|
307
|
+
required: true,
|
|
308
|
+
},
|
|
309
|
+
],
|
|
310
|
+
examples: [
|
|
311
|
+
'agent-office --sqlite ./data.db update-task --json \'{\"id\": 1, \"title\": \"Updated title\"}\' --dry-run',
|
|
312
|
+
],
|
|
313
|
+
mutating: true,
|
|
314
|
+
},
|
|
315
|
+
{
|
|
316
|
+
name: 'delete-task',
|
|
317
|
+
description: 'Delete a task',
|
|
318
|
+
options: [{ flags: '--json <json>', description: 'Full JSON payload with id field (required)', required: true }],
|
|
319
|
+
examples: ['agent-office --sqlite ./data.db delete-task --json \'{\"id\": 1}\' --dry-run'],
|
|
320
|
+
mutating: true,
|
|
321
|
+
},
|
|
322
|
+
{
|
|
323
|
+
name: 'assign-task',
|
|
324
|
+
description: 'Assign a task to someone',
|
|
325
|
+
options: [
|
|
326
|
+
{
|
|
327
|
+
flags: '--json <json>',
|
|
328
|
+
description: 'Full JSON payload with id and assignee fields (required)',
|
|
329
|
+
required: true,
|
|
330
|
+
},
|
|
331
|
+
],
|
|
332
|
+
examples: ['agent-office --sqlite ./data.db assign-task --json \'{\"id\": 1, \"assignee\": \"Bob\"}\' --dry-run'],
|
|
333
|
+
mutating: true,
|
|
334
|
+
},
|
|
335
|
+
{
|
|
336
|
+
name: 'unassign-task',
|
|
337
|
+
description: 'Remove assignment from a task',
|
|
338
|
+
options: [{ flags: '--json <json>', description: 'Full JSON payload with id field (required)', required: true }],
|
|
339
|
+
examples: ['agent-office --sqlite ./data.db unassign-task --json \'{\"id\": 1}\' --dry-run'],
|
|
340
|
+
mutating: true,
|
|
341
|
+
},
|
|
342
|
+
{
|
|
343
|
+
name: 'move-task',
|
|
344
|
+
description: 'Move a task to a different column',
|
|
345
|
+
options: [
|
|
346
|
+
{ flags: '--json <json>', description: 'Full JSON payload with id and column fields (required)', required: true },
|
|
347
|
+
],
|
|
348
|
+
examples: [
|
|
349
|
+
'agent-office --sqlite ./data.db move-task --json \'{\"id\": 1, \"column\": \"working on\"}\' --dry-run',
|
|
350
|
+
],
|
|
351
|
+
mutating: true,
|
|
352
|
+
},
|
|
353
|
+
{
|
|
354
|
+
name: 'task-stats',
|
|
355
|
+
description: 'Show task statistics by column',
|
|
356
|
+
examples: ['agent-office --sqlite ./data.db task-stats --output json'],
|
|
357
|
+
},
|
|
358
|
+
{
|
|
359
|
+
name: 'task-history',
|
|
360
|
+
description: 'Show column transition history for a task with durations',
|
|
361
|
+
options: [{ flags: '--json <json>', description: 'Full JSON payload with id field (required)', required: true }],
|
|
362
|
+
examples: ['agent-office --sqlite ./data.db task-history --json \'{\"id\": 1}\''],
|
|
363
|
+
},
|
|
364
|
+
{
|
|
365
|
+
name: 'list-task-columns',
|
|
366
|
+
description: 'List all valid task board columns',
|
|
367
|
+
examples: ['agent-office --sqlite ./data.db list-task-columns'],
|
|
368
|
+
},
|
|
369
|
+
// Skill and context commands
|
|
370
|
+
{
|
|
371
|
+
name: 'list-skills',
|
|
372
|
+
description: 'List available agent skills',
|
|
373
|
+
examples: ['agent-office list-skills --output json'],
|
|
374
|
+
},
|
|
375
|
+
{
|
|
376
|
+
name: 'get-skill',
|
|
377
|
+
description: 'Get the content of a specific agent skill',
|
|
378
|
+
options: [{ flags: '--json <json>', description: 'Full JSON payload with name field (required)', required: true }],
|
|
379
|
+
examples: ['agent-office get-skill --json \'{\"name\": \"create-coworker\"}\''],
|
|
380
|
+
},
|
|
381
|
+
{
|
|
382
|
+
name: 'context',
|
|
383
|
+
description: 'Show context window discipline guidelines',
|
|
384
|
+
examples: ['agent-office context'],
|
|
385
|
+
},
|
|
386
|
+
{
|
|
387
|
+
name: 'agents',
|
|
388
|
+
description: 'Show agent security guidelines',
|
|
389
|
+
examples: ['agent-office agents'],
|
|
390
|
+
},
|
|
391
|
+
{
|
|
392
|
+
name: 'schema',
|
|
393
|
+
description: 'Show schema for a specific command or all commands',
|
|
394
|
+
arguments: [
|
|
395
|
+
{ name: '[command]', description: 'Command name to show schema for (omit for all commands)', required: false },
|
|
396
|
+
],
|
|
397
|
+
examples: ['agent-office schema', 'agent-office schema create-coworker'],
|
|
398
|
+
},
|
|
399
|
+
{
|
|
400
|
+
name: 'describe',
|
|
401
|
+
description: 'Describe available commands (alias for schema)',
|
|
402
|
+
arguments: [
|
|
403
|
+
{ name: '[command]', description: 'Command name to describe (omit for all commands)', required: false },
|
|
404
|
+
],
|
|
405
|
+
examples: ['agent-office describe', 'agent-office describe create-coworker'],
|
|
406
|
+
},
|
|
407
|
+
{
|
|
408
|
+
name: 'mcp',
|
|
409
|
+
description: 'Run as an MCP (Model Context Protocol) server',
|
|
410
|
+
examples: ['agent-office mcp'],
|
|
411
|
+
},
|
|
412
|
+
];
|
|
413
|
+
export function getSchema(commandName) {
|
|
414
|
+
if (!commandName) {
|
|
415
|
+
return commandSchemas;
|
|
416
|
+
}
|
|
417
|
+
return commandSchemas.find(cmd => cmd.name === commandName) || null;
|
|
418
|
+
}
|
|
419
|
+
export function getMutatingCommands() {
|
|
420
|
+
return commandSchemas.filter(cmd => cmd.mutating).map(cmd => cmd.name);
|
|
421
|
+
}
|
|
422
|
+
export function validateCommandParams(commandName, params) {
|
|
423
|
+
const schema = getSchema(commandName);
|
|
424
|
+
if (!schema || Array.isArray(schema)) {
|
|
425
|
+
return { valid: false, errors: [`Unknown command: ${commandName}`] };
|
|
426
|
+
}
|
|
427
|
+
const errors = [];
|
|
428
|
+
// Check required options
|
|
429
|
+
if (schema.options) {
|
|
430
|
+
for (const option of schema.options) {
|
|
431
|
+
if (option.required) {
|
|
432
|
+
const flagName = option.flags.split(',')[0].trim().replace(/^-+/, '');
|
|
433
|
+
if (!(flagName in params) || params[flagName] === undefined || params[flagName] === null) {
|
|
434
|
+
errors.push(`Missing required option: ${option.flags}`);
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
return { valid: errors.length === 0, errors };
|
|
440
|
+
}
|
|
441
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/lib/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare function assertSafeText(value: unknown, label: string, allowEmpty?: boolean): string;
|
|
2
|
+
export declare function validateResourceName(value: unknown, label: string): string;
|
|
3
|
+
export declare function validateSafePath(value: unknown, label: string): string;
|
|
4
|
+
export declare function validateCoworkerName(name: unknown): string;
|
|
5
|
+
export declare function validateTaskColumn(column: unknown): string;
|
|
6
|
+
export declare function validateCronSchedule(schedule: unknown): string;
|
|
7
|
+
export declare function validateTimezone(value: unknown): string;
|
|
8
|
+
export declare function validatePositiveInteger(value: unknown, label: string): number;
|
|
9
|
+
export declare function validateNonNegativeInteger(value: unknown, label: string): number;
|
|
10
|
+
export declare function validateIsoDateTime(value: unknown, label: string): Date;
|
|
11
|
+
export declare function validateOptionalIsoDateTime(value: unknown, label: string): Date | undefined;
|
|
12
|
+
export declare function validateStringArray(values: unknown, label: string): string[];
|
|
13
|
+
export declare function validatePositiveIntegerArray(values: unknown, label: string): number[];
|
|
14
|
+
export declare function validateFieldsParam(fields: unknown): string[] | undefined;
|
|
15
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/lib/validation.ts"],"names":[],"mappings":"AAKA,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,UAAQ,GAAG,MAAM,CAWxF;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAS1E;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAwBtE;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAE1D;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAE1D;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,CAM9D;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEvD;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAM7E;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAMhF;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CASvE;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAK3F;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAU5E;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAcrF;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,EAAE,GAAG,SAAS,CAsBzE"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
const DISALLOWED_RESOURCE_CHARS = /[\\/?#%]/;
|
|
2
|
+
const CONTROL_CHAR_RE = /[\u0000-\u001F\u007F]/;
|
|
3
|
+
const PATH_TRAVERSAL_RE = /\.\.[/\\]|\.\.\Z/;
|
|
4
|
+
const DOUBLE_ENCODED_RE = /%2e%2e|%252e%252e/i;
|
|
5
|
+
export function assertSafeText(value, label, allowEmpty = false) {
|
|
6
|
+
if (typeof value !== 'string') {
|
|
7
|
+
throw new Error(`${label} must be a string`);
|
|
8
|
+
}
|
|
9
|
+
if (!allowEmpty && value.trim().length === 0) {
|
|
10
|
+
throw new Error(`${label} must not be empty`);
|
|
11
|
+
}
|
|
12
|
+
if (CONTROL_CHAR_RE.test(value)) {
|
|
13
|
+
throw new Error(`${label} contains control characters`);
|
|
14
|
+
}
|
|
15
|
+
return value;
|
|
16
|
+
}
|
|
17
|
+
export function validateResourceName(value, label) {
|
|
18
|
+
const text = assertSafeText(value, label);
|
|
19
|
+
if (DISALLOWED_RESOURCE_CHARS.test(text)) {
|
|
20
|
+
throw new Error(`${label} contains unsupported characters`);
|
|
21
|
+
}
|
|
22
|
+
if (DOUBLE_ENCODED_RE.test(text)) {
|
|
23
|
+
throw new Error(`${label} contains suspicious traversal sequence`);
|
|
24
|
+
}
|
|
25
|
+
return text;
|
|
26
|
+
}
|
|
27
|
+
export function validateSafePath(value, label) {
|
|
28
|
+
const text = assertSafeText(value, label);
|
|
29
|
+
// Check for path traversal attempts
|
|
30
|
+
if (PATH_TRAVERSAL_RE.test(text)) {
|
|
31
|
+
throw new Error(`${label} contains path traversal attempt`);
|
|
32
|
+
}
|
|
33
|
+
// Check for absolute paths
|
|
34
|
+
if (text.startsWith('/') || (text.length > 1 && text[1] === ':')) {
|
|
35
|
+
throw new Error(`${label} must be a relative path`);
|
|
36
|
+
}
|
|
37
|
+
// Check for double-encoded sequences
|
|
38
|
+
if (DOUBLE_ENCODED_RE.test(text)) {
|
|
39
|
+
throw new Error(`${label} contains suspicious double-encoded sequence`);
|
|
40
|
+
}
|
|
41
|
+
// Check for URL-encoded special chars
|
|
42
|
+
if (/%2[fF]|%5[cC]|%2[eE]/i.test(text)) {
|
|
43
|
+
throw new Error(`${label} contains URL-encoded path characters`);
|
|
44
|
+
}
|
|
45
|
+
return text;
|
|
46
|
+
}
|
|
47
|
+
export function validateCoworkerName(name) {
|
|
48
|
+
return validateResourceName(name, 'Coworker name');
|
|
49
|
+
}
|
|
50
|
+
export function validateTaskColumn(column) {
|
|
51
|
+
return assertSafeText(column, 'Task column');
|
|
52
|
+
}
|
|
53
|
+
export function validateCronSchedule(schedule) {
|
|
54
|
+
const text = validateResourceName(schedule, 'Cron schedule');
|
|
55
|
+
if (text.length === 0) {
|
|
56
|
+
throw new Error('Cron schedule must not be empty');
|
|
57
|
+
}
|
|
58
|
+
return text;
|
|
59
|
+
}
|
|
60
|
+
export function validateTimezone(value) {
|
|
61
|
+
return assertSafeText(value, 'Timezone');
|
|
62
|
+
}
|
|
63
|
+
export function validatePositiveInteger(value, label) {
|
|
64
|
+
const parsed = Number(value);
|
|
65
|
+
if (!Number.isInteger(parsed) || parsed <= 0) {
|
|
66
|
+
throw new Error(`${label} must be a positive integer`);
|
|
67
|
+
}
|
|
68
|
+
return parsed;
|
|
69
|
+
}
|
|
70
|
+
export function validateNonNegativeInteger(value, label) {
|
|
71
|
+
const parsed = Number(value);
|
|
72
|
+
if (!Number.isFinite(parsed) || parsed < 0 || !Number.isInteger(parsed)) {
|
|
73
|
+
throw new Error(`${label} must be a non-negative integer`);
|
|
74
|
+
}
|
|
75
|
+
return parsed;
|
|
76
|
+
}
|
|
77
|
+
export function validateIsoDateTime(value, label) {
|
|
78
|
+
if (typeof value !== 'string' || value.trim().length === 0) {
|
|
79
|
+
throw new Error(`${label} must be an ISO 8601 timestamp`);
|
|
80
|
+
}
|
|
81
|
+
const date = new Date(value);
|
|
82
|
+
if (Number.isNaN(date.getTime())) {
|
|
83
|
+
throw new Error(`${label} must be an ISO 8601 timestamp`);
|
|
84
|
+
}
|
|
85
|
+
return date;
|
|
86
|
+
}
|
|
87
|
+
export function validateOptionalIsoDateTime(value, label) {
|
|
88
|
+
if (value === undefined || value === null) {
|
|
89
|
+
return undefined;
|
|
90
|
+
}
|
|
91
|
+
return validateIsoDateTime(value, label);
|
|
92
|
+
}
|
|
93
|
+
export function validateStringArray(values, label) {
|
|
94
|
+
if (!Array.isArray(values)) {
|
|
95
|
+
throw new Error(`${label} must be an array`);
|
|
96
|
+
}
|
|
97
|
+
return values.map((value, index) => {
|
|
98
|
+
if (typeof value !== 'string') {
|
|
99
|
+
throw new Error(`${label}[${index}] must be a string`);
|
|
100
|
+
}
|
|
101
|
+
return assertSafeText(value, `${label}[${index}]`);
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
export function validatePositiveIntegerArray(values, label) {
|
|
105
|
+
if (!Array.isArray(values)) {
|
|
106
|
+
throw new Error(`${label} must be an array`);
|
|
107
|
+
}
|
|
108
|
+
return values.map((value, index) => {
|
|
109
|
+
try {
|
|
110
|
+
return validatePositiveInteger(value, `${label}[${index}]`);
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
if (error instanceof Error) {
|
|
114
|
+
throw error;
|
|
115
|
+
}
|
|
116
|
+
throw new Error(`${label}[${index}] must be a positive integer`);
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
export function validateFieldsParam(fields) {
|
|
121
|
+
if (fields === undefined || fields === null) {
|
|
122
|
+
return undefined;
|
|
123
|
+
}
|
|
124
|
+
if (typeof fields === 'string') {
|
|
125
|
+
return fields
|
|
126
|
+
.split(',')
|
|
127
|
+
.map(f => f.trim())
|
|
128
|
+
.filter(f => f.length > 0);
|
|
129
|
+
}
|
|
130
|
+
if (Array.isArray(fields)) {
|
|
131
|
+
return fields.map((f, i) => {
|
|
132
|
+
if (typeof f !== 'string') {
|
|
133
|
+
throw new Error(`fields[${i}] must be a string`);
|
|
134
|
+
}
|
|
135
|
+
return assertSafeText(f, `fields[${i}]`);
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
throw new Error('fields must be a comma-separated string or array of strings');
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/lib/validation.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-office",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"description": "A multi-agent office management system CLI",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -35,7 +35,10 @@
|
|
|
35
35
|
"license": "MIT",
|
|
36
36
|
"files": [
|
|
37
37
|
"dist",
|
|
38
|
-
"
|
|
38
|
+
"skills",
|
|
39
|
+
"README.md",
|
|
40
|
+
"CONTEXT.md",
|
|
41
|
+
"AGENTS.md"
|
|
39
42
|
],
|
|
40
43
|
"dependencies": {
|
|
41
44
|
"@toon-format/toon": "^2.1.0",
|