PromptManager
Veeqtoh\PromptDeck\PromptManager
The core service class responsible for loading, caching, versioning, and tracking prompts. Registered as a singleton in the service container.
Constructor
| Parameter | Type | Description |
|---|---|---|
$basePath | string | Base directory where prompt files are stored. |
$extension | string | File extension for prompt templates (e.g. md). |
$cache | Illuminate\Contracts\Cache\Repository | Cache store instance. |
$config | Illuminate\Contracts\Config\Repository | Configuration repository. |
Methods
get(string $name, ?int $version = null): PromptTemplate
Load a prompt by name and optional version. If version is null, the active version is resolved automatically. Returns a PromptTemplate instance.
Caches the loaded prompt if caching is enabled.
Throws: PromptNotFoundException if the prompt does not exist. InvalidVersionException if the specified version does not exist.
active(string $name): PromptTemplate
Load the active version of a prompt. Equivalent to calling get($name) without a version.
versions(string $name): array
List all versions for a prompt. Returns an array of version info sorted in ascending order.
Throws: PromptNotFoundException if the prompt directory does not exist.
activate(string $name, int $version): bool
Activate a specific version of a prompt. Returns true on success.
- With tracking enabled: Updates the
prompt_versionsdatabase table. - Without tracking: Writes to
metadata.jsonin the prompt directory.
track(string $promptName, int $version, array $data): void
Record a prompt execution for tracking. No-op if tracking is disabled.
PromptTemplate
Veeqtoh\PromptDeck\PromptTemplate
Represents a loaded prompt with its roles, metadata, and interpolation capabilities. Implements Illuminate\Contracts\Support\Arrayable.
Constructor
| Parameter | Type | Description |
|---|---|---|
$name | string | The prompt name. |
$version | int | The resolved version number. |
$roles | array<string, string> | Role name → raw content map. |
$metadata | array | Prompt metadata from metadata.json. |
Methods
role(string $role, array $variables = []): string
Render a role’s content with variable interpolation. Returns an empty string if the role does not exist.
raw(string $role): string
Get the raw content for a role without interpolation. Returns an empty string if the role does not exist.
has(string $role): bool
Check whether a specific role exists in this prompt.
roles(): array
Get all available role names.
toMessages(array $variables = [], ?array $only = null): array
Build a messages array for AI API consumption. Returns an array of ['role' => '...', 'content' => '...'] entries.
| Parameter | Type | Description |
|---|---|---|
$variables | array | Variables to interpolate into every role. |
$only | array|null | Limit to these roles (preserves order). null = all roles. |
version(): int
Get the resolved version number.
name(): string
Get the prompt name.
metadata(): array
Get the prompt metadata. Returns an empty array if no metadata is defined.
toArray(): array
Convert the prompt to an array (implements Arrayable).
__call(string $method, array $parameters): string
Dynamic role access via method call. Any method name is treated as a role name.
PromptDeck facade
Veeqtoh\PromptDeck\Facades\PromptDeck
Static proxy to the PromptManager singleton.
Available methods
| Method | Returns | Description |
|---|---|---|
PromptDeck::get(string $name, ?int $version = null) | PromptTemplate | Load a prompt by name and optional version. |
PromptDeck::active(string $name) | PromptTemplate | Load the active version of a prompt. |
PromptDeck::versions(string $name) | array | List all versions for a prompt. |
PromptDeck::activate(string $name, int $version) | bool | Activate a specific version. |
PromptDeck::track(string $name, int $version, array $data) | void | Record a prompt execution. |
HasPromptTemplate trait
Veeqtoh\PromptDeck\Concerns\HasPromptTemplate
Trait for integrating Prompt Deck templates with Laravel AI SDK agents.
Methods
promptName(): string
Get the prompt name. Defaults to the kebab-cased class name (e.g. SalesCoach → sales-coach). Override to use a custom name.
promptVersion(): ?int
Get the prompt version to load. Returns null by default (active version). Override to pin to a specific version.
promptVariables(): array
Get variables for prompt template interpolation. Returns an empty array by default. Override to provide dynamic context.
promptTemplate(): PromptTemplate
Get the loaded PromptTemplate instance. Cached for the lifetime of the object.
instructions(): Stringable|string
Get the system instructions from the prompt template. Loads the system role and interpolates promptVariables(). Satisfies the AI SDK Agent contract.
promptMessages(?array $only = null): array
Get prompt roles as messages. By default returns all roles except system. Returns Message[] when the AI SDK is installed, or raw ['role' => '...', 'content' => '...'] arrays otherwise.
| Parameter | Type | Description |
|---|---|---|
$only | array|null | Limit to specific roles. null = all non-system roles. |
forgetPromptTemplate(): static
Clear the cached PromptTemplate, forcing a fresh load on next access. Returns $this for fluent chaining.
TrackPromptMiddleware
Veeqtoh\PromptDeck\Ai\TrackPromptMiddleware
Laravel AI SDK agent middleware that automatically tracks prompt executions.
Methods
handle(mixed $prompt, Closure $next): mixed
Handle the incoming agent prompt. Measures latency and records execution data using PromptManager::track() after the response completes.
Only tracks agents that use the HasPromptTemplate trait (i.e. agents with a promptName() method).
AfterMakeAgent listener
Veeqtoh\PromptDeck\Listeners\AfterMakeAgent
Listens for the Laravel AI SDK’s make:agent command and automatically scaffolds a corresponding Prompt Deck prompt.
Methods
handle(CommandFinished $event): void
Handle the CommandFinished event. Only acts on successful make:agent commands. Converts the agent name to kebab-case and runs make:prompt if the prompt doesn’t already exist.
Models
PromptVersion
Veeqtoh\PromptDeck\Models\PromptVersion
| Attribute | Type | Cast | Description |
|---|---|---|---|
name | string | — | Prompt name. |
version | int | integer | Version number. |
system_prompt | string|null | — | System prompt content. |
user_prompt | string | — | User prompt content. |
metadata | array|null | array | Version metadata. |
is_active | bool | boolean | Whether this is the active version. |
PromptExecution
Veeqtoh\PromptDeck\Models\PromptExecution
| Attribute | Type | Cast | Description |
|---|---|---|---|
prompt_name | string | — | Prompt name. |
prompt_version | int | integer | Version number. |
input | array|null | array | Input data (JSON). |
output | string|null | — | Response text. |
tokens | int|null | integer | Total tokens. |
latency_ms | int|null | integer | Latency in milliseconds. |
cost | string|null | decimal:6 | Cost (6 decimal places). |
model | string|null | — | AI model used. |
provider | string|null | — | AI provider. |
feedback | array|null | array | Feedback data (JSON). |
Exceptions
All Prompt Deck exceptions extend the basePromptDeckException class.
PromptDeckException
Veeqtoh\PromptDeck\Exceptions\PromptDeckException
Abstract base exception for all Prompt Deck errors. Extends PHP’s Exception class.
PromptNotFoundException
Veeqtoh\PromptDeck\Exceptions\PromptNotFoundException
Thrown when a prompt directory does not exist.
| Factory Method | Description |
|---|---|
named(string $name): self | Creates exception with message: "Prompt [{name}] not found." |
InvalidVersionException
Veeqtoh\PromptDeck\Exceptions\InvalidVersionException
Thrown when a requested version does not exist or no versions are found.
| Factory Method | Description |
|---|---|
forPrompt(string $name, int $version): self | Creates exception with message: "Version {version} for prompt [{name}] does not exist." |
noVersions(string $name): self | Creates exception with message: "No versions found for prompt [{name}]." |
ConfigurationException
Veeqtoh\PromptDeck\Exceptions\ConfigurationException
Thrown when Prompt Deck configuration is invalid.
| Factory Method | Description |
|---|---|
invalidPath(string $path): self | Creates exception with message: "Prompts path [{path}] is not a directory or is not writable." |
PromptRenderingException
Veeqtoh\PromptDeck\Exceptions\PromptRenderingException
Thrown when prompt rendering fails.
| Factory Method | Description |
|---|---|
dueToMissingVariable(string $variable, string $promptName): self | Creates exception with message: "Cannot render prompt [{promptName}]: missing required variable '{variable}'." |