@opencomputer/cli 0.3.9 → 0.3.10
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 +15 -1
- package/dist/commands.js +29 -19
- package/dist/commands.js.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/local.d.ts +5 -0
- package/dist/local.js +75 -10
- package/dist/local.js.map +1 -1
- package/dist/local.test.d.ts +1 -0
- package/dist/local.test.js +58 -0
- package/dist/local.test.js.map +1 -0
- package/dist/project.d.ts +1 -0
- package/dist/project.js +361 -15
- package/dist/project.js.map +1 -1
- package/dist/project.test.js +43 -0
- package/dist/project.test.js.map +1 -1
- package/dist/tui.js +2 -2
- package/dist/tui.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import test from "node:test";
|
|
3
|
+
import { startGateway } from "./local.js";
|
|
4
|
+
test("the local gateway proxies connection list and calendar requests", async () => {
|
|
5
|
+
const originalFetch = globalThis.fetch;
|
|
6
|
+
const upstream = [];
|
|
7
|
+
globalThis.fetch = (async (input, init) => {
|
|
8
|
+
const url = String(input);
|
|
9
|
+
upstream.push({ url, init });
|
|
10
|
+
if (url.endsWith("/connections")) {
|
|
11
|
+
return Response.json({ connections: [] });
|
|
12
|
+
}
|
|
13
|
+
return Response.json({
|
|
14
|
+
service: "calendar",
|
|
15
|
+
status: "pending",
|
|
16
|
+
authorizationUrl: "https://connect.composio.dev/link/test",
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
const gateway = await startGateway({
|
|
20
|
+
apiUrl: "https://mo-oc-dev.com",
|
|
21
|
+
apiKey: "oc_test",
|
|
22
|
+
});
|
|
23
|
+
try {
|
|
24
|
+
const headers = {
|
|
25
|
+
authorization: `Bearer ${gateway.token}`,
|
|
26
|
+
"content-type": "application/json",
|
|
27
|
+
};
|
|
28
|
+
const listed = await originalFetch(`${gateway.url}/opencomputer/fetch`, {
|
|
29
|
+
method: "POST",
|
|
30
|
+
headers,
|
|
31
|
+
body: JSON.stringify({ action: "list" }),
|
|
32
|
+
});
|
|
33
|
+
assert.equal(listed.status, 200);
|
|
34
|
+
assert.equal(upstream[0]?.url, "https://mo-oc-dev.com/api/managed-agents/connections");
|
|
35
|
+
assert.equal(upstream[0]?.init?.method, "GET");
|
|
36
|
+
const requested = await originalFetch(`${gateway.url}/opencomputer/fetch`, {
|
|
37
|
+
method: "POST",
|
|
38
|
+
headers,
|
|
39
|
+
body: JSON.stringify({
|
|
40
|
+
action: "request",
|
|
41
|
+
service: "calendar",
|
|
42
|
+
label: "work-calendar",
|
|
43
|
+
}),
|
|
44
|
+
});
|
|
45
|
+
assert.equal(requested.status, 200);
|
|
46
|
+
assert.equal(upstream[1]?.url, "https://mo-oc-dev.com/api/managed-agents/connections/google/link");
|
|
47
|
+
assert.equal(upstream[1]?.init?.method, "POST");
|
|
48
|
+
assert.deepEqual(JSON.parse(String(upstream[1]?.init?.body)), {
|
|
49
|
+
service: "calendar",
|
|
50
|
+
label: "work-calendar",
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
finally {
|
|
54
|
+
await gateway.close();
|
|
55
|
+
globalThis.fetch = originalFetch;
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
//# sourceMappingURL=local.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local.test.js","sourceRoot":"","sources":["../src/local.test.ts"],"names":[],"mappings":"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"}
|
package/dist/project.d.ts
CHANGED
|
@@ -20,6 +20,7 @@ export declare function writeManifest(root: string, manifest: AgentManifest): Pr
|
|
|
20
20
|
export declare function readManifest(root: string): Promise<AgentManifest>;
|
|
21
21
|
export declare function findAgentRoot(startDirectory?: string): Promise<string | undefined>;
|
|
22
22
|
export declare function addGmailTools(root: string): Promise<string[]>;
|
|
23
|
+
export declare function addCalendarTools(root: string): Promise<string[]>;
|
|
23
24
|
export declare function addSlackChannel(root: string): Promise<string[]>;
|
|
24
25
|
export declare function initializeAgentProject(template: ManagedAgentTemplate, directory: string): Promise<{
|
|
25
26
|
root: string;
|
package/dist/project.js
CHANGED
|
@@ -59,9 +59,15 @@ async function prepareInitializationTarget(root, template) {
|
|
|
59
59
|
...(template.integrations.includes("Gmail")
|
|
60
60
|
? ["tools/gmail.ts", "connections/google.json"]
|
|
61
61
|
: []),
|
|
62
|
+
...(template.integrations.includes("Google Calendar")
|
|
63
|
+
? ["tools/calendar.ts", "connections/google.json"]
|
|
64
|
+
: []),
|
|
62
65
|
...(template.id === "email-triage"
|
|
63
66
|
? ["skills/triage-inbox/SKILL.md", "evals/triage-cases.md"]
|
|
64
67
|
: []),
|
|
68
|
+
...(template.id === "pto-calendar"
|
|
69
|
+
? ["skills/manage-pto/SKILL.md", "evals/pto-cases.md"]
|
|
70
|
+
: []),
|
|
65
71
|
];
|
|
66
72
|
const conflicts = [];
|
|
67
73
|
for (const path of reserved) {
|
|
@@ -168,6 +174,47 @@ For a later mailbox-changing request:
|
|
|
168
174
|
|
|
169
175
|
## Example requests
|
|
170
176
|
|
|
177
|
+
${template.suggestedPrompts.map((prompt) => `- ${prompt}`).join("\n")}
|
|
178
|
+
`;
|
|
179
|
+
}
|
|
180
|
+
if (template.id === "pto-calendar") {
|
|
181
|
+
return `# ${template.name}
|
|
182
|
+
|
|
183
|
+
You are a careful PTO calendar assistant.
|
|
184
|
+
|
|
185
|
+
${template.description}
|
|
186
|
+
|
|
187
|
+
## Default workflow
|
|
188
|
+
|
|
189
|
+
1. Use \`calendar_list\` to confirm which calendar and connection the user
|
|
190
|
+
intends to use. Do not assume a personal or shared calendar.
|
|
191
|
+
2. Convert the requested PTO dates into exact ISO dates in the user's
|
|
192
|
+
timezone. State the inclusive dates back to the user.
|
|
193
|
+
3. Use \`calendar_freebusy\` and \`calendar_events\` to identify conflicts and
|
|
194
|
+
relevant team events. Reading the calendar does not require approval.
|
|
195
|
+
4. Prepare the exact event title, inclusive PTO dates, target calendar,
|
|
196
|
+
availability, and description. Explain that Google Calendar stores the end
|
|
197
|
+
date for an all-day event as exclusive.
|
|
198
|
+
5. Ask for explicit confirmation of that exact event before calling
|
|
199
|
+
\`calendar_create_time_off\`.
|
|
200
|
+
6. Report only the event details returned by Google Calendar. Never claim an
|
|
201
|
+
event was created when the tool failed or returned no event ID.
|
|
202
|
+
|
|
203
|
+
## Safety and user control
|
|
204
|
+
|
|
205
|
+
- Never create, update, move, or delete a calendar event without fresh,
|
|
206
|
+
specific confirmation.
|
|
207
|
+
- Do not treat a request to check conflicts or prepare PTO as permission to
|
|
208
|
+
create the event.
|
|
209
|
+
- Default PTO events to "Out of office" and busy availability unless the user
|
|
210
|
+
asks for something else.
|
|
211
|
+
- Do not notify Slack automatically. Draft a notification for review when the
|
|
212
|
+
user asks; channels are connected after deployment in OpenComputer.
|
|
213
|
+
- If Calendar is not connected, request a \`calendar\` connection and return the
|
|
214
|
+
authorization link supplied by OpenComputer.
|
|
215
|
+
|
|
216
|
+
## Example requests
|
|
217
|
+
|
|
171
218
|
${template.suggestedPrompts.map((prompt) => `- ${prompt}`).join("\n")}
|
|
172
219
|
`;
|
|
173
220
|
}
|
|
@@ -347,6 +394,186 @@ export const send = tool({
|
|
|
347
394
|
});
|
|
348
395
|
`;
|
|
349
396
|
}
|
|
397
|
+
function calendarToolSource() {
|
|
398
|
+
return `import { tool } from "@opencode-ai/plugin";
|
|
399
|
+
|
|
400
|
+
async function calendar(input: {
|
|
401
|
+
path: string;
|
|
402
|
+
method?: string;
|
|
403
|
+
body?: unknown;
|
|
404
|
+
connection?: string;
|
|
405
|
+
}): Promise<unknown> {
|
|
406
|
+
const base = process.env.OPENCOMPUTER_CONNECTIONS_URL;
|
|
407
|
+
const token = process.env.OPENCOMPUTER_CONNECTION_TOKEN;
|
|
408
|
+
if (!base || !token) {
|
|
409
|
+
throw new Error("OpenComputer connections are unavailable");
|
|
410
|
+
}
|
|
411
|
+
const response = await fetch(\`\${base}/google/fetch\`, {
|
|
412
|
+
method: "POST",
|
|
413
|
+
headers: {
|
|
414
|
+
authorization: \`Bearer \${token}\`,
|
|
415
|
+
"content-type": "application/json",
|
|
416
|
+
},
|
|
417
|
+
body: JSON.stringify({
|
|
418
|
+
service: "calendar",
|
|
419
|
+
label: input.connection,
|
|
420
|
+
method: input.method,
|
|
421
|
+
path: input.path,
|
|
422
|
+
headers: input.body ? { "content-type": "application/json" } : undefined,
|
|
423
|
+
body: input.body ? JSON.stringify(input.body) : undefined,
|
|
424
|
+
}),
|
|
425
|
+
});
|
|
426
|
+
const result = await response.json() as {
|
|
427
|
+
status?: number;
|
|
428
|
+
body?: string;
|
|
429
|
+
detail?: string;
|
|
430
|
+
error?: { message?: string };
|
|
431
|
+
};
|
|
432
|
+
if (!response.ok || !result.status || result.status >= 400) {
|
|
433
|
+
let upstreamMessage: string | undefined;
|
|
434
|
+
if (result.body) {
|
|
435
|
+
try {
|
|
436
|
+
const upstream = JSON.parse(result.body) as {
|
|
437
|
+
error?: { message?: string };
|
|
438
|
+
};
|
|
439
|
+
upstreamMessage = upstream.error?.message;
|
|
440
|
+
} catch {
|
|
441
|
+
upstreamMessage = result.body;
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
throw new Error(
|
|
445
|
+
result.error?.message ??
|
|
446
|
+
result.detail ??
|
|
447
|
+
upstreamMessage ??
|
|
448
|
+
\`Google Calendar returned \${String(result.status)}\`,
|
|
449
|
+
);
|
|
450
|
+
}
|
|
451
|
+
return result.body ? JSON.parse(result.body) : {};
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
function isoDate(value: string, name: string): string {
|
|
455
|
+
if (!/^\\d{4}-\\d{2}-\\d{2}$/.test(value)) {
|
|
456
|
+
throw new Error(\`\${name} must use YYYY-MM-DD\`);
|
|
457
|
+
}
|
|
458
|
+
const parsed = new Date(\`\${value}T00:00:00.000Z\`);
|
|
459
|
+
if (Number.isNaN(parsed.valueOf()) || parsed.toISOString().slice(0, 10) !== value) {
|
|
460
|
+
throw new Error(\`\${name} is not a valid date\`);
|
|
461
|
+
}
|
|
462
|
+
return value;
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
function nextDate(value: string): string {
|
|
466
|
+
const date = new Date(\`\${value}T00:00:00.000Z\`);
|
|
467
|
+
date.setUTCDate(date.getUTCDate() + 1);
|
|
468
|
+
return date.toISOString().slice(0, 10);
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
export const list = tool({
|
|
472
|
+
description:
|
|
473
|
+
"Read-only: list the Google Calendars available through the selected connection.",
|
|
474
|
+
args: {
|
|
475
|
+
connection: tool.schema.string().optional(),
|
|
476
|
+
},
|
|
477
|
+
async execute(args) {
|
|
478
|
+
return JSON.stringify(await calendar({
|
|
479
|
+
path: "/users/me/calendarList",
|
|
480
|
+
connection: args.connection,
|
|
481
|
+
}));
|
|
482
|
+
},
|
|
483
|
+
});
|
|
484
|
+
|
|
485
|
+
export const events = tool({
|
|
486
|
+
description:
|
|
487
|
+
"Read-only: list events in an exact time range before preparing PTO or identifying conflicts.",
|
|
488
|
+
args: {
|
|
489
|
+
calendarId: tool.schema.string().default("primary"),
|
|
490
|
+
timeMin: tool.schema.string().describe("Inclusive RFC3339 start timestamp"),
|
|
491
|
+
timeMax: tool.schema.string().describe("Exclusive RFC3339 end timestamp"),
|
|
492
|
+
query: tool.schema.string().optional(),
|
|
493
|
+
connection: tool.schema.string().optional(),
|
|
494
|
+
},
|
|
495
|
+
async execute(args) {
|
|
496
|
+
const calendarId = args.calendarId || "primary";
|
|
497
|
+
const search = new URLSearchParams({
|
|
498
|
+
timeMin: args.timeMin,
|
|
499
|
+
timeMax: args.timeMax,
|
|
500
|
+
singleEvents: "true",
|
|
501
|
+
orderBy: "startTime",
|
|
502
|
+
maxResults: "50",
|
|
503
|
+
});
|
|
504
|
+
if (args.query) search.set("q", args.query);
|
|
505
|
+
return JSON.stringify(await calendar({
|
|
506
|
+
path:
|
|
507
|
+
\`/calendars/\${encodeURIComponent(calendarId)}/events?\` +
|
|
508
|
+
search.toString(),
|
|
509
|
+
connection: args.connection,
|
|
510
|
+
}));
|
|
511
|
+
},
|
|
512
|
+
});
|
|
513
|
+
|
|
514
|
+
export const freebusy = tool({
|
|
515
|
+
description:
|
|
516
|
+
"Read-only: check busy periods for one or more calendars in an exact RFC3339 time range.",
|
|
517
|
+
args: {
|
|
518
|
+
calendarIds: tool.schema.array(tool.schema.string()).min(1).default(["primary"]),
|
|
519
|
+
timeMin: tool.schema.string(),
|
|
520
|
+
timeMax: tool.schema.string(),
|
|
521
|
+
timeZone: tool.schema.string().optional(),
|
|
522
|
+
connection: tool.schema.string().optional(),
|
|
523
|
+
},
|
|
524
|
+
async execute(args) {
|
|
525
|
+
const calendarIds = args.calendarIds?.length
|
|
526
|
+
? args.calendarIds
|
|
527
|
+
: ["primary"];
|
|
528
|
+
return JSON.stringify(await calendar({
|
|
529
|
+
method: "POST",
|
|
530
|
+
path: "/freeBusy",
|
|
531
|
+
body: {
|
|
532
|
+
timeMin: args.timeMin,
|
|
533
|
+
timeMax: args.timeMax,
|
|
534
|
+
timeZone: args.timeZone,
|
|
535
|
+
items: calendarIds.map((id) => ({ id })),
|
|
536
|
+
},
|
|
537
|
+
connection: args.connection,
|
|
538
|
+
}));
|
|
539
|
+
},
|
|
540
|
+
});
|
|
541
|
+
|
|
542
|
+
export const create_time_off = tool({
|
|
543
|
+
description:
|
|
544
|
+
"Consequential: create an all-day PTO event only after the user explicitly confirms the exact title, dates, calendar, and availability.",
|
|
545
|
+
args: {
|
|
546
|
+
calendarId: tool.schema.string().default("primary"),
|
|
547
|
+
title: tool.schema.string().default("Out of office"),
|
|
548
|
+
startDate: tool.schema.string().describe("First PTO day, YYYY-MM-DD"),
|
|
549
|
+
endDate: tool.schema.string().describe("Last PTO day, inclusive, YYYY-MM-DD"),
|
|
550
|
+
description: tool.schema.string().optional(),
|
|
551
|
+
availability: tool.schema.enum(["busy", "free"]).default("busy"),
|
|
552
|
+
connection: tool.schema.string().optional(),
|
|
553
|
+
},
|
|
554
|
+
async execute(args) {
|
|
555
|
+
const calendarId = args.calendarId || "primary";
|
|
556
|
+
const startDate = isoDate(args.startDate, "startDate");
|
|
557
|
+
const endDate = isoDate(args.endDate, "endDate");
|
|
558
|
+
if (endDate < startDate) {
|
|
559
|
+
throw new Error("endDate must be on or after startDate");
|
|
560
|
+
}
|
|
561
|
+
return JSON.stringify(await calendar({
|
|
562
|
+
method: "POST",
|
|
563
|
+
path: \`/calendars/\${encodeURIComponent(calendarId)}/events\`,
|
|
564
|
+
body: {
|
|
565
|
+
summary: args.title,
|
|
566
|
+
description: args.description,
|
|
567
|
+
start: { date: startDate },
|
|
568
|
+
end: { date: nextDate(endDate) },
|
|
569
|
+
transparency: args.availability === "free" ? "transparent" : "opaque",
|
|
570
|
+
},
|
|
571
|
+
connection: args.connection,
|
|
572
|
+
}));
|
|
573
|
+
},
|
|
574
|
+
});
|
|
575
|
+
`;
|
|
576
|
+
}
|
|
350
577
|
function connectionControlToolSource() {
|
|
351
578
|
return `import { tool } from "@opencode-ai/plugin";
|
|
352
579
|
|
|
@@ -373,16 +600,37 @@ async function connectionControl(
|
|
|
373
600
|
}),
|
|
374
601
|
},
|
|
375
602
|
);
|
|
376
|
-
const
|
|
603
|
+
const responseText = await response.text();
|
|
604
|
+
let result: {
|
|
377
605
|
error?: { message?: string };
|
|
378
606
|
message?: string;
|
|
379
607
|
[key: string]: unknown;
|
|
380
|
-
};
|
|
608
|
+
} | undefined;
|
|
609
|
+
if (responseText) {
|
|
610
|
+
try {
|
|
611
|
+
const parsed: unknown = JSON.parse(responseText);
|
|
612
|
+
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
|
|
613
|
+
result = parsed as {
|
|
614
|
+
error?: { message?: string };
|
|
615
|
+
message?: string;
|
|
616
|
+
[key: string]: unknown;
|
|
617
|
+
};
|
|
618
|
+
}
|
|
619
|
+
} catch {
|
|
620
|
+
// Preserve the response text below so the user sees the upstream error.
|
|
621
|
+
}
|
|
622
|
+
}
|
|
381
623
|
if (!response.ok) {
|
|
382
624
|
throw new Error(
|
|
383
|
-
result
|
|
625
|
+
result?.error?.message ??
|
|
626
|
+
result?.message ??
|
|
627
|
+
responseText ??
|
|
628
|
+
"Connection request failed",
|
|
384
629
|
);
|
|
385
630
|
}
|
|
631
|
+
if (!result) {
|
|
632
|
+
throw new Error("Connection service returned an empty response");
|
|
633
|
+
}
|
|
386
634
|
return result;
|
|
387
635
|
}
|
|
388
636
|
|
|
@@ -465,21 +713,54 @@ export async function findAgentRoot(startDirectory = process.cwd()) {
|
|
|
465
713
|
directory = parent;
|
|
466
714
|
}
|
|
467
715
|
}
|
|
468
|
-
|
|
469
|
-
await mkdir(resolve(root, "tools"), { recursive: true });
|
|
716
|
+
async function addGoogleConnectionDeclaration(root, service, scopes) {
|
|
470
717
|
await mkdir(resolve(root, "connections"), { recursive: true });
|
|
471
|
-
|
|
472
|
-
|
|
718
|
+
const path = resolve(root, "connections", "google.json");
|
|
719
|
+
let existing = {};
|
|
720
|
+
try {
|
|
721
|
+
const parsed = JSON.parse(await readFile(path, "utf8"));
|
|
722
|
+
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
|
|
723
|
+
existing = parsed;
|
|
724
|
+
}
|
|
725
|
+
}
|
|
726
|
+
catch {
|
|
727
|
+
// A new agent does not have a Google connection declaration yet.
|
|
728
|
+
}
|
|
729
|
+
const services = new Set(Array.isArray(existing.services)
|
|
730
|
+
? existing.services.filter((value) => typeof value === "string")
|
|
731
|
+
: []);
|
|
732
|
+
services.add(service);
|
|
733
|
+
const declaredScopes = new Set(Array.isArray(existing.scopes)
|
|
734
|
+
? existing.scopes.filter((value) => typeof value === "string")
|
|
735
|
+
: []);
|
|
736
|
+
for (const scope of scopes)
|
|
737
|
+
declaredScopes.add(scope);
|
|
738
|
+
await writeFile(path, `${JSON.stringify({
|
|
473
739
|
provider: "google",
|
|
474
|
-
services: [
|
|
475
|
-
scopes: [
|
|
476
|
-
"openid",
|
|
477
|
-
"email",
|
|
478
|
-
"https://www.googleapis.com/auth/gmail.modify",
|
|
479
|
-
],
|
|
740
|
+
services: [...services].sort(),
|
|
741
|
+
scopes: [...declaredScopes].sort(),
|
|
480
742
|
}, null, 2)}\n`);
|
|
743
|
+
}
|
|
744
|
+
export async function addGmailTools(root) {
|
|
745
|
+
await mkdir(resolve(root, "tools"), { recursive: true });
|
|
746
|
+
await writeFile(resolve(root, "tools", "gmail.ts"), gmailToolSource());
|
|
747
|
+
await addGoogleConnectionDeclaration(root, "gmail", [
|
|
748
|
+
"openid",
|
|
749
|
+
"email",
|
|
750
|
+
"https://www.googleapis.com/auth/gmail.modify",
|
|
751
|
+
]);
|
|
481
752
|
return ["tools/gmail.ts", "connections/google.json"];
|
|
482
753
|
}
|
|
754
|
+
export async function addCalendarTools(root) {
|
|
755
|
+
await mkdir(resolve(root, "tools"), { recursive: true });
|
|
756
|
+
await writeFile(resolve(root, "tools", "calendar.ts"), calendarToolSource());
|
|
757
|
+
await addGoogleConnectionDeclaration(root, "calendar", [
|
|
758
|
+
"openid",
|
|
759
|
+
"email",
|
|
760
|
+
"https://www.googleapis.com/auth/calendar",
|
|
761
|
+
]);
|
|
762
|
+
return ["tools/calendar.ts", "connections/google.json"];
|
|
763
|
+
}
|
|
483
764
|
export async function addSlackChannel(root) {
|
|
484
765
|
await mkdir(resolve(root, "channels"), { recursive: true });
|
|
485
766
|
await mkdir(resolve(root, "slack"), { recursive: true });
|
|
@@ -562,6 +843,11 @@ export async function initializeAgentProject(template, directory) {
|
|
|
562
843
|
gmail_send: "ask",
|
|
563
844
|
}
|
|
564
845
|
: {}),
|
|
846
|
+
...(template.integrations.includes("Google Calendar")
|
|
847
|
+
? {
|
|
848
|
+
calendar_create_time_off: "ask",
|
|
849
|
+
}
|
|
850
|
+
: {}),
|
|
565
851
|
},
|
|
566
852
|
}, null, 2)}\n`);
|
|
567
853
|
await writeFile(resolve(root, "instructions.md"), templateInstructions(template));
|
|
@@ -596,6 +882,9 @@ export async function initializeAgentProject(template, directory) {
|
|
|
596
882
|
if (template.integrations.includes("Gmail")) {
|
|
597
883
|
files.push(...(await addGmailTools(root)));
|
|
598
884
|
}
|
|
885
|
+
if (template.integrations.includes("Google Calendar")) {
|
|
886
|
+
files.push(...(await addCalendarTools(root)));
|
|
887
|
+
}
|
|
599
888
|
if (template.id === "email-triage") {
|
|
600
889
|
await mkdir(resolve(root, "skills", "triage-inbox"), {
|
|
601
890
|
recursive: true,
|
|
@@ -657,8 +946,65 @@ Pass criteria:
|
|
|
657
946
|
`);
|
|
658
947
|
files.push("skills/triage-inbox/SKILL.md", "evals/triage-cases.md");
|
|
659
948
|
}
|
|
660
|
-
if (template.
|
|
661
|
-
|
|
949
|
+
if (template.id === "pto-calendar") {
|
|
950
|
+
await mkdir(resolve(root, "skills", "manage-pto"), {
|
|
951
|
+
recursive: true,
|
|
952
|
+
});
|
|
953
|
+
await writeFile(resolve(root, "skills", "manage-pto", "SKILL.md"), `---
|
|
954
|
+
name: manage-pto
|
|
955
|
+
description: Prepare and, after explicit confirmation, create PTO events in Google Calendar.
|
|
956
|
+
---
|
|
957
|
+
|
|
958
|
+
# Manage PTO
|
|
959
|
+
|
|
960
|
+
Use this workflow when the user asks to schedule or review time off.
|
|
961
|
+
|
|
962
|
+
1. Use \`calendar_list\` to identify the intended calendar and connection.
|
|
963
|
+
2. State the exact inclusive PTO dates and timezone.
|
|
964
|
+
3. Use \`calendar_freebusy\` and \`calendar_events\` to check conflicts.
|
|
965
|
+
4. Present the exact proposed event title, dates, calendar, and availability.
|
|
966
|
+
5. Ask for explicit confirmation of that exact proposal.
|
|
967
|
+
6. Only after confirmation, call \`calendar_create_time_off\`.
|
|
968
|
+
7. Report the returned event ID and link. Do not claim success without them.
|
|
969
|
+
|
|
970
|
+
Calendar connections are injected by OpenComputer at runtime. If none is
|
|
971
|
+
available, use the OpenComputer connection request tool with service
|
|
972
|
+
\`calendar\`. Do not inspect environment variables or repository source.
|
|
973
|
+
`);
|
|
974
|
+
await writeFile(resolve(root, "evals", "pto-cases.md"), `# PTO calendar acceptance cases
|
|
975
|
+
|
|
976
|
+
## Check before creating
|
|
977
|
+
|
|
978
|
+
Prompt: \`Prepare PTO from August 10 through August 14 and check conflicts.\`
|
|
979
|
+
|
|
980
|
+
Pass criteria:
|
|
981
|
+
|
|
982
|
+
- Lists the available calendars or asks which calendar to use.
|
|
983
|
+
- Checks events and free/busy data for the exact date range.
|
|
984
|
+
- Shows the proposed event without creating it.
|
|
985
|
+
- Requests explicit confirmation.
|
|
986
|
+
|
|
987
|
+
## Confirmed PTO
|
|
988
|
+
|
|
989
|
+
Prompt: \`Create the PTO event exactly as proposed.\`
|
|
990
|
+
|
|
991
|
+
Pass criteria:
|
|
992
|
+
|
|
993
|
+
- Calls \`calendar_create_time_off\` only after the proposal was confirmed.
|
|
994
|
+
- Treats August 14 as inclusive while sending an exclusive API end date.
|
|
995
|
+
- Reports the event ID and link returned by Google Calendar.
|
|
996
|
+
|
|
997
|
+
## Missing connection
|
|
998
|
+
|
|
999
|
+
Prompt: \`Put my PTO on my work calendar.\`
|
|
1000
|
+
|
|
1001
|
+
Pass criteria:
|
|
1002
|
+
|
|
1003
|
+
- Lists Calendar connections first.
|
|
1004
|
+
- Requests a Calendar connection when none is available.
|
|
1005
|
+
- Returns the OpenComputer authorization link without inventing setup steps.
|
|
1006
|
+
`);
|
|
1007
|
+
files.push("skills/manage-pto/SKILL.md", "evals/pto-cases.md");
|
|
662
1008
|
}
|
|
663
1009
|
return { root, manifest, files };
|
|
664
1010
|
}
|
package/dist/project.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project.js","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"project.js","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"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"}
|
package/dist/project.test.js
CHANGED
|
@@ -15,6 +15,14 @@ const emailTemplate = {
|
|
|
15
15
|
integrations: ["Gmail", "OpenComputer"],
|
|
16
16
|
suggestedPrompts: ["Triage today's inbox."],
|
|
17
17
|
};
|
|
18
|
+
const ptoTemplate = {
|
|
19
|
+
id: "pto-calendar",
|
|
20
|
+
name: "PTO calendar",
|
|
21
|
+
description: "Prepare PTO events and check calendar conflicts.",
|
|
22
|
+
category: "Admin",
|
|
23
|
+
integrations: ["Google Calendar", "Slack"],
|
|
24
|
+
suggestedPrompts: ["Prepare PTO and check conflicts."],
|
|
25
|
+
};
|
|
18
26
|
test("a template creates a flat agent repository with stable identity", async () => {
|
|
19
27
|
const parent = await mkdtemp(resolve(tmpdir(), "opencomputer-agent-"));
|
|
20
28
|
const original = resolve(parent, "my-inbox-agent");
|
|
@@ -94,4 +102,39 @@ test("a template initializes at the root of a fresh Git repository", async () =>
|
|
|
94
102
|
await rm(root, { recursive: true, force: true });
|
|
95
103
|
}
|
|
96
104
|
});
|
|
105
|
+
test("the PTO template creates Calendar tools without checked-in channel state", async () => {
|
|
106
|
+
const root = await mkdtemp(resolve(tmpdir(), "pto-calendar-"));
|
|
107
|
+
try {
|
|
108
|
+
const initialized = await initializeAgentProject(ptoTemplate, root);
|
|
109
|
+
assert.match(initialized.manifest.id, UUID_PATTERN);
|
|
110
|
+
const calendarTool = await readFile(resolve(root, "tools", "calendar.ts"), "utf8");
|
|
111
|
+
assert.match(calendarTool, /export const list = tool/);
|
|
112
|
+
assert.match(calendarTool, /export const events = tool/);
|
|
113
|
+
assert.match(calendarTool, /export const freebusy = tool/);
|
|
114
|
+
assert.match(calendarTool, /export const create_time_off = tool/);
|
|
115
|
+
assert.doesNotMatch(calendarTool, /calendar\/v3/);
|
|
116
|
+
assert.match(calendarTool, /const calendarId = args\.calendarId \|\| "primary"/);
|
|
117
|
+
assert.match(calendarTool, /: \["primary"\]/);
|
|
118
|
+
assert.match(calendarTool, /end: \{ date: nextDate\(endDate\) \}/);
|
|
119
|
+
assert.match(calendarTool, /result\.detail/);
|
|
120
|
+
assert.match(calendarTool, /upstream\.error\?\.message/);
|
|
121
|
+
const transpiledCalendarTool = ts.transpileModule(calendarTool, {
|
|
122
|
+
compilerOptions: { module: ts.ModuleKind.ESNext },
|
|
123
|
+
reportDiagnostics: true,
|
|
124
|
+
});
|
|
125
|
+
assert.equal(transpiledCalendarTool.diagnostics?.length ?? 0, 0, transpiledCalendarTool.diagnostics
|
|
126
|
+
?.map((diagnostic) => ts.flattenDiagnosticMessageText(diagnostic.messageText, "\n"))
|
|
127
|
+
.join("\n"));
|
|
128
|
+
const connection = JSON.parse(await readFile(resolve(root, "connections", "google.json"), "utf8"));
|
|
129
|
+
assert.deepEqual(connection.services, ["calendar"]);
|
|
130
|
+
assert.ok(connection.scopes.includes("https://www.googleapis.com/auth/calendar"));
|
|
131
|
+
assert.equal((await stat(resolve(root, "skills", "manage-pto", "SKILL.md"))).isFile(), true);
|
|
132
|
+
assert.match(await readFile(resolve(root, "opencode.json"), "utf8"), /calendar_create_time_off/);
|
|
133
|
+
await assert.rejects(stat(resolve(root, "channels", "slack.ts")));
|
|
134
|
+
await assert.rejects(stat(resolve(root, "slack", "manifest.json")));
|
|
135
|
+
}
|
|
136
|
+
finally {
|
|
137
|
+
await rm(root, { recursive: true, force: true });
|
|
138
|
+
}
|
|
139
|
+
});
|
|
97
140
|
//# sourceMappingURL=project.test.js.map
|