draftcat 0.9.0 → 0.10.0

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.
Files changed (2) hide show
  1. package/README.md +8 -4
  2. package/package.json +1 -1
package/README.md CHANGED
@@ -5,7 +5,7 @@
5
5
  <p align="center"><b>Governed AI pipelines where the LLM can't fire actions — one Go binary, self-hosted, human-in-the-loop.</b></p>
6
6
 
7
7
  <p align="center">
8
- <a href="https://github.com/renezander030/draftcat/stargazers"><img src="https://img.shields.io/github/stars/renezander030/draftcat?style=flat-square" alt="Stars"></a>
8
+ <a href="https://github.com/renezander030/draftcat"><img src="https://img.shields.io/github/stars/renezander030/draftcat?style=flat-square" alt="Stars"></a>
9
9
  <a href="LICENSE"><img src="https://img.shields.io/github/license/renezander030/draftcat?style=flat-square" alt="License"></a>
10
10
  <img src="https://img.shields.io/badge/Go-1.25-00ADD8?style=flat-square&logo=go" alt="Go 1.25">
11
11
  <a href="docs/voice.md"><img src="https://img.shields.io/badge/voice%20AI-EU%20residency%20%C2%B7%20Dograh-00D4AA?style=flat-square" alt="Voice AI plugin"></a>
@@ -164,7 +164,7 @@ cp secrets.yaml.example secrets.yaml
164
164
  docker compose up
165
165
  ```
166
166
 
167
- Pipelines live in `config.yaml`, prompts in `skills/`. A SQLite store opens at `./state.db` on first boot. To add the EU-resident **voice AI** plugin: `go build -tags voice -o draftcat .` — the lean binary is unchanged when the tag is off.
167
+ Pipelines live in `config.yaml`, prompts in `skills/`. Run `draftcat doctor` to check credentials, operators, the state store and schedules before the first start. A SQLite store opens at `./state.db` on first boot. To add the EU-resident **voice AI** plugin: `go build -tags voice -o draftcat .` — the lean binary is unchanged when the tag is off.
168
168
 
169
169
  ## Deploy — where it runs
170
170
 
@@ -282,6 +282,7 @@ budgets:
282
282
  per_day_tokens: 100000
283
283
  per_day_cost: 5.00 # money cap, same unit as your model rates (0 = off)
284
284
  per_pipeline_cost: 0.50
285
+ alert_at: [0.5, 0.8] # tell the operator at 50% and 80% of a daily cap
285
286
 
286
287
  observability: {spans: false} # or DRAFTCAT_TRACE=1
287
288
  state: {path: ./state.db}
@@ -357,6 +358,7 @@ Skills are YAML prompt templates in `skills/` with an `output_schema` the engine
357
358
  ```bash
358
359
  draftcat # run the engine (validates config first; refuses to start on errors)
359
360
  draftcat validate [--strict] # lint config + skills
361
+ draftcat doctor [--json] # read-only preflight: credentials, operators, state, ports, schedules
360
362
  draftcat test <pipeline> # dry-run against fixtures/<pipeline>/ (never touches real APIs)
361
363
  draftcat runs [pipeline] # recent runs + the approval decisions in each (--json to archive)
362
364
  draftcat pending # approval gates waiting on a human right now (--json)
@@ -387,7 +389,9 @@ Approval rows can be made tamper-evident with signed receipts, so a later audit
387
389
  can verify which operator approved which payload hash. See
388
390
  [`docs/action-receipts.md`](docs/action-receipts.md).
389
391
 
390
- A pipeline's `schedule` decides when it runs — an interval (`1h`), `manual` (operator `/run` only), or `webhook`. The `webhook` server is opt-in and opens no port unless enabled:
392
+ A pipeline's `schedule` decides when it runs — an interval (`1h`), a cron expression in the pipeline's time zone (`"0 8 * * 1-5"` with `timezone: Europe/Berlin`), `@daily`-style shortcuts, `manual` (operator `/run` only), or `webhook`. Schedules continue from the recorded run history across restarts, `pause_after_failures` stops a pipeline that keeps failing, and `SIGTERM` lets running pipelines finish within `timeouts.shutdown_grace`. See [running Draftcat unattended](docs/operations.md).
393
+
394
+ The `webhook` server is opt-in and opens no port unless enabled:
391
395
 
392
396
  ```yaml
393
397
  webhook: {enabled: true, addr: 127.0.0.1:8088, secret_env: DRAFTCAT_WEBHOOK_SECRET}
@@ -437,7 +441,7 @@ The deterministic-boundary architecture is documented in the **Production AI Aut
437
441
  - [#12 LLM Skills as YAML](https://gist.github.com/renezander030/a28f118dec07d275ccc825aa833aba92) — prompt + output_schema + role in versioned YAML, validated by a linter
438
442
  - [#13 Inbound Agent Webhook Auth](https://gist.github.com/renezander030/26d46d4c7fb9ab1b43fe19bc5bad6d07) — constant-time bearer token, fail-closed on empty secret, async 202 dispatch
439
443
  - [#14 Self-Improving Voice Agent](https://gist.github.com/renezander030/262d8b8c44b4cddf51b3b84c40f3f669) — harvest Learning-Items, group, propose a minimal workflow diff, two approval gates, git commit + auto-versioned Dograh publish
440
- - [#15 AI Action Audit Trail](https://gist.github.com/renezander030/ad81c7a805a09a844983f881e2c487e5) — append-only `action_approvals` table + queries: who approved which payload, when; find gated actions that ran with no approval (GDPR Art. 22)
444
+ - [#15 AI Action Audit Trail](https://gist.github.com/renezander030/ad81c7a805a09a844983f881e2c487e5) — versioned action-bound `action_approvals` receipts: who approved which payload, when; action-level receipt binding, expiry and fail-closed audit persistence
441
445
 
442
446
  ## Related projects
443
447
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "draftcat",
3
- "version": "0.9.0",
3
+ "version": "0.10.0",
4
4
  "description": "Governed AI pipelines with human approval gates",
5
5
  "license": "MIT",
6
6
  "author": "Rene Zander",