Jesús Pérez d59644b96f
feat: unified auth model, project onboarding, install pipeline, config management
The full scope across this batch: POST /sessions key→token exchange, SessionStore dual-index with revoke_by_id, CLI Bearer injection (ONTOREF_TOKEN), ontoref setup
  --gen-keys, install scripts, daemon config form roundtrip, ADR-004/005, on+re self-description update (fully-self-described), and landing page refresh.
2026-03-13 20:56:31 +00:00

145 lines
4.5 KiB
Plaintext

# ~/.config/ontoref/config.ncl — ontoref-daemon runtime configuration
#
# Edit interactively:
# ontoref config-edit (typedialog-web roundtrip, browser form)
# Validate:
# nickel typecheck ~/.config/ontoref/config.ncl
# Apply (NCL pipe bootstrap, ADR-004):
# ontoref-daemon-boot
# ontoref-daemon-boot --dry-run # preview composed JSON
let Port = std.contract.from_predicate
(fun p => std.is_number p && p > 1024 && p < 65536)
in
let LogLevel = [| 'trace, 'debug, 'info, 'warn, 'error |] in
let Rotation = [| 'daily, 'hourly, 'never |] in
let Actor = [| 'developer, 'agent, 'ci, 'admin |] in
let Severity = [| 'Hard, 'Soft |] in
let KeyRole = [| 'admin, 'viewer |] in
let KeyEntry = { role | KeyRole, hash | String } in
let ProjectEntry = {
slug | String,
root | String,
nickel_import_paths | Array String | default = [],
keys | Array KeyEntry | default = [],
remote_url | String | default = "",
push_only | Bool | default = false,
} in
{
# Nickel import paths used when exporting/typechecking configs that import schemas.
# Relative paths are resolved from the config file's directory.
nickel_import_paths | Array String = [],
# Registered projects served by this daemon instance.
# Local projects: populated from projects.ncl (ontoref project-add /path/to/project)
# Remote projects: populated from remote-projects.ncl (ontoref project-add-remote <url> <slug>)
projects | Array ProjectEntry = (import "./projects.ncl") @ (import "./remote-projects.ncl"),
daemon = {
port | Port = 7890,
host | String = "127.0.0.1",
},
db = {
enabled | Bool = false,
url | String = "http://localhost:8000/ontoref",
pool_max | Number = 5,
},
nats_events = {
enabled | Bool = false,
url | String = "nats://localhost:4222",
streams_config | String = "",
emit | Array String = [],
subscribe | Array String = [],
handlers_dir | String = "reflection/handlers",
},
log = {
level | LogLevel = 'info,
rotation | Rotation = 'daily,
max_files | Number = 7,
compress | Bool = false,
archive | String = "",
# Resolved by daemon from platform conventions when empty:
# macOS: ~/Library/Logs/ontoref/ Linux: ~/.local/state/ontoref/logs/
path | String = "",
},
cache = {
# Resolved by daemon from platform conventions when empty:
# macOS: ~/Library/Caches/ontoref/ Linux: ~/.cache/ontoref/
path | String = "",
},
ui = {
# Resolved from platform data dir when empty:
# macOS: ~/Library/Application Support/ontoref/templates
# Linux: ~/.local/share/ontoref/templates
templates_dir | String = "",
public_dir | String = "",
logo | String = "ontoref-logo.svg",
tls_cert | String = "",
tls_key | String = "",
},
mode_run = {
rules | Array {
when | { mode_id | String | optional, actor | String | optional },
allow | Bool,
reason | String,
} = [
{ when = { mode_id = "validate-ontology" }, allow = true, reason = "validation always allowed" },
{ when = { actor = "agent" }, allow = true, reason = "agent actor always allowed" },
{ when = { actor = "ci" }, allow = true, reason = "ci actor always allowed" },
],
},
actor_init | Array {
actor | String,
mode | String,
auto_run | Bool,
} = [
{ actor = "agent", mode = "describe capabilities", auto_run = true },
{ actor = "developer", mode = "", auto_run = false },
{ actor = "ci", mode = "", auto_run = false },
],
quick_actions | Array {
id | String,
label | String,
icon | String,
category | String,
mode | String,
actors | Array String,
} = [
{
id = "gen-docs",
label = "Generate documentation",
icon = "book-open",
category = "docs",
mode = "generate-mdbook",
actors = ["developer", "agent"],
},
{
id = "sync-onto",
label = "Sync ontology",
icon = "refresh",
category = "sync",
mode = "sync-ontology",
actors = ["developer", "ci", "agent"],
},
{
id = "coder-workflow",
label = "Coder workflow",
icon = "code",
category = "process",
mode = "coder-workflow",
actors = ["developer", "agent"],
},
],
}