@usepipr/sdk 0.1.3 → 0.2.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":["z","z","coreReviewResultSchema","coreReviewSummarySchema","z"],"sources":["../src/prompt.ts","../src/review-contract.ts","../src/schema.ts","../src/builder.ts"],"sourcesContent":["import type { Markdown } from \"./types/prompt.js\";\n\n/** Creates trimmed Markdown from a template literal with common indentation removed. */\nexport function md(strings: TemplateStringsArray, ...values: unknown[]): Markdown {\n let text = \"\";\n for (let index = 0; index < strings.length; index += 1) {\n text += strings[index] ?? \"\";\n if (index < values.length) {\n text += String(values[index] ?? \"\");\n }\n }\n return stripCommonIndent(text).trim();\n}\n\n/** Removes common leading indentation from multiline text. */\nexport function stripCommonIndent(value: string): string {\n const lines = value.replaceAll(\"\\t\", \" \").split(/\\r?\\n/);\n const nonEmpty = lines.filter((line) => line.trim().length > 0);\n const indent = Math.min(...nonEmpty.map((line) => line.match(/^ */)?.[0].length ?? 0));\n return lines.map((line) => line.slice(indent)).join(\"\\n\");\n}\n","import { z } from \"zod\";\nimport type { ZodSchema } from \"./types/schema.js\";\n\n/** Markdown summary produced by a reviewer for the main review comment. */\nexport type ReviewSummary = {\n title?: string;\n body: string;\n};\n\n/** One inline review finding targeting a Diff Manifest commentable range. */\nexport type ReviewFinding = {\n body: string;\n path: string;\n rangeId: string;\n side: \"RIGHT\" | \"LEFT\";\n startLine: number;\n endLine: number;\n suggestedFix?: string;\n};\n\n/** Core structured review result accepted by pipr review publication. */\nexport type ReviewResult = {\n summary: ReviewSummary;\n inlineFindings: ReviewFinding[];\n};\n\nconst nonEmptyStringSchema = z.string().min(1);\nconst positiveIntegerSchema = z.number().int().positive();\n\n/** Zod schema for a review summary. */\nexport const reviewSummarySchema: ZodSchema<ReviewSummary> = z.strictObject({\n title: nonEmptyStringSchema.optional(),\n body: nonEmptyStringSchema,\n});\n\n/** Zod schema for one inline review finding. */\nexport const reviewFindingSchema: ZodSchema<ReviewFinding> = z.strictObject({\n body: nonEmptyStringSchema,\n path: nonEmptyStringSchema,\n rangeId: nonEmptyStringSchema,\n side: z.enum([\"RIGHT\", \"LEFT\"]),\n startLine: positiveIntegerSchema,\n endLine: positiveIntegerSchema,\n suggestedFix: nonEmptyStringSchema.optional(),\n});\n\n/** Zod schema for pipr's core pull request review result. */\nexport const reviewResultSchema: ZodSchema<ReviewResult> = z.strictObject({\n summary: reviewSummarySchema,\n inlineFindings: z.array(reviewFindingSchema),\n});\n\n/** Parses model output for pipr's main pull request review schema. */\nexport function parseReviewResult(value: unknown): ReviewResult {\n return reviewResultSchema.parse(value) as ReviewResult;\n}\n\n/** Parses a review summary value. */\nexport function parseReviewSummary(value: unknown): ReviewSummary {\n return reviewSummarySchema.parse(value);\n}\n\n/** Parses one inline review finding. */\nexport function parseReviewFinding(value: unknown): ReviewFinding {\n return reviewFindingSchema.parse(value) as ReviewFinding;\n}\n\n/** Returns a small valid example for the main pull request review schema. */\nexport function reviewSchemaExample(): ReviewResult {\n return {\n summary: {\n title: \"Optional concise review title.\",\n body: \"Concise pull request review summary.\",\n },\n inlineFindings: [\n {\n body: \"Specific issue and why it matters.\",\n path: \"src/example.ts\",\n rangeId: \"rng_example\",\n side: \"RIGHT\",\n startLine: 1,\n endLine: 1,\n suggestedFix: \"return safeValue;\",\n },\n ],\n };\n}\n","import { z } from \"zod\";\nimport type { ReviewResult, ReviewSummary } from \"./review-contract.js\";\nimport {\n reviewResultSchema as coreReviewResultSchema,\n reviewSummarySchema as coreReviewSummarySchema,\n} from \"./review-contract.js\";\nimport type { BuiltinSchemaCatalog } from \"./types/agent.js\";\nimport type {\n JsonSchema,\n JsonSchemaDefinition,\n Schema,\n SchemaDefinition,\n ZodSchema,\n} from \"./types/schema.js\";\n\nconst coreReviewOutputSchemaId = \"core/pr-review\";\n\n/** Defines a typed schema from a Zod schema. */\nexport function schema<T>(definition: SchemaDefinition<T>): Schema<T> {\n if (!definition || typeof definition.id !== \"string\") {\n throw new Error(\"pipr.schema requires { id, schema }\");\n }\n assertUserSchemaId(definition.id);\n return createZodSchema(definition.id, definition.schema);\n}\n\n/** Defines a typed schema from JSON Schema. The generic type is caller supplied. */\nexport function jsonSchema<T>(definition: JsonSchemaDefinition): Schema<T> {\n if (!definition || typeof definition.id !== \"string\") {\n throw new Error(\"pipr.jsonSchema requires { id, schema }\");\n }\n assertUserSchemaId(definition.id);\n const zodSchema = z.fromJSONSchema(definition.schema);\n return createSchema(definition.id, (value) => zodSchema.parse(value) as T, definition.schema);\n}\n\n/** Built-in schemas available as reusable agent output contracts. */\nexport const schemas: BuiltinSchemaCatalog = {\n review: createZodSchema<ReviewResult>(coreReviewOutputSchemaId, coreReviewResultSchema),\n summary: createZodSchema<ReviewSummary>(\"core/summary\", coreReviewSummarySchema),\n};\n\nfunction createSchema<T>(\n id: string,\n parseValue: (value: unknown) => T,\n schemaJson?: JsonSchema,\n): Schema<T> {\n return {\n kind: \"pipr.schema\",\n id,\n jsonSchema: schemaJson,\n parse(value) {\n return parseValue(value);\n },\n safeParse(value) {\n try {\n return { success: true, data: parseValue(value) };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error : new Error(String(error)),\n };\n }\n },\n };\n}\n\nfunction createZodSchema<T>(id: string, zodSchema: ZodSchema<T>): Schema<T> {\n return createSchema(id, (value) => zodSchema.parse(value), jsonSchemaFromZod(id, zodSchema));\n}\n\nfunction assertUserSchemaId(id: string): void {\n if (id.startsWith(\"core/\")) {\n throw new Error(`Schema id '${id}' uses the reserved core/ namespace`);\n }\n}\n\nfunction jsonSchemaFromZod<T>(id: string, schemaDefinition: ZodSchema<T>): JsonSchema {\n try {\n return z.toJSONSchema(schemaDefinition) as JsonSchema;\n } catch (error) {\n const detail = error instanceof Error ? error.message : String(error);\n throw new Error(\n `Schema '${id}' could not be converted to JSON Schema. Use JSON-Schema-representable Zod or pipr.jsonSchema<T>(). ${detail}`,\n );\n }\n}\n","import { z } from \"zod\";\nimport { assertSupportedCommandRestCapture } from \"./command-grammar.js\";\nimport {\n builtinReadOnlyToolBrand,\n configFactoryBrand,\n type InternalPiprConfigFactory,\n} from \"./internal-contract.js\";\nimport { stripCommonIndent } from \"./prompt.js\";\nimport { renderPromptValue } from \"./prompt-render.js\";\nimport type { ReviewResult } from \"./review-contract.js\";\nimport type { RuntimePlan } from \"./runtime-contract.js\";\nimport { jsonSchema, schema, schemas } from \"./schema.js\";\nimport type { Agent, AgentDefinition, AgentTool, BuiltinToolCatalog } from \"./types/agent.js\";\nimport type {\n AggregateCheckOptions,\n AutoResolveOptions,\n AutoResolveUserRepliesOptions,\n ChangeRequestAction,\n ChecksOptions,\n ModelProfile,\n PiprConfigOptions,\n PublicationOptions,\n} from \"./types/config.js\";\nimport type { DiffManifestLimits, RuntimeLimits } from \"./types/manifest.js\";\nimport type { Markdown } from \"./types/prompt.js\";\nimport type {\n CommandOptions,\n CommentValue,\n DefaultReviewInput,\n PiprBuilder,\n PiprPlugin,\n Reviewer,\n ReviewerOptions,\n ReviewRecipeOptions,\n Task,\n TaskContext,\n ToolRunOptions,\n} from \"./types/task.js\";\n\n/** Defines a synchronous pipr configuration factory. */\nexport function definePipr(configure: (pipr: PiprBuilder) => void): {\n readonly kind: \"pipr.config-factory\";\n} {\n const factory = {\n kind: \"pipr.config-factory\",\n [configFactoryBrand]: true,\n build() {\n const builder = createBuilder();\n const result = configure(builder.api);\n if (\n typeof result === \"object\" &&\n result !== null &&\n typeof Reflect.get(result, \"then\") === \"function\"\n ) {\n throw new Error(\"definePipr configuration callback must be synchronous\");\n }\n return builder.plan();\n },\n } satisfies InternalPiprConfigFactory;\n return factory;\n}\n\n/** Defines a typed pipr plugin installer. */\nexport function definePlugin<Handle>(setup: (builder: PiprBuilder) => Handle): PiprPlugin<Handle> {\n return { setup };\n}\n\nfunction createBuilder(): { api: PiprBuilder; plan(): RuntimePlan } {\n const models: ModelProfile[] = [];\n const agents: Agent[] = [];\n const tasks: Task<unknown>[] = [];\n const changeRequestTriggers: RuntimePlan[\"changeRequestTriggers\"] = [];\n const commands: RuntimePlan[\"commands\"] = [];\n const tools: AgentTool[] = [];\n const publication: RuntimePlan[\"publication\"] = {};\n let checks: ChecksOptions | undefined;\n let limits: RuntimeLimits | undefined;\n\n const api: PiprBuilder = {\n tools: {\n readOnly: [\n {\n kind: \"pipr.tool\",\n name: \"readOnly\",\n [builtinReadOnlyToolBrand]: true,\n } as AgentTool,\n ],\n } satisfies BuiltinToolCatalog,\n schemas,\n on: {\n changeRequest(options) {\n if (!Array.isArray(options.actions) || !options.task) {\n throw new Error(\"pipr.on.changeRequest requires { actions, task }\");\n }\n changeRequestTriggers.push({\n actions: options.actions,\n task: options.task as Task<unknown>,\n });\n },\n },\n secret(options) {\n if (!options || typeof options.name !== \"string\") {\n throw new Error(\"pipr.secret requires { name }\");\n }\n if (!/^[A-Z_][A-Z0-9_]*$/.test(options.name)) {\n throw new Error(`Secret '${options.name}' must be an environment variable name`);\n }\n return { kind: \"pipr.secret\", name: options.name };\n },\n model(options) {\n if (!options || typeof options.provider !== \"string\" || typeof options.model !== \"string\") {\n throw new Error(\"pipr.model requires { provider, model }\");\n }\n if (!options.provider || !options.model) {\n throw new Error(\"pipr.model requires provider and model\");\n }\n const id = options.id ?? `${options.provider}/${options.model}`;\n const profile: ModelProfile = {\n kind: \"pipr.model\",\n id,\n provider: options.provider,\n model: options.model,\n apiKey: options.apiKey,\n options: options.options,\n };\n models.push(profile);\n return profile;\n },\n agent(definition) {\n const agent = createAgent(definition);\n agents.push(agent);\n return agent;\n },\n task(definition) {\n if (!definition.name || typeof definition.run !== \"function\") {\n throw new Error(\"pipr.task requires { name, run }\");\n }\n const task = {\n kind: \"pipr.task\" as const,\n name: definition.name,\n check: definition.check,\n ...(definition.local === false ? { local: false as const } : {}),\n handler: definition.run,\n };\n tasks.push(task as Task<unknown>);\n return task;\n },\n reviewer(options) {\n return createReviewer(api, options);\n },\n review(options) {\n assertKnownReviewRecipeOptions(options);\n registerReviewRecipe(api, options);\n },\n config(options) {\n assertKnownPiprConfigOptions(options);\n mergePublicationConfig(publication, options.publication);\n checks = mergeConfigField(\"checks\", checks, options.checks);\n limits = mergeLimits(limits, options.limits);\n },\n command(options) {\n if (typeof options.pattern !== \"string\" || !options.task) {\n throw new Error(\"pipr.command requires { pattern, task }\");\n }\n const pattern = options.pattern;\n const tokens = pattern.trim().split(/\\s+/).filter(Boolean);\n if (tokens.length === 0) {\n throw new Error(\"Command pattern must not be empty\");\n }\n if (tokens[0] !== \"@pipr\") {\n throw new Error(`Command pattern '${pattern}' must start with @pipr`);\n }\n assertSupportedCommandRestCapture(pattern);\n commands.push({\n pattern,\n permission: options.permission ?? \"write\",\n description: options.description,\n parse: options.parse as ((arguments_: Record<string, string>) => unknown) | undefined,\n task: options.task as Task<unknown>,\n });\n },\n use(plugin) {\n return plugin.setup(api);\n },\n tool(definition) {\n if (definition.name === \"readOnly\") {\n throw new Error(\"Tool name 'readOnly' is reserved for pipr built-in tools\");\n }\n const execute = definition.execute;\n let run = definition.run;\n if (!run && !execute) {\n throw new Error(`Tool '${definition.name}' must define run`);\n }\n if (!run) {\n const executeTool = execute;\n if (!executeTool) {\n throw new Error(`Tool '${definition.name}' must define run`);\n }\n run = (options: ToolRunOptions<unknown>) =>\n executeToolWithRuntimeInput(executeTool, options);\n }\n const tool = {\n kind: \"pipr.tool\" as const,\n ...definition,\n run,\n };\n tools.push(tool);\n return tool;\n },\n schema,\n jsonSchema,\n prompt(strings, ...values) {\n let text = \"\";\n for (let index = 0; index < strings.length; index += 1) {\n text += strings[index] ?? \"\";\n if (index < values.length) {\n text += renderPromptValue(values[index]);\n }\n }\n return {\n kind: \"pipr.prompt\",\n value: stripCommonIndent(text).trim(),\n };\n },\n section(title, value) {\n const rendered = renderPromptValue(value);\n return {\n kind: \"pipr.prompt\",\n value: `## ${title}\\n\\n${rendered}`,\n };\n },\n json(value, options) {\n const text = JSON.stringify(value, null, options?.pretty === false ? 0 : 2);\n if (options?.maxCharacters !== undefined && text.length > options.maxCharacters) {\n throw new Error(`JSON prompt value exceeded ${options.maxCharacters} characters`);\n }\n return { kind: \"pipr.prompt\", value: text };\n },\n };\n\n return {\n api,\n plan() {\n assertUnique(\n tasks.map((task) => task.name),\n \"task\",\n );\n assertUnique(\n commands.map((command) => command.pattern),\n \"command\",\n );\n assertModelIdentity(models);\n return {\n models,\n agents,\n tasks,\n changeRequestTriggers,\n commands,\n tools,\n publication,\n checks,\n limits,\n };\n },\n };\n}\n\nfunction registerReviewRecipe(api: PiprBuilder, options: ReviewRecipeOptions): void {\n const id = options.id;\n const agent = options.reviewer ?? createReviewer(api, reviewRecipeReviewerOptions(options, id));\n\n const task = createReviewRecipeTask(api, id, agent, options);\n registerReviewRecipeEntrypoints(api, task, options);\n}\n\nconst reviewRecipeOptionKeys = new Set([\n \"id\",\n \"entrypoints\",\n \"comment\",\n \"check\",\n \"timeout\",\n \"paths\",\n \"reviewer\",\n \"name\",\n \"model\",\n \"fallbacks\",\n \"instructions\",\n \"prompt\",\n \"tools\",\n]);\n\nconst reviewRecipeEntrypointKeys = new Set([\"changeRequest\", \"command\"]);\n\nconst modelProfileConfigSchema: z.ZodType<ModelProfile> = z.custom<ModelProfile>(\n (value) =>\n typeof value === \"object\" &&\n value !== null &&\n (value as { kind?: unknown }).kind === \"pipr.model\" &&\n typeof (value as { id?: unknown }).id === \"string\" &&\n typeof (value as { provider?: unknown }).provider === \"string\" &&\n typeof (value as { model?: unknown }).model === \"string\",\n);\n\nconst autoResolveUserRepliesOptionsSchema: z.ZodType<AutoResolveUserRepliesOptions> =\n z.strictObject({\n enabled: z.boolean().optional(),\n respondWhenStillValid: z.boolean().optional(),\n allowedActors: z.enum([\"author-or-write\", \"write\", \"any\"]).optional(),\n });\n\nconst autoResolveOptionsSchema: z.ZodType<AutoResolveOptions> = z.union([\n z.literal(false),\n z.strictObject({\n enabled: z.boolean().optional(),\n model: modelProfileConfigSchema.optional(),\n instructions: z.string().min(1).max(4000).optional(),\n synchronize: z.boolean().optional(),\n userReplies: z.union([z.boolean(), autoResolveUserRepliesOptionsSchema]).optional(),\n }),\n]);\n\nconst publicationOptionsSchema: z.ZodType<PublicationOptions> = z.strictObject({\n maxInlineComments: z.number().int().min(0).max(50).optional(),\n autoResolve: autoResolveOptionsSchema.optional(),\n});\n\nconst aggregateCheckOptionsSchema: z.ZodType<AggregateCheckOptions> = z.union([\n z.literal(false),\n z.strictObject({\n enabled: z.boolean().optional(),\n name: z.string().min(1).optional(),\n }),\n]);\n\nconst checksOptionsSchema: z.ZodType<ChecksOptions> = z.strictObject({\n aggregate: aggregateCheckOptionsSchema.optional(),\n});\n\nconst diffManifestLimitsSchema: z.ZodType<DiffManifestLimits> = z.strictObject({\n fullMaxBytes: z.number().int().positive().optional(),\n fullMaxEstimatedTokens: z.number().int().positive().optional(),\n condensedMaxBytes: z.number().int().positive().optional(),\n condensedMaxEstimatedTokens: z.number().int().positive().optional(),\n toolResponseMaxBytes: z.number().int().positive().optional(),\n});\n\nconst runtimeLimitsSchema: z.ZodType<RuntimeLimits> = z.strictObject({\n timeoutSeconds: z.number().int().positive().max(3600).optional(),\n diffManifest: diffManifestLimitsSchema.optional(),\n});\n\nconst piprConfigOptionsSchema: z.ZodType<PiprConfigOptions> = z.strictObject({\n publication: publicationOptionsSchema.optional(),\n checks: checksOptionsSchema.optional(),\n limits: runtimeLimitsSchema.optional(),\n});\n\nfunction assertKnownReviewRecipeOptions(options: ReviewRecipeOptions): void {\n const unknownKeys = Object.keys(options).filter((key) => !reviewRecipeOptionKeys.has(key));\n if (unknownKeys.length > 0) {\n throw new Error(`pipr.review received unsupported option fields: ${unknownKeys.join(\", \")}.`);\n }\n\n const entrypoints = options.entrypoints;\n if (entrypoints && typeof entrypoints === \"object\") {\n const unknownEntrypointKeys = Object.keys(entrypoints).filter(\n (key) => !reviewRecipeEntrypointKeys.has(key),\n );\n if (unknownEntrypointKeys.length > 0) {\n throw new Error(\n `pipr.review entrypoints received unsupported fields: ${unknownEntrypointKeys.join(\", \")}.`,\n );\n }\n }\n}\n\nfunction assertKnownPiprConfigOptions(options: unknown): asserts options is PiprConfigOptions {\n const parsed = piprConfigOptionsSchema.safeParse(options);\n if (!parsed.success) {\n throw new Error(formatPiprConfigOptionsError(parsed.error));\n }\n}\n\nfunction formatPiprConfigOptionsError(error: z.ZodError): string {\n const unsupportedFields = firstUnsupportedConfigFields(error.issues, []);\n if (unsupportedFields) {\n return `${piprConfigLabel(unsupportedFields.path)} received unsupported option fields: ${unsupportedFields.keys.join(\n \", \",\n )}`;\n }\n return `pipr.config received invalid option value: ${z.prettifyError(error)}`;\n}\n\nfunction firstUnsupportedConfigFields(\n issues: readonly z.ZodIssue[],\n parentPath: readonly PropertyKey[],\n): { path: PropertyKey[]; keys: string[] } | undefined {\n for (const issue of issues) {\n const path = [...parentPath, ...issue.path];\n if (issue.code === \"unrecognized_keys\") {\n return { path, keys: issue.keys };\n }\n if (issue.code === \"invalid_union\") {\n for (const branchIssues of issue.errors) {\n const unsupportedFields = firstUnsupportedConfigFields(branchIssues, path);\n if (unsupportedFields) {\n return unsupportedFields;\n }\n }\n }\n }\n return undefined;\n}\n\nfunction piprConfigLabel(pathSegments: PropertyKey[]): string {\n const path = pathSegments.join(\".\");\n return path ? `pipr.config ${path}` : \"pipr.config\";\n}\n\nfunction reviewRecipeReviewerOptions(options: ReviewerOptions, name: string): ReviewerOptions {\n if (!options.model || !options.instructions) {\n throw new Error(\"pipr.review requires model and instructions when reviewer is not provided\");\n }\n return {\n name,\n model: options.model,\n fallbacks: options.fallbacks,\n instructions: options.instructions,\n prompt: options.prompt,\n tools: options.tools,\n timeout: options.timeout,\n };\n}\n\nfunction createReviewer(api: PiprBuilder, options: ReviewerOptions): Reviewer {\n return api.agent<DefaultReviewInput, ReviewResult>({\n name: options.name ?? \"reviewer\",\n model: options.model,\n fallbacks: options.fallbacks,\n instructions: options.instructions,\n tools: options.tools ?? api.tools.readOnly,\n output: api.schemas.review,\n timeout: options.timeout,\n prompt:\n options.prompt ??\n (() =>\n api.prompt`\n Review this change.\n `),\n });\n}\n\nfunction createReviewRecipeTask(\n api: PiprBuilder,\n id: string,\n agent: Agent<DefaultReviewInput, ReviewResult>,\n options: ReviewRecipeOptions,\n): Task {\n return api.task({\n name: id,\n check: options.check,\n async run(context) {\n const manifest = await context.change.diffManifest({\n compressed: true,\n paths: options.paths,\n });\n if (options.paths && manifest.files.length === 0) {\n context.check.neutral(\"No changed files matched this review's path scope.\");\n await context.comment({ main: \"No changed files matched this review's path scope.\" });\n return;\n }\n const result = await context.pi.run(\n agent,\n { manifest, change: context.change },\n {\n timeout: options.timeout,\n paths: options.paths,\n },\n );\n const source =\n typeof options.comment === \"function\"\n ? await options.comment(result, {\n review: { id },\n repository: context.repository,\n change: context.change,\n platform: context.platform,\n })\n : (options.comment ?? defaultReviewComment(result));\n await context.comment(source);\n },\n });\n}\n\nfunction defaultReviewComment(result: ReviewResult): CommentValue {\n return {\n main: defaultReviewMarkdown(result),\n inlineFindings: result.inlineFindings,\n };\n}\n\nfunction defaultReviewMarkdown(result: ReviewResult): Markdown {\n const findings =\n result.inlineFindings.length === 0\n ? \"No inline findings.\"\n : result.inlineFindings.map((finding) => `- ${finding.body}`).join(\"\\n\");\n return `## Summary\\n\\n${result.summary.body}\\n\\n## Findings\\n\\n${findings}`;\n}\n\nfunction registerReviewRecipeEntrypoints(\n api: PiprBuilder,\n task: Task,\n options: ReviewRecipeOptions,\n): void {\n const changeRequest = reviewChangeRequestEntrypoint(options);\n if (changeRequest) {\n api.on.changeRequest({ actions: changeRequest, task });\n }\n const command = reviewCommandEntrypoint(options);\n if (command) {\n api.command({ pattern: command.pattern, ...command.options, task });\n }\n}\n\nfunction reviewChangeRequestEntrypoint(\n options: ReviewRecipeOptions,\n): ChangeRequestAction[] | undefined {\n const entrypoint = options.entrypoints?.changeRequest;\n return entrypoint === false\n ? undefined\n : (entrypoint ?? [\"opened\", \"updated\", \"reopened\", \"ready\"]);\n}\n\nfunction reviewCommandEntrypoint(options: ReviewRecipeOptions):\n | {\n pattern: string;\n options: CommandOptions<unknown>;\n }\n | undefined {\n const entrypoint = options.entrypoints?.command;\n if (entrypoint === false) {\n return undefined;\n }\n if (typeof entrypoint === \"object\") {\n return {\n pattern: entrypoint.pattern ?? \"@pipr review\",\n options: {\n permission: entrypoint.permission ?? \"write\",\n description: entrypoint.description,\n },\n };\n }\n return {\n pattern: entrypoint ?? \"@pipr review\",\n options: { permission: \"write\" as const },\n };\n}\n\nfunction mergePublicationConfig(\n target: RuntimePlan[\"publication\"],\n next: PublicationOptions | undefined,\n): void {\n if (!next) {\n return;\n }\n if (next.maxInlineComments !== undefined) {\n if (\n target.maxInlineComments !== undefined &&\n target.maxInlineComments !== next.maxInlineComments\n ) {\n throw new Error(\"pipr.config publication.maxInlineComments conflicts with existing value\");\n }\n target.maxInlineComments = next.maxInlineComments;\n }\n if (next.autoResolve !== undefined) {\n if (\n target.autoResolve !== undefined &&\n stableJson(target.autoResolve) !== stableJson(next.autoResolve)\n ) {\n throw new Error(\"pipr.config publication.autoResolve conflicts with existing value\");\n }\n target.autoResolve = next.autoResolve;\n }\n}\n\nfunction mergeConfigField<T>(\n name: string,\n current: T | undefined,\n next: T | undefined,\n): T | undefined {\n if (next === undefined) {\n return current;\n }\n if (current !== undefined && stableJson(current) !== stableJson(next)) {\n throw new Error(`pipr.config ${name} conflicts with existing value`);\n }\n return next;\n}\n\nfunction mergeLimits(current: RuntimeLimits | undefined, next: RuntimeLimits | undefined) {\n if (!next) {\n return current;\n }\n assertRuntimeLimitConflicts(current, next);\n return {\n ...current,\n ...next,\n diffManifest:\n (next.diffManifest ?? current?.diffManifest)\n ? { ...current?.diffManifest, ...next.diffManifest }\n : undefined,\n };\n}\n\nfunction assertRuntimeLimitConflicts(\n current: RuntimeLimits | undefined,\n next: RuntimeLimits,\n): void {\n const currentRecord = current as Record<string, unknown> | undefined;\n for (const [key, value] of Object.entries(next)) {\n if (key === \"diffManifest\") {\n continue;\n }\n if (\n value !== undefined &&\n currentRecord?.[key] !== undefined &&\n stableJson(currentRecord[key]) !== stableJson(value)\n ) {\n throw new Error(`pipr.config limits.${key} conflicts with existing value`);\n }\n }\n assertDiffManifestLimitConflicts(current, next);\n}\n\nfunction assertDiffManifestLimitConflicts(\n current: RuntimeLimits | undefined,\n next: RuntimeLimits,\n): void {\n if (current?.diffManifest && next.diffManifest) {\n for (const [key, value] of Object.entries(next.diffManifest)) {\n if (\n value !== undefined &&\n (current.diffManifest as Record<string, unknown>)[key] !== undefined &&\n (current.diffManifest as Record<string, unknown>)[key] !== value\n ) {\n throw new Error(`pipr.config limits.diffManifest.${key} conflicts with existing value`);\n }\n }\n }\n}\n\nfunction createAgent<Input, Output>(\n definition: AgentDefinition<Input, Output>,\n): Agent<Input, Output> {\n return {\n kind: \"pipr.agent\",\n name: definition.name,\n definition,\n extend(patch) {\n return createAgent({\n ...definition,\n ...patch,\n instructions:\n patch.instructions === undefined\n ? definition.instructions\n : {\n kind: \"pipr.prompt\",\n value:\n `${renderPromptValue(definition.instructions)}\\n\\n${renderPromptValue(patch.instructions)}`.trim(),\n },\n });\n },\n };\n}\n\nfunction assertUnique(values: string[], label: string): void {\n const seen = new Set<string>();\n for (const value of values) {\n if (seen.has(value)) {\n throw new Error(`Duplicate ${label} '${value}'`);\n }\n seen.add(value);\n }\n}\n\nfunction assertModelIdentity(models: ModelProfile[]): void {\n assertNoDuplicateModelConfigs(models);\n assertUniqueModelIds(models);\n assertProviderModelAliasesDisambiguated(models);\n}\n\nfunction assertNoDuplicateModelConfigs(models: ModelProfile[]): void {\n const effectiveConfigs = new Map<string, string>();\n for (const model of models) {\n const effectiveConfig = stableJson({\n provider: model.provider,\n model: model.model,\n apiKeyEnv: model.apiKey?.name,\n options: model.options,\n });\n const existingConfigId = effectiveConfigs.get(effectiveConfig);\n if (existingConfigId) {\n throw new Error(\n `Duplicate model config for '${model.id}'. Reuse model '${existingConfigId}' instead.`,\n );\n }\n effectiveConfigs.set(effectiveConfig, model.id);\n }\n}\n\nfunction assertUniqueModelIds(models: ModelProfile[]): void {\n const ids = new Set<string>();\n for (const model of models) {\n if (ids.has(model.id)) {\n const providerModel = `${model.provider}/${model.model}`;\n throw new Error(\n model.id === providerModel\n ? `Model '${providerModel}' is configured more than once with different options. Add an explicit id.`\n : `Duplicate model id '${model.id}'`,\n );\n }\n ids.add(model.id);\n }\n}\n\nfunction assertProviderModelAliasesDisambiguated(models: ModelProfile[]): void {\n const providerModels = new Map<string, string>();\n for (const model of models) {\n const providerModel = `${model.provider}/${model.model}`;\n const existingProviderModelId = providerModels.get(providerModel);\n if (\n existingProviderModelId &&\n (model.id === providerModel || existingProviderModelId === providerModel)\n ) {\n throw new Error(\n `Model '${providerModel}' is configured more than once with different options. Add an explicit id.`,\n );\n }\n providerModels.set(providerModel, model.id);\n }\n}\n\nfunction stableJson(value: unknown): string {\n return JSON.stringify(stableJsonValue(value));\n}\n\nfunction executeToolWithRuntimeInput<Input, Output>(\n execute: (context: TaskContext, input: Input) => Promise<Output>,\n options: ToolRunOptions<unknown>,\n): Promise<Output> {\n // Runtime tool inputs are parsed by the tool input schema before this bridge.\n return execute(options.ctx, options.input as Input);\n}\n\nfunction stableJsonValue(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map(stableJsonValue);\n }\n if (typeof value === \"object\" && value !== null) {\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>)\n .filter(([, item]) => item !== undefined)\n .toSorted(([left], [right]) => left.localeCompare(right))\n .map(([key, item]) => [key, stableJsonValue(item)]),\n );\n }\n return value;\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { F as ModelProfile, J as PublicationOptions, X as RepositoryPermission, _ as ChecksOptions, a as AgentTool, ct as Task, f as ChangeRequestAction, nt as RuntimeLimits, q as PromptValue, t as Agent } from "./index-DMjdjJV4.mjs";
1
+ import { $ as ChecksOptions, A as Task, B as AgentTool, I as Agent, Q as ChangeRequestAction, at as RepositoryPermission, it as PublicationOptions, nt as ModelProfile, q as PromptValue, vt as RuntimeLimits } from "./index-oc6nXCw8.mjs";
2
2
 
3
3
  //#region src/runtime-contract.d.ts
4
4
  /** Runtime plan produced from user configuration. */
@@ -23,6 +23,20 @@ type RuntimePlan = {
23
23
  limits?: RuntimeLimits;
24
24
  };
25
25
  //#endregion
26
+ //#region src/internal-contract.d.ts
27
+ type ConfigFactoryValue = {
28
+ readonly kind: "pipr.config-factory";
29
+ };
30
+ //#endregion
31
+ //#region src/command-grammar.d.ts
32
+ declare function commandPatternParts(pattern: string): string[];
33
+ declare function tokenizeCommandPattern(value: string): string[];
34
+ declare function unsupportedCommandRestCaptureError(pattern: string): string | undefined;
35
+ declare function assertSupportedCommandRestCapture(pattern: string): void;
36
+ declare function isOptionalCommandPatternPart(value: string): boolean;
37
+ declare function isCommandCaptureToken(value: string): boolean;
38
+ declare function isCommandRestCaptureToken(value: string): boolean;
39
+ //#endregion
26
40
  //#region src/prompt-render.d.ts
27
41
  /** Renders a prompt source/value into plain text for Pi prompts. */
28
42
  declare function renderPromptValue(value: PromptValue): string;
@@ -40,9 +54,6 @@ declare function embeddedSdkDeclaration(modules: SdkDeclarationModule[]): string
40
54
  //#region src/internal.d.ts
41
55
  /** Stable identifier for pipr's built-in pull request review output schema. */
42
56
  declare const reviewOutputSchemaId = "core/pr-review";
43
- type ConfigFactoryValue = {
44
- readonly kind: "pipr.config-factory";
45
- };
46
57
  /** Returns whether a tool is one of pipr's built-in read-only tools. */
47
58
  declare function isBuiltinReadOnlyTool(tool: AgentTool): boolean;
48
59
  /** Checks that an unknown value is a pipr configuration factory. */
@@ -50,5 +61,5 @@ declare function isPiprConfigFactory(value: unknown): value is ConfigFactoryValu
50
61
  /** Builds a runtime plan from a pipr configuration factory. */
51
62
  declare function buildPiprPlan(factory: unknown): RuntimePlan;
52
63
  //#endregion
53
- export { type RuntimePlan, type SdkDeclarationModule, buildPiprPlan, embeddedSdkDeclaration, isBuiltinReadOnlyTool, isPiprConfigFactory, readSdkDeclarationSourceWithChunk, renderPromptValue, reviewOutputSchemaId };
64
+ export { type RuntimePlan, type SdkDeclarationModule, assertSupportedCommandRestCapture, buildPiprPlan, commandPatternParts, embeddedSdkDeclaration, isBuiltinReadOnlyTool, isCommandCaptureToken, isCommandRestCaptureToken, isOptionalCommandPatternPart, isPiprConfigFactory, readSdkDeclarationSourceWithChunk, renderPromptValue, reviewOutputSchemaId, tokenizeCommandPattern, unsupportedCommandRestCaptureError };
54
65
  //# sourceMappingURL=internal.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"internal.d.mts","names":[],"sources":["../src/runtime-contract.ts","../src/prompt-render.ts","../src/standalone-declaration.ts","../src/internal.ts"],"mappings":";;;;KAaY,WAAA;EACV,MAAA,EAAQ,YAAA;EACR,MAAA,EAAQ,KAAA;EACR,KAAA,EAAO,IAAA;EACP,qBAAA,EAAuB,KAAA;IAAQ,OAAA,EAAS,mBAAA;IAAuB,IAAA,EAAM,IAAA;EAAA;EACrE,QAAA,EAAU,KAAA;IACR,OAAA;IACA,UAAA,EAAY,oBAAA;IACZ,WAAA;IACA,KAAA,IAAS,UAAA,EAAY,MAAA;IACrB,IAAA,EAAM,IAAA;EAAA;EAER,KAAA,EAAO,SAAA;EACP,WAAA,EAAa,kBAAA;EACb,MAAA,GAAS,aAAA;EACT,MAAA,GAAS,aAAA;AAAA;;;;iBCzBK,iBAAA,CAAkB,KAAkB,EAAX,WAAW;;;KCDxC,oBAAA;EACV,UAAA;EACA,MAAM;AAAA;AAAA,iBAGc,iCAAA,CACpB,MAAA;EAAU,UAAA;AAAA,GACV,eAAA,WACC,OAAO;AAAA,iBAgBM,sBAAA,CAAuB,OAA+B,EAAtB,oBAAoB;;;;cCZvD,oBAAA;AAAA,KAKR,kBAAA;EAAA,SACM,IAAI;AAAA;;iBASC,qBAAA,CAAsB,IAAe,EAAT,SAAS;;iBAKrC,mBAAA,CAAoB,KAAA,YAAiB,KAAA,IAAS,kBAAkB;;iBAUhE,aAAA,CAAc,OAAA,YAAmB,WAAW"}
1
+ {"version":3,"file":"internal.d.mts","names":[],"sources":["../src/runtime-contract.ts","../src/internal-contract.ts","../src/command-grammar.ts","../src/prompt-render.ts","../src/standalone-declaration.ts","../src/internal.ts"],"mappings":";;;;KAYY,WAAA;EACV,MAAA,EAAQ,YAAA;EACR,MAAA,EAAQ,KAAA;EACR,KAAA,EAAO,IAAA;EACP,qBAAA,EAAuB,KAAA;IAAQ,OAAA,EAAS,mBAAA;IAAuB,IAAA,EAAM,IAAA;EAAA;EACrE,QAAA,EAAU,KAAA;IACR,OAAA;IACA,UAAA,EAAY,oBAAA;IACZ,WAAA;IACA,KAAA,IAAS,UAAA,EAAY,MAAA;IACrB,IAAA,EAAM,IAAA;EAAA;EAER,KAAA,EAAO,SAAA;EACP,WAAA,EAAa,kBAAA;EACb,MAAA,GAAS,aAAA;EACT,MAAA,GAAS,aAAA;AAAA;;;KCtBC,kBAAA;EAAA,SACD,IAAI;AAAA;;;iBCNC,mBAAA,CAAoB,OAAe;AAAA,iBAInC,sBAAA,CAAuB,KAAa;AAAA,iBAIpC,kCAAA,CAAmC,OAAe;AAAA,iBAmBlD,iCAAA,CAAkC,OAAe;AAAA,iBAOjD,4BAAA,CAA6B,KAAa;AAAA,iBAI1C,qBAAA,CAAsB,KAAa;AAAA,iBAInC,yBAAA,CAA0B,KAAa;;;;iBCvCvC,iBAAA,CAAkB,KAAkB,EAAX,WAAW;;;KCDxC,oBAAA;EACV,UAAA;EACA,MAAM;AAAA;AAAA,iBAGc,iCAAA,CACpB,MAAA;EAAU,UAAA;AAAA,GACV,eAAA,WACC,OAAO;AAAA,iBAgBM,sBAAA,CAAuB,OAA+B,EAAtB,oBAAoB;;;;cCGvD,oBAAA;;iBAGG,qBAAA,CAAsB,IAAe,EAAT,SAAS;;iBAKrC,mBAAA,CAAoB,KAAA,YAAiB,KAAA,IAAS,kBAAkB;;iBAUhE,aAAA,CAAc,OAAA,YAAmB,WAAW"}
package/dist/internal.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { t as renderPromptValue } from "./prompt-render-CHlrR9Sa.mjs";
1
+ import { a as commandPatternParts, c as isOptionalCommandPatternPart, i as assertSupportedCommandRestCapture, l as tokenizeCommandPattern, n as builtinReadOnlyToolBrand, o as isCommandCaptureToken, r as configFactoryBrand, s as isCommandRestCaptureToken, t as renderPromptValue, u as unsupportedCommandRestCaptureError } from "./prompt-render-BWiLG-qu.mjs";
2
2
  import path from "node:path";
3
3
  //#region src/standalone-declaration.ts
4
4
  async function readSdkDeclarationSourceWithChunk(module, declarationPath) {
@@ -71,8 +71,6 @@ function zodShimDeclaration() {
71
71
  //#region src/internal.ts
72
72
  /** Stable identifier for pipr's built-in pull request review output schema. */
73
73
  const reviewOutputSchemaId = "core/pr-review";
74
- const configFactoryBrand = Symbol.for("pipr.config.factory");
75
- const builtinReadOnlyToolBrand = Symbol.for("pipr.builtin.readOnlyTool");
76
74
  /** Returns whether a tool is one of pipr's built-in read-only tools. */
77
75
  function isBuiltinReadOnlyTool(tool) {
78
76
  return Reflect.get(tool, builtinReadOnlyToolBrand) === true;
@@ -90,6 +88,6 @@ function isInternalPiprConfigFactory(value) {
90
88
  return isPiprConfigFactory(value) && typeof Reflect.get(value, "build") === "function";
91
89
  }
92
90
  //#endregion
93
- export { buildPiprPlan, embeddedSdkDeclaration, isBuiltinReadOnlyTool, isPiprConfigFactory, readSdkDeclarationSourceWithChunk, renderPromptValue, reviewOutputSchemaId };
91
+ export { assertSupportedCommandRestCapture, buildPiprPlan, commandPatternParts, embeddedSdkDeclaration, isBuiltinReadOnlyTool, isCommandCaptureToken, isCommandRestCaptureToken, isOptionalCommandPatternPart, isPiprConfigFactory, readSdkDeclarationSourceWithChunk, renderPromptValue, reviewOutputSchemaId, tokenizeCommandPattern, unsupportedCommandRestCaptureError };
94
92
 
95
93
  //# sourceMappingURL=internal.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"internal.mjs","names":[],"sources":["../src/standalone-declaration.ts","../src/internal.ts"],"sourcesContent":["import path from \"node:path\";\n\nexport type SdkDeclarationModule = {\n moduleName: string;\n source: string;\n};\n\nexport async function readSdkDeclarationSourceWithChunk(\n module: { moduleName: string },\n declarationPath: string,\n): Promise<string> {\n const source = await Bun.file(declarationPath).text();\n if (module.moduleName !== \"@usepipr/sdk\") {\n return source;\n }\n const chunkFileName = source.match(/from \"\\.\\/(?<chunk>index-[A-Za-z0-9_-]+)\\.mjs\"/)?.groups\n ?.chunk;\n if (!chunkFileName) {\n return source;\n }\n const chunkPath = path.join(path.dirname(declarationPath), `${chunkFileName}.d.mts`);\n const chunk = await Bun.file(chunkPath).text();\n const declarations = chunk.replace(/^export \\{.*\\};$/gm, \"\");\n return `${declarations}\\n${source}`;\n}\n\nexport function embeddedSdkDeclaration(modules: SdkDeclarationModule[]): string {\n const declaration = [\n \"// biome-ignore-all format: generated from @usepipr/sdk declarations\",\n \"// biome-ignore-all assist/source/organizeImports: generated from @usepipr/sdk declarations\",\n ...modules.map(declarationModuleBlock),\n \"\",\n ].join(\"\\n\");\n if (declaration.includes('from \"zod\"') || declaration.includes(\"z.ZodType\")) {\n throw new Error(\"embedded SDK declaration must be standalone and must not import zod\");\n }\n return declaration;\n}\n\nfunction declarationModuleBlock(module: SdkDeclarationModule): string {\n return [`declare module \"${module.moduleName}\" {`, declarationSource(module).trim(), \"}\"].join(\n \"\\n\",\n );\n}\n\nfunction declarationSource(module: SdkDeclarationModule): string {\n const source = module.source\n .replace(/^declare /gm, \"\")\n .replace(/^import \\{ (?:z|z, z as z\\$1|z as z\\$1) \\} from \"zod\";$/gm, zodShimDeclaration())\n .replaceAll(\"z$1.\", \"z.\")\n .replaceAll(\"z.ZodType\", \"ZodType\")\n .replaceAll('from \"./index.js\"', 'from \"@usepipr/sdk\"')\n .replaceAll('from \"./index.mjs\"', 'from \"@usepipr/sdk\"')\n .replace(/from \"\\.\\/index-[^\"]+\\.mjs\"/g, 'from \"@usepipr/sdk\"')\n .replace(/^import .* from \"@usepipr\\/sdk\";$/gm, \"\")\n .replace(/^\\/\\/# sourceMappingURL=.*$/gm, \"\");\n return module.moduleName === \"@usepipr/sdk\"\n ? source\n : source\n .replace(\n /^export type \\{(?<exports>.*)\\};$/gm,\n 'export type {$<exports>} from \"@usepipr/sdk\";',\n )\n .replace(/^export \\{(?<exports>.*)\\};$/gm, 'export {$<exports>} from \"@usepipr/sdk\";');\n}\n\nfunction zodShimDeclaration(): string {\n return [\n \"type ZodInfer<T> = T extends { parse(value: unknown): infer Output } ? Output : never;\",\n \"type ZodType<T = unknown, Optional extends boolean = false> = {\",\n \" readonly _piprOptional: Optional;\",\n \" parse(value: unknown): T;\",\n \" optional(): ZodType<T | undefined, true>;\",\n \" min(value: number): ZodType<T, Optional>;\",\n \" max(value: number): ZodType<T, Optional>;\",\n \" int(): ZodType<T, Optional>;\",\n \" positive(): ZodType<T, Optional>;\",\n \" finite(): ZodType<T, Optional>;\",\n \"};\",\n \"type ZodAny = ZodType<unknown, boolean>;\",\n \"type ZodOptionalKeys<T extends Record<string, ZodAny>> = { [K in keyof T]: T[K] extends ZodType<unknown, true> ? K : never }[keyof T];\",\n \"type ZodObjectOutput<T extends Record<string, ZodAny>> = { [K in Exclude<keyof T, ZodOptionalKeys<T>>]: ZodInfer<T[K]> } & { [K in ZodOptionalKeys<T>]?: ZodInfer<T[K]> };\",\n \"const z: {\",\n \" string(): ZodType<string>;\",\n \" number(): ZodType<number>;\",\n \" boolean(): ZodType<boolean>;\",\n \" null(): ZodType<null>;\",\n \" unknown(): ZodType<unknown>;\",\n \" any(): ZodType<unknown>;\",\n \" literal<T extends string | number | boolean | null>(value: T): ZodType<T>;\",\n \" enum<const T extends readonly [string, ...string[]]>(values: T): ZodType<T[number]>;\",\n \" array<T extends ZodAny>(schema: T): ZodType<Array<ZodInfer<T>>>;\",\n \" record<T extends ZodAny>(key: ZodType<string>, value: T): ZodType<Record<string, ZodInfer<T>>>;\",\n \" strictObject<T extends Record<string, ZodAny>>(shape: T): ZodType<ZodObjectOutput<T>>;\",\n \" object<T extends Record<string, ZodAny>>(shape: T): ZodType<ZodObjectOutput<T>>;\",\n \" looseObject<T extends Record<string, ZodAny>>(shape: T): ZodType<ZodObjectOutput<T> & Record<string, unknown>>;\",\n \" union<const T extends readonly [ZodAny, ZodAny, ...ZodAny[]]>(schemas: T): ZodType<ZodInfer<T[number]>>;\",\n \" json(): ZodType<JsonValue>;\",\n \" fromJSONSchema(schema: JsonSchema): ZodType<unknown>;\",\n \" toJSONSchema(schema: ZodAny): JsonSchema;\",\n \"};\",\n ].join(\"\\n\");\n}\n","import type { AgentTool } from \"./index.js\";\n\nexport type { RuntimePlan } from \"./runtime-contract.js\";\n\nimport type { RuntimePlan } from \"./runtime-contract.js\";\n\nexport { renderPromptValue } from \"./prompt-render.js\";\nexport type { SdkDeclarationModule } from \"./standalone-declaration.js\";\nexport {\n embeddedSdkDeclaration,\n readSdkDeclarationSourceWithChunk,\n} from \"./standalone-declaration.js\";\n\n/** Stable identifier for pipr's built-in pull request review output schema. */\nexport const reviewOutputSchemaId = \"core/pr-review\";\n\nconst configFactoryBrand = Symbol.for(\"pipr.config.factory\");\nconst builtinReadOnlyToolBrand = Symbol.for(\"pipr.builtin.readOnlyTool\");\n\ntype ConfigFactoryValue = {\n readonly kind: \"pipr.config-factory\";\n};\n\ntype InternalPiprConfigFactory = ConfigFactoryValue & {\n readonly [configFactoryBrand]: true;\n build(): RuntimePlan;\n};\n\n/** Returns whether a tool is one of pipr's built-in read-only tools. */\nexport function isBuiltinReadOnlyTool(tool: AgentTool): boolean {\n return Reflect.get(tool, builtinReadOnlyToolBrand) === true;\n}\n\n/** Checks that an unknown value is a pipr configuration factory. */\nexport function isPiprConfigFactory(value: unknown): value is ConfigFactoryValue {\n return (\n typeof value === \"object\" &&\n value !== null &&\n Reflect.get(value, \"kind\") === \"pipr.config-factory\" &&\n Reflect.get(value, configFactoryBrand) === true\n );\n}\n\n/** Builds a runtime plan from a pipr configuration factory. */\nexport function buildPiprPlan(factory: unknown): RuntimePlan {\n if (!isInternalPiprConfigFactory(factory)) {\n throw new Error(\"Expected a pipr configuration factory\");\n }\n return factory.build();\n}\n\nfunction isInternalPiprConfigFactory(value: unknown): value is InternalPiprConfigFactory {\n return isPiprConfigFactory(value) && typeof Reflect.get(value, \"build\") === \"function\";\n}\n"],"mappings":";;;AAOA,eAAsB,kCACpB,QACA,iBACiB;CACjB,MAAM,SAAS,MAAM,IAAI,KAAK,eAAe,CAAC,CAAC,KAAK;CACpD,IAAI,OAAO,eAAe,gBACxB,OAAO;CAET,MAAM,gBAAgB,OAAO,MAAM,gDAAgD,CAAC,EAAE,QAClF;CACJ,IAAI,CAAC,eACH,OAAO;CAET,MAAM,YAAY,KAAK,KAAK,KAAK,QAAQ,eAAe,GAAG,GAAG,cAAc,OAAO;CAGnF,OAAO,IADc,MADD,IAAI,KAAK,SAAS,CAAC,CAAC,KAAK,EAAA,CAClB,QAAQ,sBAAsB,EACpC,EAAE,IAAI;AAC7B;AAEA,SAAgB,uBAAuB,SAAyC;CAC9E,MAAM,cAAc;EAClB;EACA;EACA,GAAG,QAAQ,IAAI,sBAAsB;EACrC;CACF,CAAC,CAAC,KAAK,IAAI;CACX,IAAI,YAAY,SAAS,cAAY,KAAK,YAAY,SAAS,WAAW,GACxE,MAAM,IAAI,MAAM,qEAAqE;CAEvF,OAAO;AACT;AAEA,SAAS,uBAAuB,QAAsC;CACpE,OAAO;EAAC,mBAAmB,OAAO,WAAW;EAAM,kBAAkB,MAAM,CAAC,CAAC,KAAK;EAAG;CAAG,CAAC,CAAC,KACxF,IACF;AACF;AAEA,SAAS,kBAAkB,QAAsC;CAC/D,MAAM,SAAS,OAAO,OACnB,QAAQ,eAAe,EAAE,CAAC,CAC1B,QAAQ,6DAA6D,mBAAmB,CAAC,CAAC,CAC1F,WAAW,QAAQ,IAAI,CAAC,CACxB,WAAW,aAAa,SAAS,CAAC,CAClC,WAAW,uBAAqB,uBAAqB,CAAC,CACtD,WAAW,wBAAsB,uBAAqB,CAAC,CACvD,QAAQ,gCAAgC,uBAAqB,CAAC,CAC9D,QAAQ,uCAAuC,EAAE,CAAC,CAClD,QAAQ,iCAAiC,EAAE;CAC9C,OAAO,OAAO,eAAe,iBACzB,SACA,OACG,QACC,uCACA,iDACF,CAAC,CACA,QAAQ,kCAAkC,4CAA0C;AAC7F;AAEA,SAAS,qBAA6B;CACpC,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CAAC,CAAC,KAAK,IAAI;AACb;;;;ACxFA,MAAa,uBAAuB;AAEpC,MAAM,qBAAqB,OAAO,IAAI,qBAAqB;AAC3D,MAAM,2BAA2B,OAAO,IAAI,2BAA2B;;AAYvE,SAAgB,sBAAsB,MAA0B;CAC9D,OAAO,QAAQ,IAAI,MAAM,wBAAwB,MAAM;AACzD;;AAGA,SAAgB,oBAAoB,OAA6C;CAC/E,OACE,OAAO,UAAU,YACjB,UAAU,QACV,QAAQ,IAAI,OAAO,MAAM,MAAM,yBAC/B,QAAQ,IAAI,OAAO,kBAAkB,MAAM;AAE/C;;AAGA,SAAgB,cAAc,SAA+B;CAC3D,IAAI,CAAC,4BAA4B,OAAO,GACtC,MAAM,IAAI,MAAM,uCAAuC;CAEzD,OAAO,QAAQ,MAAM;AACvB;AAEA,SAAS,4BAA4B,OAAoD;CACvF,OAAO,oBAAoB,KAAK,KAAK,OAAO,QAAQ,IAAI,OAAO,OAAO,MAAM;AAC9E"}
1
+ {"version":3,"file":"internal.mjs","names":[],"sources":["../src/standalone-declaration.ts","../src/internal.ts"],"sourcesContent":["import path from \"node:path\";\n\nexport type SdkDeclarationModule = {\n moduleName: string;\n source: string;\n};\n\nexport async function readSdkDeclarationSourceWithChunk(\n module: { moduleName: string },\n declarationPath: string,\n): Promise<string> {\n const source = await Bun.file(declarationPath).text();\n if (module.moduleName !== \"@usepipr/sdk\") {\n return source;\n }\n const chunkFileName = source.match(/from \"\\.\\/(?<chunk>index-[A-Za-z0-9_-]+)\\.mjs\"/)?.groups\n ?.chunk;\n if (!chunkFileName) {\n return source;\n }\n const chunkPath = path.join(path.dirname(declarationPath), `${chunkFileName}.d.mts`);\n const chunk = await Bun.file(chunkPath).text();\n const declarations = chunk.replace(/^export \\{.*\\};$/gm, \"\");\n return `${declarations}\\n${source}`;\n}\n\nexport function embeddedSdkDeclaration(modules: SdkDeclarationModule[]): string {\n const declaration = [\n \"// biome-ignore-all format: generated from @usepipr/sdk declarations\",\n \"// biome-ignore-all assist/source/organizeImports: generated from @usepipr/sdk declarations\",\n ...modules.map(declarationModuleBlock),\n \"\",\n ].join(\"\\n\");\n if (declaration.includes('from \"zod\"') || declaration.includes(\"z.ZodType\")) {\n throw new Error(\"embedded SDK declaration must be standalone and must not import zod\");\n }\n return declaration;\n}\n\nfunction declarationModuleBlock(module: SdkDeclarationModule): string {\n return [`declare module \"${module.moduleName}\" {`, declarationSource(module).trim(), \"}\"].join(\n \"\\n\",\n );\n}\n\nfunction declarationSource(module: SdkDeclarationModule): string {\n const source = module.source\n .replace(/^declare /gm, \"\")\n .replace(/^import \\{ (?:z|z, z as z\\$1|z as z\\$1) \\} from \"zod\";$/gm, zodShimDeclaration())\n .replaceAll(\"z$1.\", \"z.\")\n .replaceAll(\"z.ZodType\", \"ZodType\")\n .replaceAll('from \"./index.js\"', 'from \"@usepipr/sdk\"')\n .replaceAll('from \"./index.mjs\"', 'from \"@usepipr/sdk\"')\n .replace(/from \"\\.\\/index-[^\"]+\\.mjs\"/g, 'from \"@usepipr/sdk\"')\n .replace(/^import .* from \"@usepipr\\/sdk\";$/gm, \"\")\n .replace(/^\\/\\/# sourceMappingURL=.*$/gm, \"\");\n return module.moduleName === \"@usepipr/sdk\"\n ? source\n : source\n .replace(\n /^export type \\{(?<exports>.*)\\};$/gm,\n 'export type {$<exports>} from \"@usepipr/sdk\";',\n )\n .replace(/^export \\{(?<exports>.*)\\};$/gm, 'export {$<exports>} from \"@usepipr/sdk\";');\n}\n\nfunction zodShimDeclaration(): string {\n return [\n \"type ZodInfer<T> = T extends { parse(value: unknown): infer Output } ? Output : never;\",\n \"type ZodType<T = unknown, Optional extends boolean = false> = {\",\n \" readonly _piprOptional: Optional;\",\n \" parse(value: unknown): T;\",\n \" optional(): ZodType<T | undefined, true>;\",\n \" min(value: number): ZodType<T, Optional>;\",\n \" max(value: number): ZodType<T, Optional>;\",\n \" int(): ZodType<T, Optional>;\",\n \" positive(): ZodType<T, Optional>;\",\n \" finite(): ZodType<T, Optional>;\",\n \"};\",\n \"type ZodAny = ZodType<unknown, boolean>;\",\n \"type ZodOptionalKeys<T extends Record<string, ZodAny>> = { [K in keyof T]: T[K] extends ZodType<unknown, true> ? K : never }[keyof T];\",\n \"type ZodObjectOutput<T extends Record<string, ZodAny>> = { [K in Exclude<keyof T, ZodOptionalKeys<T>>]: ZodInfer<T[K]> } & { [K in ZodOptionalKeys<T>]?: ZodInfer<T[K]> };\",\n \"const z: {\",\n \" string(): ZodType<string>;\",\n \" number(): ZodType<number>;\",\n \" boolean(): ZodType<boolean>;\",\n \" null(): ZodType<null>;\",\n \" unknown(): ZodType<unknown>;\",\n \" any(): ZodType<unknown>;\",\n \" literal<T extends string | number | boolean | null>(value: T): ZodType<T>;\",\n \" enum<const T extends readonly [string, ...string[]]>(values: T): ZodType<T[number]>;\",\n \" array<T extends ZodAny>(schema: T): ZodType<Array<ZodInfer<T>>>;\",\n \" record<T extends ZodAny>(key: ZodType<string>, value: T): ZodType<Record<string, ZodInfer<T>>>;\",\n \" strictObject<T extends Record<string, ZodAny>>(shape: T): ZodType<ZodObjectOutput<T>>;\",\n \" object<T extends Record<string, ZodAny>>(shape: T): ZodType<ZodObjectOutput<T>>;\",\n \" looseObject<T extends Record<string, ZodAny>>(shape: T): ZodType<ZodObjectOutput<T> & Record<string, unknown>>;\",\n \" union<const T extends readonly [ZodAny, ZodAny, ...ZodAny[]]>(schemas: T): ZodType<ZodInfer<T[number]>>;\",\n \" json(): ZodType<JsonValue>;\",\n \" fromJSONSchema(schema: JsonSchema): ZodType<unknown>;\",\n \" toJSONSchema(schema: ZodAny): JsonSchema;\",\n \"};\",\n ].join(\"\\n\");\n}\n","import {\n builtinReadOnlyToolBrand,\n type ConfigFactoryValue,\n configFactoryBrand,\n type InternalPiprConfigFactory,\n} from \"./internal-contract.js\";\nimport type { AgentTool } from \"./types/agent.js\";\n\nexport type { RuntimePlan } from \"./runtime-contract.js\";\n\nimport type { RuntimePlan } from \"./runtime-contract.js\";\n\nexport {\n assertSupportedCommandRestCapture,\n commandPatternParts,\n isCommandCaptureToken,\n isCommandRestCaptureToken,\n isOptionalCommandPatternPart,\n tokenizeCommandPattern,\n unsupportedCommandRestCaptureError,\n} from \"./command-grammar.js\";\nexport { renderPromptValue } from \"./prompt-render.js\";\nexport type { SdkDeclarationModule } from \"./standalone-declaration.js\";\nexport {\n embeddedSdkDeclaration,\n readSdkDeclarationSourceWithChunk,\n} from \"./standalone-declaration.js\";\n\n/** Stable identifier for pipr's built-in pull request review output schema. */\nexport const reviewOutputSchemaId = \"core/pr-review\";\n\n/** Returns whether a tool is one of pipr's built-in read-only tools. */\nexport function isBuiltinReadOnlyTool(tool: AgentTool): boolean {\n return Reflect.get(tool, builtinReadOnlyToolBrand) === true;\n}\n\n/** Checks that an unknown value is a pipr configuration factory. */\nexport function isPiprConfigFactory(value: unknown): value is ConfigFactoryValue {\n return (\n typeof value === \"object\" &&\n value !== null &&\n Reflect.get(value, \"kind\") === \"pipr.config-factory\" &&\n Reflect.get(value, configFactoryBrand) === true\n );\n}\n\n/** Builds a runtime plan from a pipr configuration factory. */\nexport function buildPiprPlan(factory: unknown): RuntimePlan {\n if (!isInternalPiprConfigFactory(factory)) {\n throw new Error(\"Expected a pipr configuration factory\");\n }\n return factory.build();\n}\n\nfunction isInternalPiprConfigFactory(value: unknown): value is InternalPiprConfigFactory {\n return isPiprConfigFactory(value) && typeof Reflect.get(value, \"build\") === \"function\";\n}\n"],"mappings":";;;AAOA,eAAsB,kCACpB,QACA,iBACiB;CACjB,MAAM,SAAS,MAAM,IAAI,KAAK,eAAe,CAAC,CAAC,KAAK;CACpD,IAAI,OAAO,eAAe,gBACxB,OAAO;CAET,MAAM,gBAAgB,OAAO,MAAM,gDAAgD,CAAC,EAAE,QAClF;CACJ,IAAI,CAAC,eACH,OAAO;CAET,MAAM,YAAY,KAAK,KAAK,KAAK,QAAQ,eAAe,GAAG,GAAG,cAAc,OAAO;CAGnF,OAAO,IADc,MADD,IAAI,KAAK,SAAS,CAAC,CAAC,KAAK,EAAA,CAClB,QAAQ,sBAAsB,EACpC,EAAE,IAAI;AAC7B;AAEA,SAAgB,uBAAuB,SAAyC;CAC9E,MAAM,cAAc;EAClB;EACA;EACA,GAAG,QAAQ,IAAI,sBAAsB;EACrC;CACF,CAAC,CAAC,KAAK,IAAI;CACX,IAAI,YAAY,SAAS,cAAY,KAAK,YAAY,SAAS,WAAW,GACxE,MAAM,IAAI,MAAM,qEAAqE;CAEvF,OAAO;AACT;AAEA,SAAS,uBAAuB,QAAsC;CACpE,OAAO;EAAC,mBAAmB,OAAO,WAAW;EAAM,kBAAkB,MAAM,CAAC,CAAC,KAAK;EAAG;CAAG,CAAC,CAAC,KACxF,IACF;AACF;AAEA,SAAS,kBAAkB,QAAsC;CAC/D,MAAM,SAAS,OAAO,OACnB,QAAQ,eAAe,EAAE,CAAC,CAC1B,QAAQ,6DAA6D,mBAAmB,CAAC,CAAC,CAC1F,WAAW,QAAQ,IAAI,CAAC,CACxB,WAAW,aAAa,SAAS,CAAC,CAClC,WAAW,uBAAqB,uBAAqB,CAAC,CACtD,WAAW,wBAAsB,uBAAqB,CAAC,CACvD,QAAQ,gCAAgC,uBAAqB,CAAC,CAC9D,QAAQ,uCAAuC,EAAE,CAAC,CAClD,QAAQ,iCAAiC,EAAE;CAC9C,OAAO,OAAO,eAAe,iBACzB,SACA,OACG,QACC,uCACA,iDACF,CAAC,CACA,QAAQ,kCAAkC,4CAA0C;AAC7F;AAEA,SAAS,qBAA6B;CACpC,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CAAC,CAAC,KAAK,IAAI;AACb;;;;ACzEA,MAAa,uBAAuB;;AAGpC,SAAgB,sBAAsB,MAA0B;CAC9D,OAAO,QAAQ,IAAI,MAAM,wBAAwB,MAAM;AACzD;;AAGA,SAAgB,oBAAoB,OAA6C;CAC/E,OACE,OAAO,UAAU,YACjB,UAAU,QACV,QAAQ,IAAI,OAAO,MAAM,MAAM,yBAC/B,QAAQ,IAAI,OAAO,kBAAkB,MAAM;AAE/C;;AAGA,SAAgB,cAAc,SAA+B;CAC3D,IAAI,CAAC,4BAA4B,OAAO,GACtC,MAAM,IAAI,MAAM,uCAAuC;CAEzD,OAAO,QAAQ,MAAM;AACvB;AAEA,SAAS,4BAA4B,OAAoD;CACvF,OAAO,oBAAoB,KAAK,KAAK,OAAO,QAAQ,IAAI,OAAO,OAAO,MAAM;AAC9E"}
@@ -0,0 +1,52 @@
1
+ //#region src/command-grammar.ts
2
+ function commandPatternParts(pattern) {
3
+ return pattern.match(/\[[^\]]+\]|[^\s]+/g) ?? [];
4
+ }
5
+ function tokenizeCommandPattern(value) {
6
+ return value.trim().split(/\s+/).filter(Boolean);
7
+ }
8
+ function unsupportedCommandRestCaptureError(pattern) {
9
+ const parts = commandPatternParts(pattern);
10
+ for (const [index, part] of parts.entries()) {
11
+ if (isOptionalCommandPatternPart(part)) {
12
+ const optionalRest = tokenizeCommandPattern(part.slice(1, -1)).find(isCommandRestCaptureToken);
13
+ if (optionalRest) return finalRequiredRestCaptureMessage(optionalRest);
14
+ continue;
15
+ }
16
+ if (isCommandRestCaptureToken(part) && index !== parts.length - 1) return finalRequiredRestCaptureMessage(part);
17
+ }
18
+ }
19
+ function assertSupportedCommandRestCapture(pattern) {
20
+ const error = unsupportedCommandRestCaptureError(pattern);
21
+ if (error) throw new Error(error);
22
+ }
23
+ function isOptionalCommandPatternPart(value) {
24
+ return value.startsWith("[") && value.endsWith("]");
25
+ }
26
+ function isCommandCaptureToken(value) {
27
+ return /^<[a-z0-9-]+(\.\.\.)?>$/.test(value);
28
+ }
29
+ function isCommandRestCaptureToken(value) {
30
+ return /^<[a-z0-9-]+\.\.\.>$/.test(value);
31
+ }
32
+ function finalRequiredRestCaptureMessage(token) {
33
+ return `Rest capture '${token}' must be the final required command pattern token`;
34
+ }
35
+ //#endregion
36
+ //#region src/internal-contract.ts
37
+ const configFactoryBrand = Symbol.for("pipr.config.factory");
38
+ const builtinReadOnlyToolBrand = Symbol.for("pipr.builtin.readOnlyTool");
39
+ //#endregion
40
+ //#region src/prompt-render.ts
41
+ /** Renders a prompt source/value into plain text for Pi prompts. */
42
+ function renderPromptValue(value) {
43
+ if (value === void 0 || value === null) return "";
44
+ if (typeof value === "string") return value;
45
+ if (typeof value === "number" || typeof value === "boolean") return String(value);
46
+ if (typeof value === "object" && value !== null && Reflect.get(value, "kind") === "pipr.prompt") return value.value;
47
+ return JSON.stringify(value, null, 2);
48
+ }
49
+ //#endregion
50
+ export { commandPatternParts as a, isOptionalCommandPatternPart as c, assertSupportedCommandRestCapture as i, tokenizeCommandPattern as l, builtinReadOnlyToolBrand as n, isCommandCaptureToken as o, configFactoryBrand as r, isCommandRestCaptureToken as s, renderPromptValue as t, unsupportedCommandRestCaptureError as u };
51
+
52
+ //# sourceMappingURL=prompt-render-BWiLG-qu.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-render-BWiLG-qu.mjs","names":[],"sources":["../src/command-grammar.ts","../src/internal-contract.ts","../src/prompt-render.ts"],"sourcesContent":["export function commandPatternParts(pattern: string): string[] {\n return pattern.match(/\\[[^\\]]+\\]|[^\\s]+/g) ?? [];\n}\n\nexport function tokenizeCommandPattern(value: string): string[] {\n return value.trim().split(/\\s+/).filter(Boolean);\n}\n\nexport function unsupportedCommandRestCaptureError(pattern: string): string | undefined {\n const parts = commandPatternParts(pattern);\n for (const [index, part] of parts.entries()) {\n if (isOptionalCommandPatternPart(part)) {\n const optionalRest = tokenizeCommandPattern(part.slice(1, -1)).find(\n isCommandRestCaptureToken,\n );\n if (optionalRest) {\n return finalRequiredRestCaptureMessage(optionalRest);\n }\n continue;\n }\n if (isCommandRestCaptureToken(part) && index !== parts.length - 1) {\n return finalRequiredRestCaptureMessage(part);\n }\n }\n return undefined;\n}\n\nexport function assertSupportedCommandRestCapture(pattern: string): void {\n const error = unsupportedCommandRestCaptureError(pattern);\n if (error) {\n throw new Error(error);\n }\n}\n\nexport function isOptionalCommandPatternPart(value: string): boolean {\n return value.startsWith(\"[\") && value.endsWith(\"]\");\n}\n\nexport function isCommandCaptureToken(value: string): boolean {\n return /^<[a-z0-9-]+(\\.\\.\\.)?>$/.test(value);\n}\n\nexport function isCommandRestCaptureToken(value: string): boolean {\n return /^<[a-z0-9-]+\\.\\.\\.>$/.test(value);\n}\n\nfunction finalRequiredRestCaptureMessage(token: string): string {\n return `Rest capture '${token}' must be the final required command pattern token`;\n}\n","import type { RuntimePlan } from \"./runtime-contract.js\";\n\nexport const configFactoryBrand = Symbol.for(\"pipr.config.factory\");\nexport const builtinReadOnlyToolBrand = Symbol.for(\"pipr.builtin.readOnlyTool\");\n\nexport type ConfigFactoryValue = {\n readonly kind: \"pipr.config-factory\";\n};\n\nexport type InternalPiprConfigFactory = ConfigFactoryValue & {\n readonly [configFactoryBrand]: true;\n build(): RuntimePlan;\n};\n","import type { PromptText, PromptValue } from \"./index.js\";\n\n/** Renders a prompt source/value into plain text for Pi prompts. */\nexport function renderPromptValue(value: PromptValue): string {\n if (value === undefined || value === null) {\n return \"\";\n }\n if (typeof value === \"string\") {\n return value;\n }\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n if (typeof value === \"object\" && value !== null && Reflect.get(value, \"kind\") === \"pipr.prompt\") {\n return (value as PromptText).value;\n }\n return JSON.stringify(value, null, 2);\n}\n"],"mappings":";AAAA,SAAgB,oBAAoB,SAA2B;CAC7D,OAAO,QAAQ,MAAM,oBAAoB,KAAK,CAAC;AACjD;AAEA,SAAgB,uBAAuB,OAAyB;CAC9D,OAAO,MAAM,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,OAAO,OAAO;AACjD;AAEA,SAAgB,mCAAmC,SAAqC;CACtF,MAAM,QAAQ,oBAAoB,OAAO;CACzC,KAAK,MAAM,CAAC,OAAO,SAAS,MAAM,QAAQ,GAAG;EAC3C,IAAI,6BAA6B,IAAI,GAAG;GACtC,MAAM,eAAe,uBAAuB,KAAK,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,KAC7D,yBACF;GACA,IAAI,cACF,OAAO,gCAAgC,YAAY;GAErD;EACF;EACA,IAAI,0BAA0B,IAAI,KAAK,UAAU,MAAM,SAAS,GAC9D,OAAO,gCAAgC,IAAI;CAE/C;AAEF;AAEA,SAAgB,kCAAkC,SAAuB;CACvE,MAAM,QAAQ,mCAAmC,OAAO;CACxD,IAAI,OACF,MAAM,IAAI,MAAM,KAAK;AAEzB;AAEA,SAAgB,6BAA6B,OAAwB;CACnE,OAAO,MAAM,WAAW,GAAG,KAAK,MAAM,SAAS,GAAG;AACpD;AAEA,SAAgB,sBAAsB,OAAwB;CAC5D,OAAO,0BAA0B,KAAK,KAAK;AAC7C;AAEA,SAAgB,0BAA0B,OAAwB;CAChE,OAAO,uBAAuB,KAAK,KAAK;AAC1C;AAEA,SAAS,gCAAgC,OAAuB;CAC9D,OAAO,iBAAiB,MAAM;AAChC;;;AC9CA,MAAa,qBAAqB,OAAO,IAAI,qBAAqB;AAClE,MAAa,2BAA2B,OAAO,IAAI,2BAA2B;;;;ACA9E,SAAgB,kBAAkB,OAA4B;CAC5D,IAAI,UAAU,KAAA,KAAa,UAAU,MACnC,OAAO;CAET,IAAI,OAAO,UAAU,UACnB,OAAO;CAET,IAAI,OAAO,UAAU,YAAY,OAAO,UAAU,WAChD,OAAO,OAAO,KAAK;CAErB,IAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,QAAQ,IAAI,OAAO,MAAM,MAAM,eAChF,OAAQ,MAAqB;CAE/B,OAAO,KAAK,UAAU,OAAO,MAAM,CAAC;AACtC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@usepipr/sdk",
3
- "version": "0.1.3",
3
+ "version": "0.2.1",
4
4
  "description": "TypeScript configuration SDK for pipr pull request review automation",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -27,25 +27,17 @@
27
27
  "types": "./dist/index.d.mts",
28
28
  "default": "./dist/index.mjs"
29
29
  },
30
- "./review": {
31
- "types": "./dist/review.d.mts",
32
- "default": "./dist/review.mjs"
33
- },
34
- "./tools": {
35
- "types": "./dist/tools.d.mts",
36
- "default": "./dist/tools.mjs"
37
- },
38
30
  "./internal": {
39
31
  "types": "./dist/internal.d.mts",
40
32
  "default": "./dist/internal.mjs"
41
33
  }
42
34
  },
43
35
  "scripts": {
44
- "build": "tsdown src/index.ts src/review.ts src/tools.ts src/internal.ts --dts --format esm --out-dir dist",
36
+ "build": "tsdown src/index.ts src/internal.ts --dts --format esm --out-dir dist",
45
37
  "typecheck": "tsc --noEmit",
46
38
  "test": "bun test",
47
- "lint": "biome check src",
48
- "format:check": "biome check src",
39
+ "lint": "biome lint src",
40
+ "format:check": "biome format src",
49
41
  "prepack": "bun run build",
50
42
  "check": "bun run lint && bun run typecheck && bun run test"
51
43
  },
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-DMjdjJV4.d.mts","names":[],"sources":["../src/review-contract.ts","../src/builder.ts","../src/prompt.ts","../src/schema.ts","../src/index.ts"],"mappings":"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"}
@@ -1,13 +0,0 @@
1
- //#region src/prompt-render.ts
2
- /** Renders a prompt source/value into plain text for Pi prompts. */
3
- function renderPromptValue(value) {
4
- if (value === void 0 || value === null) return "";
5
- if (typeof value === "string") return value;
6
- if (typeof value === "number" || typeof value === "boolean") return String(value);
7
- if (typeof value === "object" && value !== null && Reflect.get(value, "kind") === "pipr.prompt") return value.value;
8
- return JSON.stringify(value, null, 2);
9
- }
10
- //#endregion
11
- export { renderPromptValue as t };
12
-
13
- //# sourceMappingURL=prompt-render-CHlrR9Sa.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prompt-render-CHlrR9Sa.mjs","names":[],"sources":["../src/prompt-render.ts"],"sourcesContent":["import type { PromptText, PromptValue } from \"./index.js\";\n\n/** Renders a prompt source/value into plain text for Pi prompts. */\nexport function renderPromptValue(value: PromptValue): string {\n if (value === undefined || value === null) {\n return \"\";\n }\n if (typeof value === \"string\") {\n return value;\n }\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n if (typeof value === \"object\" && value !== null && Reflect.get(value, \"kind\") === \"pipr.prompt\") {\n return (value as PromptText).value;\n }\n return JSON.stringify(value, null, 2);\n}\n"],"mappings":";;AAGA,SAAgB,kBAAkB,OAA4B;CAC5D,IAAI,UAAU,KAAA,KAAa,UAAU,MACnC,OAAO;CAET,IAAI,OAAO,UAAU,UACnB,OAAO;CAET,IAAI,OAAO,UAAU,YAAY,OAAO,UAAU,WAChD,OAAO,OAAO,KAAK;CAErB,IAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,QAAQ,IAAI,OAAO,MAAM,MAAM,eAChF,OAAQ,MAAqB;CAE/B,OAAO,KAAK,UAAU,OAAO,MAAM,CAAC;AACtC"}
package/dist/review.d.mts DELETED
@@ -1,2 +0,0 @@
1
- import { $ as ReviewRecipeOptions, At as reviewSchemaExample, Ct as ReviewResult, Dt as parseReviewSummary, Et as parseReviewResult, I as PathFilter, N as Markdown, Ot as reviewFindingSchema, Q as ReviewEntrypoints, S as DefaultReviewInput, St as ReviewFinding, Tt as parseReviewFinding, U as PriorInlineFinding, W as PriorReview, Z as ReviewCommentContext, et as Reviewer, f as ChangeRequestAction, i as AgentPromptContext, jt as reviewSummarySchema, kt as reviewResultSchema, tt as ReviewerOptions, wt as ReviewSummary, x as CommentValue } from "./index-DMjdjJV4.mjs";
2
- export { type AgentPromptContext, type ChangeRequestAction, type CommentValue, type DefaultReviewInput, type Markdown, type PathFilter, type PriorInlineFinding, type PriorReview, type ReviewCommentContext, type ReviewEntrypoints, type ReviewFinding, type ReviewRecipeOptions, type ReviewResult, type ReviewSummary, type Reviewer, type ReviewerOptions, parseReviewFinding, parseReviewResult, parseReviewSummary, reviewFindingSchema, reviewResultSchema, reviewSchemaExample, reviewSummarySchema };
package/dist/review.mjs DELETED
@@ -1,2 +0,0 @@
1
- import { c as parseReviewResult, d as reviewResultSchema, f as reviewSchemaExample, l as parseReviewSummary, p as reviewSummarySchema, s as parseReviewFinding, u as reviewFindingSchema } from "./src-CR3NktDT.mjs";
2
- export { parseReviewFinding, parseReviewResult, parseReviewSummary, reviewFindingSchema, reviewResultSchema, reviewSchemaExample, reviewSummarySchema };