Documentation Index
Fetch the complete documentation index at: https://vu-ddaf4ff3.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
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
public function __construct(
string $basePath,
string $extension,
Cache $cache,
Config $config
)
| 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.
$prompt = $manager->get('order-summary'); // active version
$prompt = $manager->get('order-summary', 2); // specific version
active(string $name): PromptTemplate
Load the active version of a prompt. Equivalent to calling get($name) without a version.
$prompt = $manager->active('order-summary');
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.
$versions = $manager->versions('order-summary');
// [
// ['version' => 1, 'path' => '/path/to/v1', 'metadata' => [...]],
// ['version' => 2, 'path' => '/path/to/v2', 'metadata' => [...]],
// ]
activate(string $name, int $version): bool
Activate a specific version of a prompt. Returns true on success.
- With tracking enabled: Updates the
prompt_versions database table.
- Without tracking: Writes to
metadata.json in the prompt directory.
$manager->activate('order-summary', 2);
track(string $promptName, int $version, array $data): void
Record a prompt execution for tracking. No-op if tracking is disabled.
$manager->track('order-summary', 2, [
'input' => ['message' => 'Hello'],
'output' => 'Hi there!',
'tokens' => 50,
'latency' => 120.5,
'cost' => 0.001,
'model' => 'gpt-4o',
'provider' => 'openai',
'feedback' => ['rating' => 5],
]);
PromptTemplate
Veeqtoh\PromptDeck\PromptTemplate
Represents a loaded prompt with its roles, metadata, and interpolation capabilities. Implements Illuminate\Contracts\Support\Arrayable.
Constructor
public function __construct(
protected string $name,
protected int $version,
protected array $roles = [],
protected array $metadata = [],
)
| 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.
$content = $prompt->role('system', ['tone' => 'friendly']);
raw(string $role): string
Get the raw content for a role without interpolation. Returns an empty string if the role does not exist.
$template = $prompt->raw('system');
has(string $role): bool
Check whether a specific role exists in this prompt.
if ($prompt->has('assistant')) {
// ...
}
roles(): array
Get all available role names.
$prompt->roles(); // ['system', 'user', 'assistant']
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. |
$messages = $prompt->toMessages(['tone' => 'concise'], ['system', 'user']);
version(): int
Get the resolved version number.
name(): string
Get the prompt name.
$prompt->name(); // 'order-summary'
Get the prompt metadata. Returns an empty array if no metadata is defined.
$prompt->metadata(); // ['description' => '...', 'variables' => [...]]
toArray(): array
Convert the prompt to an array (implements Arrayable).
$prompt->toArray();
// ['name' => '...', 'version' => 2, 'roles' => [...], 'metadata' => [...]]
__call(string $method, array $parameters): string
Dynamic role access via method call. Any method name is treated as a role name.
$prompt->system(['tone' => 'friendly']); // renders 'system' role
$prompt->assistant(['context' => '...']); // renders 'assistant' role
$prompt->custom_role(); // renders 'custom_role' role
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 base PromptDeckException 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}'." |