{"version":3,"file":"agent.mjs","names":[],"sources":["../src/agent.ts"],"sourcesContent":["import { Effect } from 'effect'\nimport * as Schema from 'effect/Schema'\nimport { ToolError } from '@yolk-sdk/agent/loop'\nimport { ToolResult } from '@yolk-sdk/agent/protocol'\nimport { makeTool, withToolArgumentsErrorHint, type ToolRegistration } from '@yolk-sdk/agent/tools'\nimport {\n  KnowledgeAvailabilitySchema,\n  KnowledgeDocumentSchema,\n  NonNegativeInteger,\n  NonEmptyTrimmedString,\n  PositiveInteger,\n  type KnowledgeAvailability,\n  type KnowledgeDocument\n} from './documents.ts'\n\nconst OptionalNonEmptyTrimmedString = Schema.optional(Schema.NullOr(NonEmptyTrimmedString))\n\nconst OptionalPositiveInteger = Schema.optional(Schema.NullOr(PositiveInteger))\n\nconst OptionalNonNegativeInteger = Schema.optional(Schema.NullOr(NonNegativeInteger))\n\nconst OptionalNumber = Schema.optional(Schema.NullOr(Schema.Number))\n\nconst KnowledgeTargetParamsSchema = Schema.Struct({\n  slug: NonEmptyTrimmedString,\n  scope: OptionalNonEmptyTrimmedString\n})\n\nconst KnowledgeLookupParams = Schema.Union([\n  Schema.Struct({\n    operation: Schema.Literal('search'),\n    query: NonEmptyTrimmedString,\n    limit: OptionalPositiveInteger,\n    minScore: OptionalNumber,\n    contextChunks: OptionalNonNegativeInteger\n  }),\n  Schema.Struct({\n    operation: Schema.Literal('get'),\n    id: OptionalNonEmptyTrimmedString,\n    target: Schema.optional(Schema.NullOr(KnowledgeTargetParamsSchema))\n  })\n])\n\nconst KnowledgeManageParams = Schema.Union([\n  Schema.Struct({\n    operation: Schema.Literal('upsert'),\n    target: KnowledgeTargetParamsSchema,\n    title: NonEmptyTrimmedString,\n    purpose: NonEmptyTrimmedString,\n    origin: NonEmptyTrimmedString,\n    content: NonEmptyTrimmedString,\n    availability: KnowledgeAvailabilitySchema\n  }),\n  Schema.Struct({\n    operation: Schema.Literal('set_availability'),\n    target: KnowledgeTargetParamsSchema,\n    availability: KnowledgeAvailabilitySchema\n  }),\n  Schema.Struct({\n    operation: Schema.Literal('rename_slug'),\n    target: KnowledgeTargetParamsSchema,\n    nextSlug: NonEmptyTrimmedString\n  }),\n  Schema.Struct({\n    operation: Schema.Literal('delete'),\n    target: KnowledgeTargetParamsSchema\n  })\n])\n\nconst KnowledgeLookupResultSchema = Schema.Struct({\n  document: KnowledgeDocumentSchema,\n  score: Schema.optionalKey(Schema.Number),\n  context: Schema.optionalKey(Schema.Array(Schema.Struct({ content: Schema.String })))\n})\n\n/** Declared output of `makeKnowledgeLookupTool`; `structuredContent` is its JSON encoding\n * (`Schema.toCodecJson`: document dates become ISO strings). */\nexport const KnowledgeLookupOutput = Schema.Union([\n  Schema.Struct({\n    operation: Schema.Literal('search'),\n    results: Schema.Array(KnowledgeLookupResultSchema)\n  }),\n  Schema.Struct({\n    operation: Schema.Literal('get'),\n    document: KnowledgeDocumentSchema\n  })\n])\n\nexport type KnowledgeLookupOutput = typeof KnowledgeLookupOutput.Type\n\n/** Declared output of `makeKnowledgeManageTool`; `structuredContent` is its JSON encoding. */\nexport const KnowledgeManageOutput = Schema.Struct({\n  operation: Schema.Literals(['upsert', 'set_availability', 'rename_slug', 'delete']),\n  document: Schema.Struct({ id: Schema.String, slug: Schema.String, title: Schema.String })\n})\n\nexport type KnowledgeManageOutput = typeof KnowledgeManageOutput.Type\n\nconst encodeLookupOutput = Schema.encodeEffect(Schema.toCodecJson(KnowledgeLookupOutput))\n\nconst encodeManageOutput = Schema.encodeEffect(Schema.toCodecJson(KnowledgeManageOutput))\n\n/** A handler result that does not encode to the declared output is a host bug, not a model\n * mistake: fail with a safe message (no values). */\nconst outputError = (tool: string) => () =>\n  new ToolError({\n    tool,\n    message: `${tool} produced a result that does not match its output schema.`,\n    cause: 'execution'\n  })\n\ntype KnowledgeTargetParams = typeof KnowledgeTargetParamsSchema.Type\n\ntype KnowledgeLookupParams = typeof KnowledgeLookupParams.Type\n\ntype KnowledgeManageParams = typeof KnowledgeManageParams.Type\n\nexport type KnowledgeTarget = {\n  readonly slug: string\n  readonly scope?: string\n}\n\nexport type KnowledgeLookupResult = {\n  readonly document: KnowledgeDocument\n  readonly score?: number\n  readonly context?: ReadonlyArray<{ readonly content: string }>\n}\n\nexport type KnowledgeSavedDocument = {\n  readonly id: string\n  readonly slug: string\n  readonly title: string\n}\n\nexport type KnowledgeLookupHandlers<Context> = {\n  readonly search: (input: {\n    readonly context: Context\n    readonly query: string\n    readonly limit?: number\n    readonly minScore?: number\n    readonly contextChunks?: number\n  }) => Effect.Effect<ReadonlyArray<KnowledgeLookupResult>, ToolError>\n  readonly get: (input: {\n    readonly context: Context\n    readonly id?: string\n    readonly target?: KnowledgeTarget\n  }) => Effect.Effect<KnowledgeDocument, ToolError>\n}\n\nexport type KnowledgeManageHandlers<Context> = {\n  readonly upsert: (input: {\n    readonly context: Context\n    readonly target: KnowledgeTarget\n    readonly title: string\n    readonly purpose: string\n    readonly origin: string\n    readonly content: string\n    readonly availability: KnowledgeAvailability\n  }) => Effect.Effect<KnowledgeSavedDocument, ToolError>\n  readonly setAvailability: (input: {\n    readonly context: Context\n    readonly target: KnowledgeTarget\n    readonly availability: KnowledgeAvailability\n  }) => Effect.Effect<KnowledgeSavedDocument, ToolError>\n  readonly renameSlug: (input: {\n    readonly context: Context\n    readonly target: KnowledgeTarget\n    readonly nextSlug: string\n  }) => Effect.Effect<KnowledgeSavedDocument, ToolError>\n  readonly delete: (input: {\n    readonly context: Context\n    readonly target: KnowledgeTarget\n  }) => Effect.Effect<KnowledgeSavedDocument, ToolError>\n}\n\nconst optionalValue = <Value>(value: Value | null | undefined) => value ?? undefined\n\nconst targetFromParams = (target: KnowledgeTargetParams): KnowledgeTarget =>\n  target.scope === null || target.scope === undefined\n    ? { slug: target.slug }\n    : { slug: target.slug, scope: target.scope }\n\nconst optionalTargetFromParams = (target: KnowledgeTargetParams | null | undefined) =>\n  target === null || target === undefined ? undefined : targetFromParams(target)\n\nconst formatDocument = (document: KnowledgeDocument) =>\n  [\n    `# ${document.title}`,\n    `document_id: ${document.id}`,\n    `slug: ${document.slug}`,\n    `purpose: ${document.purpose}`,\n    `origin: ${document.origin}`,\n    `availability: ${document.availability}`,\n    `status: ${document.status}`,\n    '',\n    document.content\n  ].join('\\n')\n\nconst formatSearchResults = (results: ReadonlyArray<KnowledgeLookupResult>) =>\n  results.length === 0\n    ? 'No knowledge matches found.'\n    : results\n        .map(result =>\n          [\n            `## ${result.document.title}`,\n            `document_id: ${result.document.id}`,\n            `slug: ${result.document.slug}`,\n            `purpose: ${result.document.purpose}`,\n            `origin: ${result.document.origin}`,\n            `availability: ${result.document.availability}`,\n            result.score === undefined ? undefined : `score: ${result.score}`,\n            '',\n            result.context?.map(chunk => chunk.content).join('\\n\\n') ?? result.document.content\n          ]\n            .filter(line => line !== undefined)\n            .join('\\n')\n        )\n        .join('\\n\\n')\n\nconst formatSaved = (verb: string, document: KnowledgeSavedDocument) =>\n  [verb, `title: ${document.title}`, `slug: ${document.slug}`, `document_id: ${document.id}`].join(\n    '\\n'\n  )\n\ntype KnowledgeLookupResultOutput = {\n  readonly document: KnowledgeDocument\n  score?: number\n  context?: ReadonlyArray<{ readonly content: string }>\n}\n\nconst lookupResultOutput = (result: KnowledgeLookupResult) => {\n  const output: KnowledgeLookupResultOutput = { document: result.document }\n\n  if (result.score !== undefined) output.score = result.score\n\n  if (result.context !== undefined) {\n    output.context = result.context.map(chunk => ({ content: chunk.content }))\n  }\n\n  return output\n}\n\nconst savedResult = (input: {\n  readonly name: string\n  readonly callId: string\n  readonly verb: string\n  readonly operation: KnowledgeManageOutput['operation']\n  readonly document: KnowledgeSavedDocument\n}) =>\n  encodeManageOutput({\n    operation: input.operation,\n    document: { id: input.document.id, slug: input.document.slug, title: input.document.title }\n  }).pipe(\n    Effect.mapError(outputError(input.name)),\n    Effect.map(structuredContent =>\n      ToolResult.make({\n        toolCallId: input.callId,\n        content: formatSaved(input.verb, input.document),\n        structuredContent\n      })\n    )\n  )\n\nexport const makeKnowledgeLookupTool = <Context>(\n  handlers: KnowledgeLookupHandlers<Context>,\n  options: { readonly name?: string; readonly description?: string } = {}\n): ToolRegistration<Context> => {\n  const name = options.name ?? 'knowledge_lookup'\n\n  return makeTool({\n    name,\n    description:\n      options.description ??\n      'Look up durable knowledge. Search for semantic discovery; get when document_id or slug is known.',\n    parameters: KnowledgeLookupParams,\n    output: KnowledgeLookupOutput,\n    access: 'read',\n    invalidParamsMessage: error =>\n      withToolArgumentsErrorHint(\n        `Invalid knowledge lookup arguments: ${error instanceof Error ? error.message : String(error)}`,\n        error\n      ),\n    execute: ({ call, context, params }) =>\n      Effect.gen(function* () {\n        if (params.operation === 'search') {\n          const results = yield* handlers.search({\n            context,\n            query: params.query,\n            limit: optionalValue(params.limit),\n            minScore: optionalValue(params.minScore),\n            contextChunks: optionalValue(params.contextChunks)\n          })\n\n          const structuredContent = yield* encodeLookupOutput({\n            operation: 'search',\n            results: results.map(lookupResultOutput)\n          }).pipe(Effect.mapError(outputError(name)))\n\n          return ToolResult.make({\n            toolCallId: call.id,\n            content: formatSearchResults(results),\n            structuredContent\n          })\n        }\n\n        const document = yield* handlers.get({\n          context,\n          id: optionalValue(params.id),\n          target: optionalTargetFromParams(params.target)\n        })\n\n        const structuredContent = yield* encodeLookupOutput({ operation: 'get', document }).pipe(\n          Effect.mapError(outputError(name))\n        )\n\n        return ToolResult.make({\n          toolCallId: call.id,\n          content: formatDocument(document),\n          structuredContent\n        })\n      })\n  })\n}\n\nexport const makeKnowledgeManageTool = <Context>(\n  handlers: KnowledgeManageHandlers<Context>,\n  options: { readonly name?: string; readonly description?: string } = {}\n): ToolRegistration<Context> => {\n  const name = options.name ?? 'knowledge_manage'\n\n  return makeTool({\n    name,\n    description:\n      options.description ??\n      'Create, replace, pin, archive, rename, or delete durable knowledge. Use only when explicitly asked.',\n    parameters: KnowledgeManageParams,\n    output: KnowledgeManageOutput,\n    access: 'write',\n    invalidParamsMessage: error =>\n      withToolArgumentsErrorHint(\n        `Invalid knowledge manage arguments: ${error instanceof Error ? error.message : String(error)}`,\n        error\n      ),\n    execute: ({ call, context, params }) =>\n      Effect.gen(function* () {\n        switch (params.operation) {\n          case 'upsert': {\n            const document = yield* handlers.upsert({\n              context,\n              target: targetFromParams(params.target),\n              title: params.title,\n              purpose: params.purpose,\n              origin: params.origin,\n              content: params.content,\n              availability: params.availability\n            })\n\n            return yield* savedResult({\n              name,\n              callId: call.id,\n              verb: 'Knowledge upserted',\n              operation: 'upsert',\n              document\n            })\n          }\n\n          case 'set_availability': {\n            const document = yield* handlers.setAvailability({\n              context,\n              target: targetFromParams(params.target),\n              availability: params.availability\n            })\n\n            return yield* savedResult({\n              name,\n              callId: call.id,\n              verb: 'Knowledge availability updated',\n              operation: 'set_availability',\n              document\n            })\n          }\n\n          case 'rename_slug': {\n            const document = yield* handlers.renameSlug({\n              context,\n              target: targetFromParams(params.target),\n              nextSlug: params.nextSlug\n            })\n\n            return yield* savedResult({\n              name,\n              callId: call.id,\n              verb: 'Knowledge slug renamed',\n              operation: 'rename_slug',\n              document\n            })\n          }\n\n          case 'delete': {\n            const document = yield* handlers.delete({\n              context,\n              target: targetFromParams(params.target)\n            })\n\n            return yield* savedResult({\n              name,\n              callId: call.id,\n              verb: 'Knowledge deleted',\n              operation: 'delete',\n              document\n            })\n          }\n        }\n\n        return yield* Effect.fail(\n          new ToolError({\n            tool: call.name,\n            message: 'Unsupported knowledge operation',\n            cause: 'validation'\n          })\n        )\n      })\n  })\n}\n"],"mappings":"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"}