Switch CLI configuration to ConfigKit
This commit is contained in:
15
docs/cli.md
15
docs/cli.md
@@ -26,9 +26,13 @@ go run ./cmd/scriptorium render \
|
||||
- `scriptorium inspect prompt`: inspect one prompt definition without model execution.
|
||||
- `scriptorium inspect profile`: inspect one effective profile without model execution.
|
||||
|
||||
All commands accept `--config <path>` and reject positional arguments. An
|
||||
effective `prompt_dir` is required for every command. Supply it through the
|
||||
configuration contract or the command's `--prompt-dir` flag.
|
||||
All commands accept `--config <path>` and reject positional arguments. `run`,
|
||||
`render`, `serve`, and `inspect prompt` require an effective `prompt_dir`;
|
||||
`inspect profile` does not. Supply the directory through the configuration
|
||||
contract or a supported `--prompt-dir` flag. Explicit application flags,
|
||||
including empty values, override file settings. Configuration load diagnostics
|
||||
go to stderr and exit with status 1; successful load warnings are printed once
|
||||
before command work.
|
||||
|
||||
## `scriptorium run`
|
||||
|
||||
@@ -144,7 +148,7 @@ scriptorium render [flags]
|
||||
```
|
||||
|
||||
`--prompt <id>` is required. The following optional flags are supported:
|
||||
`--config`, `--prompt-dir`, `--profile-dir`, `--prompt-version`, `--profile`,
|
||||
`--config`, `--prompt-dir`, `--profile-dir`, `--schema-dir`, `--prompt-version`, `--profile`,
|
||||
`--input`, `--var`, `--out`, `--llm-base-url`,
|
||||
`--model`, `--api-key-env`, `--temperature`, `--max-tokens`, `--top-p`,
|
||||
`--reasoning-effort`, `--session-id`, `--timeout`, `--transient-retries`, and `--format text|json`. Their meanings match the corresponding
|
||||
@@ -156,8 +160,7 @@ The same session and reasoning inheritance, replacement, and clearing behavior
|
||||
also applies.
|
||||
`render` validates the retry override but does not generate model output or
|
||||
include a retry field in prepared output.
|
||||
`render` does not accept `--schema-dir`; configure `schema_dir` through the
|
||||
configuration file. It resolves profiles and schemas as part of preparation but
|
||||
`render` resolves profiles and schemas as part of preparation but
|
||||
does not call an LLM.
|
||||
|
||||
## `scriptorium serve`
|
||||
|
||||
@@ -25,12 +25,24 @@ The maintained [minimal configuration](../examples/config.yml) and
|
||||
|
||||
## Application Configuration File
|
||||
|
||||
Configuration is strict YAML: unknown fields are rejected. Empty string values
|
||||
do not override a prior value. Raw API-key fields are not accepted.
|
||||
Configuration is decoded by ConfigKit v0.4.0 as strict YAML. Unknown fields,
|
||||
empty files, multiple YAML documents, and YAML aliases/anchors are rejected.
|
||||
An explicit empty string is a value: it clears a file-provided optional path
|
||||
or, for required `prompt_dir`, fails the command's prerequisite. A scalar
|
||||
`null` is not an empty string and is rejected for scalar fields; nullable
|
||||
fields such as `transient_retries` retain their documented meaning. Raw
|
||||
API-key fields are not accepted. Imports and selected overlays are not yet
|
||||
enabled for application configuration.
|
||||
|
||||
ConfigKit applies defaults, the selected file, then only explicitly supplied
|
||||
application CLI flags before validating the result. Paths in the application
|
||||
document remain relative to the process working directory, not to the file's
|
||||
directory. Load diagnostics are printed safely on stderr; invalid application
|
||||
configuration exits with status 1.
|
||||
|
||||
| Field | Default | Meaning |
|
||||
| --- | --- | --- |
|
||||
| `prompt_dir` | unset | Promptkit prompt-definition source directory. `run`, `render`, and `serve` require an effective value. |
|
||||
| `prompt_dir` | unset | Promptkit prompt-definition source directory. `run`, `render`, `serve`, and `inspect prompt` require an effective value. |
|
||||
| `profile_dir` | unset | Optional custom Promptkit profile source directory overlaid on Promptkit built-ins. |
|
||||
| `schema_dir` | `.` | Promptkit schema source directory for relative schema paths. |
|
||||
| `server.addr` | `:8080` | Address used by `serve`. |
|
||||
|
||||
@@ -3,7 +3,8 @@
|
||||
This is the contributor entry point for Scriptorium. Scriptorium is an
|
||||
application that consumes the public
|
||||
[Promptkit v0.11.0 package](https://gitea.maximumdirect.net/eric/promptkit/src/tag/v0.11.0/docs/consumers/pkg-promptkit.md);
|
||||
framework implementation work belongs in Promptkit.
|
||||
framework implementation work belongs in Promptkit. Application configuration
|
||||
uses ConfigKit v0.4.0; keep Scriptorium's schema and source selection local.
|
||||
|
||||
## Initial Orientation
|
||||
|
||||
@@ -26,7 +27,7 @@ tests.
|
||||
| Repository orientation or component responsibility | [Internal component overview](internal/overview.md) and [architecture policy](policy/architecture.md) |
|
||||
| CLI commands, flags, output, or exit behavior | [CLI contract](cli.md) and [adapter internals](internal/adapters.md) |
|
||||
| HTTP routes, DTOs, limits, status mapping, or artifact policy | [HTTP API contract](api.md), [adapter internals](internal/adapters.md), and [source internals](internal/sources.md) |
|
||||
| Application configuration or precedence | [Configuration contract](config.md), [adapter internals](internal/adapters.md), and [source internals](internal/sources.md) |
|
||||
| Application configuration or precedence | [Configuration contract](config.md), [adapter internals](internal/adapters.md), [source internals](internal/sources.md), and `internal/config` definition/load tests |
|
||||
| Prepared-run presentation | [CLI contract](cli.md), [adapter internals](internal/adapters.md), and `internal/format` |
|
||||
| Prompt, profile, schema, generation, or validation semantics | [Promptkit framework formats](https://gitea.maximumdirect.net/eric/promptkit/src/tag/v0.11.0/docs/formats.md) and the [Promptkit consumer guide](https://gitea.maximumdirect.net/eric/promptkit/src/tag/v0.11.0/docs/consumers/pkg-promptkit.md) |
|
||||
| OpenAI-compatible outbound behavior or timeout layering | [Promptkit integration contract](https://gitea.maximumdirect.net/eric/promptkit/src/tag/v0.11.0/docs/integrations/openai-compatible-chat.md) |
|
||||
|
||||
@@ -18,6 +18,10 @@ described by its tagged
|
||||
- `internal/adapter/cli` resolves settings through `internal/config`,
|
||||
constructs `promptkit.Engine`, maps CLI values to `promptkit.RunRequest`,
|
||||
and owns output files, summaries, and exit codes.
|
||||
- `internal/config` delegates application YAML decoding, default resolution,
|
||||
overrides, and validation ordering to ConfigKit. The CLI supplies only
|
||||
explicitly visited application flags as overrides and renders safe structured
|
||||
load diagnostics on stderr.
|
||||
- `internal/adapter/http` strictly decodes request DTOs, maps them to Promptkit
|
||||
public values, calls its adapter-owned `Runner` interface, and maps results
|
||||
and errors to HTTP DTOs.
|
||||
@@ -53,7 +57,7 @@ not require prompt, schema, or artifact sources.
|
||||
with `promptkit.WithArtifactReader`, passes the engine through the HTTP
|
||||
adapter's consumer-owned `Runner` interface, and starts the server.
|
||||
|
||||
All three CLI paths assemble the engine from the same resolved prompt, profile,
|
||||
The command paths assemble the engine from the same resolved prompt, profile,
|
||||
and schema directories plus configured custom backends. Each backend is mapped
|
||||
to Promptkit's public `Backend` value and registered during engine construction,
|
||||
so one constructed server engine retains one immutable backend registry and its
|
||||
|
||||
@@ -24,9 +24,9 @@ The [configuration reference](../config.md) owns Scriptorium's source-location
|
||||
fields and precedence. Maintained files under `examples/` are application
|
||||
inputs that use Promptkit's tagged formats.
|
||||
|
||||
## Native Application Definition In Preparation
|
||||
## Application Configuration Boundary
|
||||
|
||||
`internal/config` also contains a ConfigKit-native `Document` definition. Its
|
||||
`internal/config` contains a ConfigKit-native `Document` definition. Its
|
||||
fresh defaults come from Scriptorium's existing default constants; its resolver
|
||||
records only actual trimming, path cleaning, and render-format normalization.
|
||||
The validator reports application retry, size-limit, and format errors without
|
||||
@@ -34,7 +34,7 @@ mutating the document or exposing rejected values. Application path values keep
|
||||
working-directory-relative meaning. ConfigKit owns strict YAML decoding and
|
||||
presence semantics, including dynamic integer values in backend parameters.
|
||||
|
||||
The new `Load` boundary selects an explicit file, the first existing implicit
|
||||
The `Load` boundary selects an explicit file, the first existing implicit
|
||||
configuration file, or ConfigKit's defaults-only source. Only absence advances
|
||||
implicit discovery. One ConfigKit load applies explicit application overrides
|
||||
before validation and returns a result containing the resolved document and
|
||||
@@ -43,9 +43,10 @@ existing runtime settings with backend IDs sorted; it does not read files or
|
||||
apply another merge. Imports and selected overlays remain disabled until their
|
||||
own user-facing integration is ready.
|
||||
|
||||
The executable commands still use the existing loader. The new definition is
|
||||
internal preparation and is not yet an alternative user-selectable configuration
|
||||
mode or a change to the current [configuration contract](../config.md).
|
||||
Every configuration-loading command uses this boundary. The CLI maps only
|
||||
explicitly visited application flags to ConfigKit overrides and prints
|
||||
structured load diagnostics before engine construction. The old application
|
||||
YAML decoder and merge path have been removed.
|
||||
|
||||
## Restricted HTTP Artifact Reader
|
||||
|
||||
@@ -78,7 +79,8 @@ codes.
|
||||
|
||||
Inspect:
|
||||
|
||||
- `internal/config/config_test.go`
|
||||
- `internal/config/document_test.go`
|
||||
- `internal/config/load_test.go`
|
||||
- `internal/adapter/cli/run_test.go`
|
||||
- `internal/adapter/http/artifact_reader_test.go`
|
||||
- `internal/adapter/http/handler_test.go`
|
||||
|
||||
@@ -32,6 +32,12 @@ validation. Scriptorium owns application configuration, executable adapters,
|
||||
prepared-run and definition-inspection presentation, process behavior, and HTTP
|
||||
deployment policy.
|
||||
|
||||
Scriptorium also consumes ConfigKit v0.4.0 for application configuration
|
||||
decoding, resolution, and validation flow. Scriptorium owns its application
|
||||
schema, defaults, normalization, validation rules, source selection, and CLI
|
||||
flag mapping; ConfigKit does not own Promptkit framework sources or HTTP
|
||||
artifact containment.
|
||||
|
||||
The concrete package inventory is maintained in the
|
||||
[internal overview](../internal/overview.md).
|
||||
|
||||
@@ -54,7 +60,7 @@ cmd/scriptorium
|
||||
CLI and HTTP adapters, configuration, defaults, and formatting
|
||||
|
|
||||
v
|
||||
gitea.maximumdirect.net/eric/promptkit
|
||||
Promptkit (execution) and ConfigKit (application configuration)
|
||||
```
|
||||
|
||||
- Retained application packages may import Promptkit's root package.
|
||||
@@ -80,8 +86,8 @@ vendored Promptkit implementation, or unpublished dependency assumptions.
|
||||
process streams, output files, summaries, and exit codes.
|
||||
- `internal/adapter/http` owns routes, strict JSON DTOs, size limits, response
|
||||
mapping, status mapping, and the restricted artifact reader.
|
||||
- `internal/config` owns discovery and strict decoding of Scriptorium
|
||||
application configuration.
|
||||
- `internal/config` owns discovery and Scriptorium's application definition;
|
||||
ConfigKit owns strict YAML decoding and the load/override pipeline.
|
||||
- `internal/defaults` owns Scriptorium application and HTTP defaults only.
|
||||
- `internal/format` owns deterministic prepared-run and definition-inspection
|
||||
text and JSON presentation.
|
||||
|
||||
@@ -197,7 +197,10 @@ with no new user-visible mode.
|
||||
|
||||
## Stage 3: Cut Existing Commands Over And Remove The Legacy Loader
|
||||
|
||||
**Status: Not started.**
|
||||
**Status: Complete.** All five command modes use the shared ConfigKit loader;
|
||||
the legacy decoder and merge path are removed. CLI and configuration contracts
|
||||
now describe native YAML and override behavior. Full test, race, vet, build,
|
||||
and diff checks passed.
|
||||
|
||||
Primary files: `internal/adapter/cli/run.go`, `inspect.go`,
|
||||
`internal/config/config.go`, and associated tests.
|
||||
|
||||
Reference in New Issue
Block a user