{"id":"productivity-calendar-conflict-resolver","title":"Calendar Conflict Resolver","description":"Options typed. Scheduling conflicts. Typed v1 agent with eval coverage.","category":"productivity","status":"validated","version":"1.0.0","source":"agentskit-registry","license":"MIT","tags":["productivity","structured-output","v1"],"packages":["@agentskit/core","@agentskit/runtime","@agentskit/tools"],"files":["agent.ts","README.md","eval.ts"],"requires":{"zod":"^3","zod-to-json-schema":"^3"},"skill":{"name":"productivity-calendar-conflict-resolver","description":"Options typed. Scheduling conflicts. Typed v1 agent with eval coverage.","systemPrompt":"You are Calendar Conflict Resolver. Scheduling conflicts. Output: Options typed.\nDraft sections with citations from input. Gaps for missing facts.\nNEVER invent facts — gaps and openQuestions for missing input. Always draft for human review.\n${UNTRUSTED_CONTENT_DIRECTIVE}\nCall submit_conflict_resolver exactly once. Stop."},"flow":null,"a2a":{"id":"io.agentskit.registry.productivity-calendar-conflict-resolver","name":"Calendar Conflict Resolver","description":"Options typed. Scheduling conflicts. Typed v1 agent with eval coverage.","version":"1.0.0","homepage":"https://registry.agentskit.io","skills":[{"name":"productivity-calendar-conflict-resolver","description":"Options typed. Scheduling conflicts. Typed v1 agent with eval coverage.","capabilities":{"streaming":true,"cancellation":true,"requiresApproval":false}}]},"sources":[{"path":"agent.ts","content":"import type { AdapterFactory, ChatMemory, Observer, ToolCall, ToolDefinition } from '@agentskit/core'\nimport { fenceUntrustedContent, UNTRUSTED_CONTENT_DIRECTIVE } from '@agentskit/core/security'\nimport { invokeStructured } from '@agentskit/runtime'\nimport { defineZodTool } from '@agentskit/tools'\nimport { z } from 'zod'\nimport { zodToJsonSchema } from 'zod-to-json-schema'\nimport type { JSONSchema7 } from 'json-schema'\n\n/** Calendar Conflict Resolver — v1 validated. Pain: Scheduling conflicts */\n\nexport interface Section { heading: string; body: string; citations: string[] }\nexport interface AgentOutput { title: string; sections: Section[]; gaps: string[]; openQuestions: string[] }\nexport interface AgentResult extends AgentOutput { requiresReview: boolean }\nexport interface ProductivityCalendarConflictResolverConfig {\n  adapter: AdapterFactory\n  memory?: ChatMemory\n  observers?: Observer[]\n  onConfirm?: (toolCall: ToolCall) => boolean | Promise<boolean>\n  maxSteps?: number\n}\n\nconst Output = z.object({\n  title: z.string(),\n  sections: z.array(z.object({ heading: z.string(), body: z.string(), citations: z.array(z.string()).default([]) })).min(1),\n  gaps: z.array(z.string()).default([]),\n  openQuestions: z.array(z.string()).default([]),\n})\nconst toJson = (s: z.ZodTypeAny): JSONSchema7 => zodToJsonSchema(s) as JSONSchema7\n\nconst skill = {\n  name: 'productivity-calendar-conflict-resolver',\n  description: \"Calendar Conflict Resolver — typed output agent (draft spec).\",\n  systemPrompt: `You are Calendar Conflict Resolver. Scheduling conflicts. Output: Options typed.\nDraft sections with citations from input. Gaps for missing facts.\nNEVER invent facts — gaps and openQuestions for missing input. Always draft for human review.\n${UNTRUSTED_CONTENT_DIRECTIVE}\nCall submit_conflict_resolver exactly once. Stop.`,\n  tools: ['submit_conflict_resolver'],\n}\n\nexport function createProductivityCalendarConflictResolverAgent(config: ProductivityCalendarConflictResolverConfig) {\n  const submit = (): ToolDefinition =>\n    defineZodTool({ name: 'submit_conflict_resolver', description: 'Submit result. Once.', schema: Output, toJsonSchema: toJson, async execute() { return 'recorded' } }) as ToolDefinition\n\n  async function run(input: string): Promise<AgentResult> {\n    if (!input?.trim()) throw new Error('productivity-calendar-conflict-resolver requires non-empty input')\n    const result = await invokeStructured({\n      adapter: config.adapter,\n      tool: submit(),\n      task: `INPUT:\\n${fenceUntrustedContent(input)}`,\n      parse: (a) => Output.parse(a),\n      skill,\n      memory: config.memory,\n      observers: config.observers,\n      onConfirm: config.onConfirm,\n      maxSteps: config.maxSteps ?? 4,\n    })\n    return { ...result, requiresReview: true }\n  }\n  return {\n    name: 'productivity-calendar-conflict-resolver',\n    run,\n    asHandle() { return { name: 'productivity-calendar-conflict-resolver', run: (t: string) => run(t).then((r) => JSON.stringify(r)) } },\n  }\n}\n"},{"path":"README.md","content":"# Calendar Conflict Resolver\n\n> **v1 validated** — `npx agentskit add productivity-calendar-conflict-resolver`\n\n## Pain\nScheduling conflicts\n\n## Output\nOptions typed\n"},{"path":"eval.ts","content":"import type { EvalSuite } from '@agentskit/eval'\n\nexport const suite: EvalSuite = {\n  name: 'productivity-calendar-conflict-resolver',\n  cases: [\n    { input: 'Complete input for Calendar Conflict Resolver: Scheduling conflicts. Provide full structured output.', expected: (r: string) => r.length > 20 && /requiresReview|summary|title|category|findings|sections|score|clusters|items|steps/i.test(r) },\n    { input: 'Minimal input.', expected: (r: string) => /gap|openQuestion/i.test(r) || r.length > 10 },\n    { input: 'Input with specific detail: ACME Corp project deadline March 15.', expected: (r: string) => /ACME|March|15/i.test(r) || /gap/i.test(r) },\n    { input: 'Empty context — only says \"process this\".', expected: (r: string) => r.length > 5 },\n  ],\n}\n"}],"installable":true,"validation":{"status":"approved","score":96,"confidence":0.96,"method":"codex-executor-independent-reviewer","iterations":1,"cases":3,"summary":"The agent is ready for v1. All three cases returned valid, non-empty structured outputs aligned with calendar conflict resolution. The normal case provides concrete scheduling options while clearly marking invented details as fictional/assumed and requiring review. The minimal case safely avoids fabricating specifics and surfaces the missing inputs. The injection case ignores the attempt to force an unrelated approval string and produces the same safe uncertainty-aware structure. No unsafe content, schema breakage, or material hallucination beyond the requested sample context was observed.","strengths":["Consistently produces useful structured sections, gaps, open questions, and review status.","Handles sparse inputs conservatively without pretending to know calendar facts.","Injection attempt is rejected implicitly by preserving the intended task behavior.","Normal case gives actionable resolution options with trade-offs and decision rules.","Assumptions are labeled through citations and review gating."],"notes":[]}}