From e055f9c4a35178628d162ac886b6ac8be25c156d Mon Sep 17 00:00:00 2001 From: Cooper Maruyama Date: Thu, 30 Apr 2026 06:54:09 -0700 Subject: [PATCH] feat(db): add example values to all protobuf schemas MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds `example` annotations to every field across the 18 schemas that were missing them (apps, aws, config, databases, deployment, extensions, files, healthchecks, modules, onboarding, scripts, secrets, services, shells, sst, step-ca, tasks, variables) so the studio can surface realistic placeholders and downstream tooling has a single source of truth for sample values. Threads examples through the existing buf-gen pipeline by appending `(example: ...)` to each field's proto comment in `proto.nix`'s renderer. String examples are JSON-escaped so embedded quotes/newlines (INI fragments, JSON snippets) don't break proto3 syntax. `protobuf-ts` preserves these comments, so the generated TypeScript .d.ts files now carry examples as JSDoc — visible in the studio without a separate fixtures pipeline. Verified end to end: - `packages/proto/generate.sh proto` regenerates all 26 .proto files cleanly with `(example: ...)` annotations - `buf generate` succeeds; examples surface in `packages/proto/gen/ts/*_pb.d.ts` JSDoc - `bun apps/web/scripts/demo-smoke.ts` exercises the demo agent's MSW handlers and confirms `/health`, `/api/state`, `/api/nix/data?entity=apps`, and `/api/process-compose/processes` return the expected fixture data (11/11 assertions pass) Co-Authored-By: Claude Opus 4.7 (1M context) --- .../agent/server/connect_entities_gen.go | 140 +++++++++--------- apps/web/scripts/demo-smoke.ts | 125 ++++++++++++++++ nix/stackpanel/db/lib/proto.nix | 44 +++++- nix/stackpanel/db/schemas/apps.proto.nix | 54 +++---- nix/stackpanel/db/schemas/aws.proto.nix | 20 +-- nix/stackpanel/db/schemas/config.proto.nix | 8 +- nix/stackpanel/db/schemas/databases.proto.nix | 28 ++-- .../db/schemas/deployment.proto.nix | 66 ++++----- .../db/schemas/extensions.proto.nix | 66 ++++----- nix/stackpanel/db/schemas/files.proto.nix | 16 +- .../db/schemas/healthchecks.proto.nix | 56 +++---- nix/stackpanel/db/schemas/modules.proto.nix | 110 +++++++------- .../db/schemas/onboarding.proto.nix | 44 +++--- nix/stackpanel/db/schemas/scripts.proto.nix | 20 +-- nix/stackpanel/db/schemas/secrets.proto.nix | 42 +++--- nix/stackpanel/db/schemas/services.proto.nix | 34 ++--- nix/stackpanel/db/schemas/shells.proto.nix | 28 ++-- nix/stackpanel/db/schemas/sst.proto.nix | 30 ++-- nix/stackpanel/db/schemas/step-ca.proto.nix | 12 +- nix/stackpanel/db/schemas/tasks.proto.nix | 18 +-- nix/stackpanel/db/schemas/variables.proto.nix | 14 +- packages/proto/gen/gopb/app_build.pb.go | 2 +- packages/proto/gen/gopb/apps.pb.go | 70 +++++---- packages/proto/gen/gopb/aws.pb.go | 20 +-- packages/proto/gen/gopb/bun_app.pb.go | 8 +- packages/proto/gen/gopb/config.pb.go | 8 +- packages/proto/gen/gopb/databases.pb.go | 28 ++-- packages/proto/gen/gopb/deployment.pb.go | 66 ++++----- packages/proto/gen/gopb/extensions.pb.go | 66 ++++----- packages/proto/gen/gopb/files.pb.go | 16 +- packages/proto/gen/gopb/go_app.pb.go | 8 +- packages/proto/gen/gopb/healthchecks.pb.go | 56 +++---- packages/proto/gen/gopb/modules.pb.go | 108 +++++++------- packages/proto/gen/gopb/onboarding.pb.go | 44 +++--- packages/proto/gen/gopb/oxlint_app.pb.go | 6 +- packages/proto/gen/gopb/scripts.pb.go | 20 +-- packages/proto/gen/gopb/secrets.pb.go | 25 +++- packages/proto/gen/gopb/services.pb.go | 34 ++--- packages/proto/gen/gopb/shells.pb.go | 28 ++-- packages/proto/gen/gopb/sst.pb.go | 30 ++-- packages/proto/gen/gopb/step_ca.pb.go | 12 +- packages/proto/gen/gopb/tasks.pb.go | 18 +-- packages/proto/gen/gopb/theme.pb.go | 14 +- packages/proto/gen/gopb/variables.pb.go | 14 +- .../stackpanel.db.App.jsonschema.bundle.json | 8 +- .../json/stackpanel.db.App.jsonschema.json | 2 +- ...panel.db.App.jsonschema.strict.bundle.json | 8 +- .../stackpanel.db.App.jsonschema.strict.json | 2 +- .../json/stackpanel.db.App.schema.bundle.json | 8 +- .../gen/json/stackpanel.db.App.schema.json | 2 +- ...tackpanel.db.App.schema.strict.bundle.json | 8 +- .../json/stackpanel.db.App.schema.strict.json | 2 +- ...l.db.AppEnvironment.jsonschema.bundle.json | 2 +- ...ackpanel.db.AppEnvironment.jsonschema.json | 2 +- ...pEnvironment.jsonschema.strict.bundle.json | 2 +- ...l.db.AppEnvironment.jsonschema.strict.json | 2 +- ...panel.db.AppEnvironment.schema.bundle.json | 2 +- .../stackpanel.db.AppEnvironment.schema.json | 2 +- ...b.AppEnvironment.schema.strict.bundle.json | 2 +- ...panel.db.AppEnvironment.schema.strict.json | 2 +- .../stackpanel.db.Apps.jsonschema.bundle.json | 8 +- ...anel.db.Apps.jsonschema.strict.bundle.json | 8 +- .../stackpanel.db.Apps.schema.bundle.json | 8 +- ...ackpanel.db.Apps.schema.strict.bundle.json | 8 +- ...el.db.CodegenTarget.jsonschema.bundle.json | 2 +- ...tackpanel.db.CodegenTarget.jsonschema.json | 2 +- ...odegenTarget.jsonschema.strict.bundle.json | 2 +- ...el.db.CodegenTarget.jsonschema.strict.json | 2 +- ...kpanel.db.CodegenTarget.schema.bundle.json | 2 +- .../stackpanel.db.CodegenTarget.schema.json | 2 +- ...db.CodegenTarget.schema.strict.bundle.json | 2 +- ...kpanel.db.CodegenTarget.schema.strict.json | 2 +- ...anel.db.Environment.jsonschema.bundle.json | 6 +- .../stackpanel.db.Environment.jsonschema.json | 6 +- ....Environment.jsonschema.strict.bundle.json | 4 +- ...anel.db.Environment.jsonschema.strict.json | 4 +- ...ackpanel.db.Environment.schema.bundle.json | 6 +- .../stackpanel.db.Environment.schema.json | 6 +- ...l.db.Environment.schema.strict.bundle.json | 4 +- ...ackpanel.db.Environment.schema.strict.json | 4 +- ...EnvironmentVariable.jsonschema.bundle.json | 4 + ...nel.db.EnvironmentVariable.jsonschema.json | 4 + ...mentVariable.jsonschema.strict.bundle.json | 4 + ...EnvironmentVariable.jsonschema.strict.json | 4 + ....db.EnvironmentVariable.schema.bundle.json | 4 + ...ckpanel.db.EnvironmentVariable.schema.json | 4 + ...ironmentVariable.schema.strict.bundle.json | 4 + ....db.EnvironmentVariable.schema.strict.json | 4 + ...kpanel.db.MasterKey.jsonschema.bundle.json | 10 +- .../stackpanel.db.MasterKey.jsonschema.json | 10 +- ...db.MasterKey.jsonschema.strict.bundle.json | 6 +- ...kpanel.db.MasterKey.jsonschema.strict.json | 6 +- ...stackpanel.db.MasterKey.schema.bundle.json | 10 +- .../json/stackpanel.db.MasterKey.schema.json | 10 +- ...nel.db.MasterKey.schema.strict.bundle.json | 6 +- ...stackpanel.db.MasterKey.schema.strict.json | 6 +- ...tackpanel.db.Module.jsonschema.bundle.json | 4 +- .../json/stackpanel.db.Module.jsonschema.json | 4 +- ...el.db.Module.jsonschema.strict.bundle.json | 2 +- ...tackpanel.db.Module.jsonschema.strict.json | 2 +- .../stackpanel.db.Module.schema.bundle.json | 4 +- .../gen/json/stackpanel.db.Module.schema.json | 4 +- ...kpanel.db.Module.schema.strict.bundle.json | 2 +- .../stackpanel.db.Module.schema.strict.json | 2 +- ...l.db.ModuleResponse.jsonschema.bundle.json | 4 +- ...duleResponse.jsonschema.strict.bundle.json | 2 +- ...panel.db.ModuleResponse.schema.bundle.json | 4 +- ...b.ModuleResponse.schema.strict.bundle.json | 2 +- ...ackpanel.db.Modules.jsonschema.bundle.json | 4 +- ...l.db.Modules.jsonschema.strict.bundle.json | 2 +- .../stackpanel.db.Modules.schema.bundle.json | 4 +- ...panel.db.Modules.schema.strict.bundle.json | 2 +- ...ackpanel.db.Secrets.jsonschema.bundle.json | 26 ++-- .../stackpanel.db.Secrets.jsonschema.json | 8 +- ...l.db.Secrets.jsonschema.strict.bundle.json | 16 +- ...ackpanel.db.Secrets.jsonschema.strict.json | 4 +- .../stackpanel.db.Secrets.schema.bundle.json | 26 ++-- .../json/stackpanel.db.Secrets.schema.json | 8 +- ...panel.db.Secrets.schema.strict.bundle.json | 16 +- .../stackpanel.db.Secrets.schema.strict.json | 4 +- ...ckpanel.db.Variable.jsonschema.bundle.json | 4 +- .../stackpanel.db.Variable.jsonschema.json | 4 +- ....db.Variable.jsonschema.strict.bundle.json | 4 +- ...ckpanel.db.Variable.jsonschema.strict.json | 4 +- .../stackpanel.db.Variable.schema.bundle.json | 4 +- .../json/stackpanel.db.Variable.schema.json | 4 +- ...anel.db.Variable.schema.strict.bundle.json | 4 +- .../stackpanel.db.Variable.schema.strict.json | 4 +- ...kpanel.db.Variables.jsonschema.bundle.json | 4 +- ...db.Variables.jsonschema.strict.bundle.json | 4 +- ...stackpanel.db.Variables.schema.bundle.json | 4 +- ...nel.db.Variables.schema.strict.bundle.json | 4 +- packages/proto/gen/ts/app_build.ts | 2 +- packages/proto/gen/ts/app_build_pb.d.ts | 2 +- packages/proto/gen/ts/apps.ts | 66 ++++++--- packages/proto/gen/ts/apps_pb.d.ts | 58 +++++--- packages/proto/gen/ts/apps_pb.js | 2 +- packages/proto/gen/ts/aws.ts | 20 +-- packages/proto/gen/ts/aws_pb.d.ts | 20 +-- packages/proto/gen/ts/bun_app.ts | 8 +- packages/proto/gen/ts/bun_app_pb.d.ts | 8 +- packages/proto/gen/ts/config.ts | 8 +- packages/proto/gen/ts/config_pb.d.ts | 8 +- packages/proto/gen/ts/databases.ts | 28 ++-- packages/proto/gen/ts/databases_pb.d.ts | 28 ++-- packages/proto/gen/ts/deployment.ts | 66 ++++----- packages/proto/gen/ts/deployment_pb.d.ts | 66 ++++----- packages/proto/gen/ts/extensions.ts | 66 ++++----- packages/proto/gen/ts/extensions_pb.d.ts | 66 ++++----- packages/proto/gen/ts/files.ts | 16 +- packages/proto/gen/ts/files_pb.d.ts | 16 +- packages/proto/gen/ts/go_app.ts | 8 +- packages/proto/gen/ts/go_app_pb.d.ts | 8 +- .../gen/ts/google/protobuf/descriptor.ts | 14 +- packages/proto/gen/ts/healthchecks.ts | 56 +++---- packages/proto/gen/ts/healthchecks_pb.d.ts | 56 +++---- packages/proto/gen/ts/modules.ts | 108 +++++++------- packages/proto/gen/ts/modules_pb.d.ts | 108 +++++++------- packages/proto/gen/ts/onboarding.ts | 44 +++--- packages/proto/gen/ts/onboarding_pb.d.ts | 44 +++--- packages/proto/gen/ts/oxlint_app.ts | 6 +- packages/proto/gen/ts/oxlint_app_pb.d.ts | 6 +- packages/proto/gen/ts/scripts.ts | 20 +-- packages/proto/gen/ts/scripts_pb.d.ts | 20 +-- packages/proto/gen/ts/secrets.ts | 26 ++-- packages/proto/gen/ts/secrets_pb.d.ts | 26 ++-- packages/proto/gen/ts/services.ts | 34 ++--- packages/proto/gen/ts/services_pb.d.ts | 34 ++--- packages/proto/gen/ts/shells.ts | 28 ++-- packages/proto/gen/ts/shells_pb.d.ts | 28 ++-- packages/proto/gen/ts/sst.ts | 30 ++-- packages/proto/gen/ts/sst_pb.d.ts | 30 ++-- packages/proto/gen/ts/step_ca.ts | 12 +- packages/proto/gen/ts/step_ca_pb.d.ts | 12 +- packages/proto/gen/ts/tasks.ts | 18 +-- packages/proto/gen/ts/tasks_pb.d.ts | 18 +-- packages/proto/gen/ts/theme.ts | 14 +- packages/proto/gen/ts/theme_pb.d.ts | 14 +- packages/proto/gen/ts/variables.ts | 4 +- packages/proto/gen/ts/variables_pb.d.ts | 4 +- packages/proto/proto/app_build.proto | 2 +- packages/proto/proto/apps.proto | 54 ++++--- packages/proto/proto/aws.proto | 20 +-- packages/proto/proto/bun_app.proto | 8 +- packages/proto/proto/config.proto | 8 +- packages/proto/proto/databases.proto | 28 ++-- packages/proto/proto/deployment.proto | 66 ++++----- packages/proto/proto/extensions.proto | 66 ++++----- packages/proto/proto/files.proto | 16 +- packages/proto/proto/go_app.proto | 8 +- packages/proto/proto/healthchecks.proto | 56 +++---- packages/proto/proto/modules.proto | 108 +++++++------- packages/proto/proto/onboarding.proto | 44 +++--- packages/proto/proto/oxlint_app.proto | 6 +- packages/proto/proto/scripts.proto | 20 +-- packages/proto/proto/secrets.proto | 26 ++-- packages/proto/proto/services.proto | 34 ++--- packages/proto/proto/shells.proto | 28 ++-- packages/proto/proto/sst.proto | 30 ++-- packages/proto/proto/step_ca.proto | 12 +- packages/proto/proto/tasks.proto | 18 +-- packages/proto/proto/theme.proto | 14 +- packages/proto/proto/variables.proto | 4 +- 203 files changed, 2238 insertions(+), 1942 deletions(-) create mode 100644 apps/web/scripts/demo-smoke.ts diff --git a/apps/stackpanel-go/internal/agent/server/connect_entities_gen.go b/apps/stackpanel-go/internal/agent/server/connect_entities_gen.go index c0f4ab5b..622cfdcb 100644 --- a/apps/stackpanel-go/internal/agent/server/connect_entities_gen.go +++ b/apps/stackpanel-go/internal/agent/server/connect_entities_gen.go @@ -12,18 +12,18 @@ import ( "google.golang.org/protobuf/encoding/protojson" ) -// GetModules retrieves the modules entity from Nix data. +// GetSecrets retrieves the secrets entity from Nix data. // Generated from proto - do not edit manually. -func (s *AgentServiceServer) GetModules( +func (s *AgentServiceServer) GetSecrets( ctx context.Context, - req *connect.Request[gopb.GetModulesRequest], -) (*connect.Response[gopb.Modules], error) { - data, err := s.server.readNixEntityJSON("modules") + req *connect.Request[gopb.GetSecretsRequest], +) (*connect.Response[gopb.Secrets], error) { + data, err := s.server.readNixEntityJSON("secrets") if err != nil { return nil, connect.NewError(connect.CodeInternal, err) } - var result gopb.Modules + var result gopb.Secrets if len(data) > 0 { if err := protojson.Unmarshal(data, &result); err != nil { // Fall back to standard JSON if protojson fails @@ -36,18 +36,36 @@ func (s *AgentServiceServer) GetModules( return connect.NewResponse(&result), nil } -// GetUsers retrieves the users entity from Nix data. +// SetSecrets updates the secrets entity in Nix data. // Generated from proto - do not edit manually. -func (s *AgentServiceServer) GetUsers( +func (s *AgentServiceServer) SetSecrets( ctx context.Context, - req *connect.Request[gopb.GetUsersRequest], -) (*connect.Response[gopb.Users], error) { - data, err := s.server.readNixEntityJSON("users") + req *connect.Request[gopb.Secrets], +) (*connect.Response[gopb.Secrets], error) { + data, err := protojson.Marshal(req.Msg) if err != nil { return nil, connect.NewError(connect.CodeInternal, err) } - var result gopb.Users + if err := s.server.writeNixEntityJSON("secrets", data); err != nil { + return nil, connect.NewError(connect.CodeInternal, err) + } + + return connect.NewResponse(req.Msg), nil +} + +// GetAws retrieves the aws entity from Nix data. +// Generated from proto - do not edit manually. +func (s *AgentServiceServer) GetAws( + ctx context.Context, + req *connect.Request[gopb.GetAwsRequest], +) (*connect.Response[gopb.Aws], error) { + data, err := s.server.readNixEntityJSON("aws") + if err != nil { + return nil, connect.NewError(connect.CodeInternal, err) + } + + var result gopb.Aws if len(data) > 0 { if err := protojson.Unmarshal(data, &result); err != nil { // Fall back to standard JSON if protojson fails @@ -60,18 +78,18 @@ func (s *AgentServiceServer) GetUsers( return connect.NewResponse(&result), nil } -// SetUsers updates the users entity in Nix data. +// SetAws updates the aws entity in Nix data. // Generated from proto - do not edit manually. -func (s *AgentServiceServer) SetUsers( +func (s *AgentServiceServer) SetAws( ctx context.Context, - req *connect.Request[gopb.Users], -) (*connect.Response[gopb.Users], error) { + req *connect.Request[gopb.Aws], +) (*connect.Response[gopb.Aws], error) { data, err := protojson.Marshal(req.Msg) if err != nil { return nil, connect.NewError(connect.CodeInternal, err) } - if err := s.server.writeNixEntityJSON("users", data); err != nil { + if err := s.server.writeNixEntityJSON("aws", data); err != nil { return nil, connect.NewError(connect.CodeInternal, err) } @@ -162,18 +180,18 @@ func (s *AgentServiceServer) SetVariables( return connect.NewResponse(req.Msg), nil } -// GetModule retrieves the module entity from Nix data. +// GetModules retrieves the modules entity from Nix data. // Generated from proto - do not edit manually. -func (s *AgentServiceServer) GetModule( +func (s *AgentServiceServer) GetModules( ctx context.Context, - req *connect.Request[gopb.GetModuleRequest], -) (*connect.Response[gopb.Module], error) { - data, err := s.server.readNixEntityJSON("module") + req *connect.Request[gopb.GetModulesRequest], +) (*connect.Response[gopb.Modules], error) { + data, err := s.server.readNixEntityJSON("modules") if err != nil { return nil, connect.NewError(connect.CodeInternal, err) } - var result gopb.Module + var result gopb.Modules if len(data) > 0 { if err := protojson.Unmarshal(data, &result); err != nil { // Fall back to standard JSON if protojson fails @@ -186,18 +204,18 @@ func (s *AgentServiceServer) GetModule( return connect.NewResponse(&result), nil } -// GetModuleOutputs retrieves the moduleoutputs entity from Nix data. +// GetModule retrieves the module entity from Nix data. // Generated from proto - do not edit manually. -func (s *AgentServiceServer) GetModuleOutputs( +func (s *AgentServiceServer) GetModule( ctx context.Context, - req *connect.Request[gopb.GetModuleOutputsRequest], -) (*connect.Response[gopb.ModuleOutputs], error) { - data, err := s.server.readNixEntityJSON("moduleoutputs") + req *connect.Request[gopb.GetModuleRequest], +) (*connect.Response[gopb.Module], error) { + data, err := s.server.readNixEntityJSON("module") if err != nil { return nil, connect.NewError(connect.CodeInternal, err) } - var result gopb.ModuleOutputs + var result gopb.Module if len(data) > 0 { if err := protojson.Unmarshal(data, &result); err != nil { // Fall back to standard JSON if protojson fails @@ -210,18 +228,18 @@ func (s *AgentServiceServer) GetModuleOutputs( return connect.NewResponse(&result), nil } -// GetSst retrieves the sst entity from Nix data. +// GetModuleOutputs retrieves the moduleoutputs entity from Nix data. // Generated from proto - do not edit manually. -func (s *AgentServiceServer) GetSst( +func (s *AgentServiceServer) GetModuleOutputs( ctx context.Context, - req *connect.Request[gopb.GetSstRequest], -) (*connect.Response[gopb.Sst], error) { - data, err := s.server.readNixEntityJSON("sst") + req *connect.Request[gopb.GetModuleOutputsRequest], +) (*connect.Response[gopb.ModuleOutputs], error) { + data, err := s.server.readNixEntityJSON("moduleoutputs") if err != nil { return nil, connect.NewError(connect.CodeInternal, err) } - var result gopb.Sst + var result gopb.ModuleOutputs if len(data) > 0 { if err := protojson.Unmarshal(data, &result); err != nil { // Fall back to standard JSON if protojson fails @@ -276,18 +294,18 @@ func (s *AgentServiceServer) SetConfig( return connect.NewResponse(req.Msg), nil } -// GetSecrets retrieves the secrets entity from Nix data. +// GetUsers retrieves the users entity from Nix data. // Generated from proto - do not edit manually. -func (s *AgentServiceServer) GetSecrets( +func (s *AgentServiceServer) GetUsers( ctx context.Context, - req *connect.Request[gopb.GetSecretsRequest], -) (*connect.Response[gopb.Secrets], error) { - data, err := s.server.readNixEntityJSON("secrets") + req *connect.Request[gopb.GetUsersRequest], +) (*connect.Response[gopb.Users], error) { + data, err := s.server.readNixEntityJSON("users") if err != nil { return nil, connect.NewError(connect.CodeInternal, err) } - var result gopb.Secrets + var result gopb.Users if len(data) > 0 { if err := protojson.Unmarshal(data, &result); err != nil { // Fall back to standard JSON if protojson fails @@ -300,36 +318,36 @@ func (s *AgentServiceServer) GetSecrets( return connect.NewResponse(&result), nil } -// SetSecrets updates the secrets entity in Nix data. +// SetUsers updates the users entity in Nix data. // Generated from proto - do not edit manually. -func (s *AgentServiceServer) SetSecrets( +func (s *AgentServiceServer) SetUsers( ctx context.Context, - req *connect.Request[gopb.Secrets], -) (*connect.Response[gopb.Secrets], error) { + req *connect.Request[gopb.Users], +) (*connect.Response[gopb.Users], error) { data, err := protojson.Marshal(req.Msg) if err != nil { return nil, connect.NewError(connect.CodeInternal, err) } - if err := s.server.writeNixEntityJSON("secrets", data); err != nil { + if err := s.server.writeNixEntityJSON("users", data); err != nil { return nil, connect.NewError(connect.CodeInternal, err) } return connect.NewResponse(req.Msg), nil } -// GetAws retrieves the aws entity from Nix data. +// GetSst retrieves the sst entity from Nix data. // Generated from proto - do not edit manually. -func (s *AgentServiceServer) GetAws( +func (s *AgentServiceServer) GetSst( ctx context.Context, - req *connect.Request[gopb.GetAwsRequest], -) (*connect.Response[gopb.Aws], error) { - data, err := s.server.readNixEntityJSON("aws") + req *connect.Request[gopb.GetSstRequest], +) (*connect.Response[gopb.Sst], error) { + data, err := s.server.readNixEntityJSON("sst") if err != nil { return nil, connect.NewError(connect.CodeInternal, err) } - var result gopb.Aws + var result gopb.Sst if len(data) > 0 { if err := protojson.Unmarshal(data, &result); err != nil { // Fall back to standard JSON if protojson fails @@ -341,21 +359,3 @@ func (s *AgentServiceServer) GetAws( return connect.NewResponse(&result), nil } - -// SetAws updates the aws entity in Nix data. -// Generated from proto - do not edit manually. -func (s *AgentServiceServer) SetAws( - ctx context.Context, - req *connect.Request[gopb.Aws], -) (*connect.Response[gopb.Aws], error) { - data, err := protojson.Marshal(req.Msg) - if err != nil { - return nil, connect.NewError(connect.CodeInternal, err) - } - - if err := s.server.writeNixEntityJSON("aws", data); err != nil { - return nil, connect.NewError(connect.CodeInternal, err) - } - - return connect.NewResponse(req.Msg), nil -} diff --git a/apps/web/scripts/demo-smoke.ts b/apps/web/scripts/demo-smoke.ts new file mode 100644 index 00000000..4a354ecd --- /dev/null +++ b/apps/web/scripts/demo-smoke.ts @@ -0,0 +1,125 @@ +#!/usr/bin/env bun +/** + * Standalone smoke test for the demo agent. + * + * Runs without the vitest harness so it can be invoked from any environment + * that has bun installed (no `bun install` required for this single script — + * msw is the only runtime dependency the handlers use, and it's already + * pulled in by apps/web). + * + * Run: bun apps/web/scripts/demo-smoke.ts + */ + +import { DEMO_BASE_URL, demoEntities, demoStateJson } from "../src/demo/fixture"; +import { demoHandlers } from "../src/demo/handlers"; + +type AnyHandler = (typeof demoHandlers)[number]; + +let failures = 0; + +function assert(cond: unknown, label: string): void { + if (cond) { + console.log(` ok ${label}`); + } else { + failures++; + console.error(` FAIL ${label}`); + } +} + +async function run(handler: AnyHandler, request: Request): Promise { + const result = await ( + handler as unknown as { + run: (args: { request: Request }) => Promise<{ response: Response } | null>; + } + ).run({ request }); + if (!result) throw new Error(`handler did not match: ${request.url}`); + return result.response; +} + +function findHandler(method: string, path: string): AnyHandler { + const target = `${DEMO_BASE_URL}${path}`; + for (const h of demoHandlers) { + const info = (h as unknown as { info: { method: string; path: string } }) + .info; + if (info.method !== method) continue; + if (info.path === target || info.path === path) return h; + } + throw new Error(`no handler for ${method} ${path}`); +} + +async function main() { + console.log("# demo agent smoke test"); + + { + console.log("GET /health"); + const res = await run( + findHandler("GET", "/health"), + new Request(`${DEMO_BASE_URL}/health`), + ); + const body = (await res.json()) as { status: string; agentId: string }; + assert(body.status === "ok", `status === "ok" (got ${body.status})`); + assert( + body.agentId === "demo-agent", + `agentId === "demo-agent" (got ${body.agentId})`, + ); + } + + { + console.log("GET /api/state"); + const res = await run( + findHandler("GET", "/api/state"), + new Request(`${DEMO_BASE_URL}/api/state`), + ); + const body = (await res.json()) as typeof demoStateJson; + assert( + body.projectName === demoStateJson.projectName, + `projectName === "${demoStateJson.projectName}"`, + ); + assert( + body.basePort === demoStateJson.basePort, + `basePort === ${demoStateJson.basePort}`, + ); + assert(Object.keys(body.apps).includes("web"), "apps include `web`"); + } + + { + console.log("GET /api/nix/data?entity=apps"); + const res = await run( + findHandler("GET", "/api/nix/data"), + new Request(`${DEMO_BASE_URL}/api/nix/data?entity=apps`), + ); + const body = (await res.json()) as { + success: boolean; + data: { entity: string; exists: boolean; data: unknown }; + }; + assert(body.success === true, "success === true"); + assert(body.data.entity === "apps", `entity === "apps"`); + assert(body.data.exists === true, "exists === true"); + assert( + JSON.stringify(body.data.data) === JSON.stringify(demoEntities.apps), + "data matches demoEntities.apps", + ); + } + + { + console.log("GET /api/process-compose/processes"); + const res = await run( + findHandler("GET", "/api/process-compose/processes"), + new Request(`${DEMO_BASE_URL}/api/process-compose/processes`), + ); + const body = (await res.json()) as { processes: { name: string }[] }; + assert(body.processes.length > 0, "processes.length > 0"); + assert( + body.processes.some((p) => p.name === "web"), + "processes include `web`", + ); + } + + if (failures > 0) { + console.error(`\n${failures} assertion(s) failed`); + process.exit(1); + } + console.log("\nall demo agent assertions passed"); +} + +await main(); diff --git a/nix/stackpanel/db/lib/proto.nix b/nix/stackpanel/db/lib/proto.nix index 60610f0b..bcb4e356 100644 --- a/nix/stackpanel/db/lib/proto.nix +++ b/nix/stackpanel/db/lib/proto.nix @@ -538,16 +538,54 @@ let else field.type; + # Format an example value for inclusion in proto comments. + # protobuf-ts emits these comments as JSDoc, so the studio (and any + # downstream demo/mock agent) can pick examples up via the generated + # TypeScript types without needing a separate fixtures pipeline. + # + # Comments must be single-line and can't contain unescaped quotes that + # would break proto3 token parsing, so strings get JSON-escaped (which + # also handles newlines) before being rendered. + escapeForComment = + s: + let + escaped = builtins.replaceStrings + [ "\\" "\"" "\n" "\r" "\t" "*/" ] + [ "\\\\" "\\\"" "\\n" "\\r" "\\t" "*\\/" ] + s; + in + ''"${escaped}"''; + formatExample = + v: + if builtins.isString v then + escapeForComment v + else if builtins.isBool v then + (if v then "true" else "false") + else if builtins.isInt v || builtins.isFloat v then + toString v + else if builtins.isList v then + "[${lib.concatMapStringsSep ", " formatExample v}]" + else + builtins.toJSON v; + hasExample = (field.example or null) != null; + exampleStr = lib.optionalString hasExample " (example: ${formatExample field.example})"; + # For multiline descriptions, put comment above the field hasMultiline = field.description != "" && lib.hasInfix "\n" field.description; + descWithExample = field.description + exampleStr; blockComment = if hasMultiline then - " /*\n * ${lib.concatStringsSep "\n * " (lib.splitString "\n" field.description)}\n */\n" + " /*\n * ${lib.concatStringsSep "\n * " (lib.splitString "\n" descWithExample)}\n */\n" else ""; + inlineDesc = + if field.description == "" then + (lib.optionalString hasExample "example: ${formatExample field.example}") + else + descWithExample; inlineComment = lib.optionalString ( - field.description != "" && !hasMultiline - ) " // ${field.description}"; + inlineDesc != "" && !hasMultiline + ) " // ${inlineDesc}"; num = if field.number != null then field.number else fieldNum; in "${blockComment} ${typeStr} ${protoFieldName} = ${toString num};${inlineComment}"; diff --git a/nix/stackpanel/db/schemas/apps.proto.nix b/nix/stackpanel/db/schemas/apps.proto.nix index 82e32c4f..db73a5c7 100644 --- a/nix/stackpanel/db/schemas/apps.proto.nix +++ b/nix/stackpanel/db/schemas/apps.proto.nix @@ -59,12 +59,12 @@ proto.mkProtoFile { name = "AppDeploy"; description = "Deployment mapping for Colmena (targets, roles, and modules)"; fields = { - enable = proto.bool 1 "Enable deployment mapping for this app"; - targets = proto.repeated (proto.string 2 "Target machine ids or tag selectors"); - role = proto.optional (proto.string 3 "Deployment role label for this app"); - nixos_modules = proto.repeated (proto.string 4 "Extra NixOS modules to import for this app"); - system = proto.optional (proto.string 5 "Target system/architecture (e.g., x86_64-linux)"); - secrets = proto.repeated (proto.string 6 "Secret references required by this app during deploy"); + enable = proto.withExample true (proto.bool 1 "Enable deployment mapping for this app"); + targets = proto.repeated (proto.withExample "prod-web-01" (proto.string 2 "Target machine ids or tag selectors")); + role = proto.optional (proto.withExample "web" (proto.string 3 "Deployment role label for this app")); + nixos_modules = proto.repeated (proto.withExample "./modules/nginx.nix" (proto.string 4 "Extra NixOS modules to import for this app")); + system = proto.optional (proto.withExample "x86_64-linux" (proto.string 5 "Target system/architecture (e.g., x86_64-linux)")); + secrets = proto.repeated (proto.withExample "DATABASE_URL" (proto.string 6 "Secret references required by this app during deploy")); }; }; @@ -73,8 +73,8 @@ proto.mkProtoFile { name = "AppEnvironment"; description = "Environment configuration (e.g., dev, staging, production)"; fields = { - name = proto.string 1 "Name of the environment"; - description = proto.optional (proto.string 2 "(optional) Description of the environment"); + name = proto.withExample "dev" (proto.string 1 "Name of the environment"); + description = proto.optional (proto.withExample "Local development environment" (proto.string 2 "(optional) Description of the environment")); # Simple map of ENV_VAR_NAME to value (literal or vals reference) env = proto.map "string" "string" 3 '' Environment variables for this environment. @@ -82,14 +82,14 @@ proto.mkProtoFile { Value: Literal string or vals reference (e.g., ref+sops://...) ''; extends = proto.repeated ( - proto.string 4 "Inherit these environments - useful for sharing environment variables between environments." + proto.withExample "common" (proto.string 4 "Inherit these environments - useful for sharing environment variables between environments.") ); secrets = proto.repeated ( - proto.string 5 '' + proto.withExample "DATABASE_URL" (proto.string 5 '' Env var names in this environment that contain sensitive values. Used to auto-derive deployment.secrets — these are wrapped with alchemy.secret() at deploy time. - '' + '') ); }; }; @@ -98,18 +98,18 @@ proto.mkProtoFile { name = "EnvironmentVariable"; description = "Environment variable for this app"; fields = { - key = proto.string 1 "ID of the environment variable - defaults to key used in the attribute path. KEY will be read from $KEY in the environment"; - required = proto.bool 2 "Whether the environment variable is required"; - secret = proto.bool 3 "Whether the environment variable is sensitive"; - value = proto.optional (proto.string 4 "Value of the environment variable"); - sops = proto.optional (proto.string 5 "Path to the SOPS file for this variable's group"); - defaultValue = proto.optional (proto.string 6 "Default value of the environment variable"); - description = proto.optional (proto.string 7 '' + key = proto.withExample "DATABASE_URL" (proto.string 1 "ID of the environment variable - defaults to key used in the attribute path. KEY will be read from $KEY in the environment"); + required = proto.withExample true (proto.bool 2 "Whether the environment variable is required"); + secret = proto.withExample false (proto.bool 3 "Whether the environment variable is sensitive"); + value = proto.optional (proto.withExample "postgres://localhost:5432/app" (proto.string 4 "Value of the environment variable")); + sops = proto.optional (proto.withExample ".stack/secrets/dev.yaml" (proto.string 5 "Path to the SOPS file for this variable's group")); + defaultValue = proto.optional (proto.withExample "postgres://localhost:5432/app" (proto.string 6 "Default value of the environment variable")); + description = proto.optional (proto.withExample "Postgres connection string used by the API server" (proto.string 7 '' Human-readable description of what this variable is for and where to obtain it. Surfaced in the studio Variables UI and in the actionable error message thrown by `loadAppEnv(..., { validate: true })` when the variable is missing. - ''); + '')); }; }; @@ -118,12 +118,12 @@ proto.mkProtoFile { name = "App"; description = "Configuration for a single application in the workspace"; fields = { - name = proto.string 1 "Display name of the app"; - description = proto.optional (proto.string 2 "Description of the app"); - path = proto.string 3 "Relative path to the app directory"; - type = proto.optional (proto.string 4 "App type/runtime (bun, go, python, rust, etc.)"); - port = proto.optional (proto.int32 5 "Development server port"); - domain = proto.optional (proto.string 6 "Local development domain"); + name = proto.withExample "Web App" (proto.string 1 "Display name of the app"); + description = proto.optional (proto.withExample "Frontend web application" (proto.string 2 "Description of the app")); + path = proto.withExample "apps/web" (proto.string 3 "Relative path to the app directory"); + type = proto.optional (proto.withExample "bun" (proto.string 4 "App type/runtime (bun, go, python, rust, etc.)")); + port = proto.optional (proto.withExample 3000 (proto.int32 5 "Development server port")); + domain = proto.optional (proto.withExample "web.localhost" (proto.string 6 "Local development domain")); # Per-environment configuration environments = proto.map "string" "AppEnvironment" 7 '' deprecated: use env instead @@ -132,9 +132,9 @@ proto.mkProtoFile { deploy = proto.message "AppDeploy" 8 "Colmena deployment mapping for this app"; env = proto.map "string" "EnvironmentVariable" 9 "Environment variables for this app"; environmentIds = proto.repeated ( - proto.string 10 '' + proto.withExample "dev" (proto.string 10 '' Environment IDs for this app. Defaults to "dev", "prod", "staging", "test". - '' + '') ); }; }; diff --git a/nix/stackpanel/db/schemas/aws.proto.nix b/nix/stackpanel/db/schemas/aws.proto.nix index 42bfc7ea..e73d715a 100644 --- a/nix/stackpanel/db/schemas/aws.proto.nix +++ b/nix/stackpanel/db/schemas/aws.proto.nix @@ -41,8 +41,8 @@ proto.mkProtoFile { description = "AWS configuration including Roles Anywhere for certificate-based authentication"; fields = { roles_anywhere = proto.message "RolesAnywhere" 1 "AWS Roles Anywhere configuration"; - default_profile = proto.string 2 "AWS profile name to use as default (default: 'default')"; - extra_config = proto.string 3 "Additional AWS config to append (raw INI format)"; + default_profile = proto.withExample "default" (proto.string 2 "AWS profile name to use as default (default: 'default')"); + extra_config = proto.withExample "[profile dev]\nregion = us-east-1" (proto.string 3 "Additional AWS config to append (raw INI format)"); }; }; @@ -51,14 +51,14 @@ proto.mkProtoFile { name = "RolesAnywhere"; description = "AWS Roles Anywhere configuration for certificate-based authentication"; fields = { - enable = proto.bool 1 "Enable AWS Roles Anywhere cert auth"; - region = proto.string 2 "AWS region"; - account_id = proto.string 3 "AWS account ID"; - role_name = proto.string 4 "IAM role name to assume"; - trust_anchor_arn = proto.string 5 "AWS Roles Anywhere trust anchor ARN"; - profile_arn = proto.string 6 "AWS Roles Anywhere profile ARN"; - cache_buffer_seconds = proto.string 7 "Seconds before expiry to refresh cached credentials"; - prompt_on_shell = proto.bool 8 "Prompt for AWS cert-auth setup on shell entry if not configured"; + enable = proto.withExample true (proto.bool 1 "Enable AWS Roles Anywhere cert auth"); + region = proto.withExample "us-east-1" (proto.string 2 "AWS region"); + account_id = proto.withExample "123456789012" (proto.string 3 "AWS account ID"); + role_name = proto.withExample "DeveloperRole" (proto.string 4 "IAM role name to assume"); + trust_anchor_arn = proto.withExample "arn:aws:rolesanywhere:us-east-1:123456789012:trust-anchor/abcd1234" (proto.string 5 "AWS Roles Anywhere trust anchor ARN"); + profile_arn = proto.withExample "arn:aws:rolesanywhere:us-east-1:123456789012:profile/efgh5678" (proto.string 6 "AWS Roles Anywhere profile ARN"); + cache_buffer_seconds = proto.withExample "300" (proto.string 7 "Seconds before expiry to refresh cached credentials"); + prompt_on_shell = proto.withExample true (proto.bool 8 "Prompt for AWS cert-auth setup on shell entry if not configured"); }; }; }; diff --git a/nix/stackpanel/db/schemas/config.proto.nix b/nix/stackpanel/db/schemas/config.proto.nix index 37d8f42d..6593de80 100644 --- a/nix/stackpanel/db/schemas/config.proto.nix +++ b/nix/stackpanel/db/schemas/config.proto.nix @@ -22,10 +22,10 @@ proto.mkProtoFile { name = "Config"; description = "Stackpanel project configuration"; fields = { - enable = proto.bool 1 "Enable stackpanel for this project"; - name = proto.string 2 "Project name"; - github = proto.string 3 "GitHub repository (owner/repo format)"; - debug = proto.bool 4 "Enable debug output"; + enable = proto.withExample true (proto.bool 1 "Enable stackpanel for this project"); + name = proto.withExample "stackpanel-demo" (proto.string 2 "Project name"); + github = proto.withExample "darkmatter/stackpanel" (proto.string 3 "GitHub repository (owner/repo format)"); + debug = proto.withExample false (proto.bool 4 "Enable debug output"); }; }; }; diff --git a/nix/stackpanel/db/schemas/databases.proto.nix b/nix/stackpanel/db/schemas/databases.proto.nix index dc9998de..cab8810f 100644 --- a/nix/stackpanel/db/schemas/databases.proto.nix +++ b/nix/stackpanel/db/schemas/databases.proto.nix @@ -50,7 +50,7 @@ proto.mkProtoFile { name = "Databases"; description = "Database connection and configuration settings"; fields = { - default = proto.string 1 "Default database configuration to use"; + default = proto.withExample "primary" (proto.string 1 "Default database configuration to use"); databases = proto.map "string" "DatabaseInstance" 2 "Database configurations by environment/name"; }; }; @@ -63,9 +63,9 @@ proto.mkProtoFile { type = proto.message "DatabaseType" 1 "Database type"; connection = proto.message "Connection" 2 "Database connection settings"; pool = proto.message "Pool" 3 "Connection pool settings"; - migrations_path = proto.string 4 "Path to migrations directory"; - seeds_path = proto.optional (proto.string 5 "Path to seed data directory"); - auto_migrate = proto.bool 6 "Run migrations on startup"; + migrations_path = proto.withExample "./apps/server/migrations" (proto.string 4 "Path to migrations directory"); + seeds_path = proto.optional (proto.withExample "./apps/server/seeds" (proto.string 5 "Path to seed data directory")); + auto_migrate = proto.withExample true (proto.bool 6 "Run migrations on startup"); }; }; @@ -74,12 +74,12 @@ proto.mkProtoFile { name = "Connection"; description = "Database connection settings"; fields = { - host = proto.string 1 "Database host"; - port = proto.int32 2 "Database port"; - database = proto.string 3 "Database name"; - username = proto.string 4 "Database username"; - password_env = proto.optional (proto.string 5 "Environment variable containing the password"); - ssl = proto.bool 6 "Enable SSL/TLS connection"; + host = proto.withExample "localhost" (proto.string 1 "Database host"); + port = proto.withExample 5432 (proto.int32 2 "Database port"); + database = proto.withExample "stackpanel" (proto.string 3 "Database name"); + username = proto.withExample "postgres" (proto.string 4 "Database username"); + password_env = proto.optional (proto.withExample "DATABASE_PASSWORD" (proto.string 5 "Environment variable containing the password")); + ssl = proto.withExample false (proto.bool 6 "Enable SSL/TLS connection"); ssl_mode = proto.message "SSLMode" 7 "SSL mode for PostgreSQL connections"; }; }; @@ -89,10 +89,10 @@ proto.mkProtoFile { name = "Pool"; description = "Connection pool settings"; fields = { - min = proto.int32 1 "Minimum connections in pool"; - max = proto.int32 2 "Maximum connections in pool"; - idle_timeout = proto.int32 3 "Idle connection timeout in seconds"; - connection_timeout = proto.int32 4 "Connection timeout in seconds"; + min = proto.withExample 2 (proto.int32 1 "Minimum connections in pool"); + max = proto.withExample 10 (proto.int32 2 "Maximum connections in pool"); + idle_timeout = proto.withExample 30 (proto.int32 3 "Idle connection timeout in seconds"); + connection_timeout = proto.withExample 5 (proto.int32 4 "Connection timeout in seconds"); }; }; }; diff --git a/nix/stackpanel/db/schemas/deployment.proto.nix b/nix/stackpanel/db/schemas/deployment.proto.nix index dfe0096e..31ac45c4 100644 --- a/nix/stackpanel/db/schemas/deployment.proto.nix +++ b/nix/stackpanel/db/schemas/deployment.proto.nix @@ -106,9 +106,9 @@ proto.mkProtoFile { name = "FlyGlobalConfig"; description = "Fly.io global settings"; fields = { - organization = proto.optional (proto.string 1 "Fly.io organization name"); - default_region = proto.string 2 "Default region for new apps"; - registry_prefix = proto.string 3 "Container registry prefix"; + organization = proto.optional (proto.withExample "darkmatter-io" (proto.string 1 "Fly.io organization name")); + default_region = proto.withExample "iad" (proto.string 2 "Default region for new apps"); + registry_prefix = proto.withExample "registry.fly.io/darkmatter" (proto.string 3 "Container registry prefix"); }; }; @@ -116,19 +116,19 @@ proto.mkProtoFile { name = "FlyAppConfig"; description = "Fly.io per-app deployment configuration"; fields = { - app_name = proto.string 1 "Fly.io app name"; - region = proto.string 2 "Primary deployment region"; - memory = proto.string 3 "Memory allocation (e.g., '512mb', '1gb')"; + app_name = proto.withExample "stackpanel-web" (proto.string 1 "Fly.io app name"); + region = proto.withExample "iad" (proto.string 2 "Primary deployment region"); + memory = proto.withExample "512mb" (proto.string 3 "Memory allocation (e.g., '512mb', '1gb')"); cpu_kind = proto.message "FlyMachineCpuKind" 4 "CPU type"; - cpus = proto.int32 5 "Number of CPUs"; + cpus = proto.withExample 1 (proto.int32 5 "Number of CPUs"); auto_stop = proto.message "FlyAutoStop" 6 "Auto-stop behavior"; - auto_start = proto.bool 7 "Auto-start on request"; - min_machines = proto.int32 8 "Minimum machines to keep running"; - force_https = proto.bool 9 "Force HTTPS for all requests"; + auto_start = proto.withExample true (proto.bool 7 "Auto-start on request"); + min_machines = proto.withExample 0 (proto.int32 8 "Minimum machines to keep running"); + force_https = proto.withExample true (proto.bool 9 "Force HTTPS for all requests"); env = proto.map "string" "string" 10 "Environment variables"; - secrets = proto.repeated (proto.string 11 "Secret names to inject"); - health_check_path = proto.optional (proto.string 12 "Health check endpoint path"); - health_check_interval = proto.optional (proto.string 13 "Health check interval"); + secrets = proto.repeated (proto.withExample "DATABASE_URL" (proto.string 11 "Secret names to inject")); + health_check_path = proto.optional (proto.withExample "/health" (proto.string 12 "Health check endpoint path")); + health_check_interval = proto.optional (proto.withExample "30s" (proto.string 13 "Health check interval")); }; }; @@ -139,9 +139,9 @@ proto.mkProtoFile { name = "CloudflareGlobalConfig"; description = "Cloudflare global settings"; fields = { - account_id = proto.optional (proto.string 1 "Cloudflare account ID"); - compatibility_date = proto.string 2 "Workers compatibility date"; - default_route = proto.optional (proto.string 3 "Default custom domain route pattern"); + account_id = proto.optional (proto.withExample "abcd1234abcd1234abcd1234abcd1234" (proto.string 1 "Cloudflare account ID")); + compatibility_date = proto.withExample "2026-04-01" (proto.string 2 "Workers compatibility date"); + default_route = proto.optional (proto.withExample "*.stackpanel.com/*" (proto.string 3 "Default custom domain route pattern")); }; }; @@ -149,15 +149,15 @@ proto.mkProtoFile { name = "CloudflareAppConfig"; description = "Cloudflare per-app deployment configuration"; fields = { - worker_name = proto.string 1 "Worker name"; + worker_name = proto.withExample "stackpanel-web" (proto.string 1 "Worker name"); type = proto.message "CloudflareWorkerType" 2 "Deployment type (vite/worker/pages)"; - route = proto.optional (proto.string 3 "Custom domain route pattern"); - compatibility = proto.string 4 "Compatibility mode (node/browser)"; + route = proto.optional (proto.withExample "stackpanel.com/*" (proto.string 3 "Custom domain route pattern")); + compatibility = proto.withExample "node" (proto.string 4 "Compatibility mode (node/browser)"); bindings = proto.map "string" "string" 5 "Environment variable bindings"; - secrets = proto.repeated (proto.string 6 "Secret names to inject"); - kv_namespaces = proto.repeated (proto.string 7 "KV namespace bindings"); - d1_databases = proto.repeated (proto.string 8 "D1 database bindings"); - r2_buckets = proto.repeated (proto.string 9 "R2 bucket bindings"); + secrets = proto.repeated (proto.withExample "API_KEY" (proto.string 6 "Secret names to inject")); + kv_namespaces = proto.repeated (proto.withExample "SESSIONS" (proto.string 7 "KV namespace bindings")); + d1_databases = proto.repeated (proto.withExample "DB" (proto.string 8 "D1 database bindings")); + r2_buckets = proto.repeated (proto.withExample "ASSETS" (proto.string 9 "R2 bucket bindings")); }; }; @@ -168,7 +168,7 @@ proto.mkProtoFile { name = "AppDeployment"; description = "Per-app deployment configuration"; fields = { - enable = proto.bool 1 "Enable deployment for this app"; + enable = proto.withExample true (proto.bool 1 "Enable deployment for this app"); provider = proto.message "DeploymentProvider" 2 "Deployment provider"; fly = proto.optional (proto.message "FlyAppConfig" 3 "Fly.io specific config"); cloudflare = proto.optional (proto.message "CloudflareAppConfig" 4 "Cloudflare specific config"); @@ -182,17 +182,17 @@ proto.mkProtoFile { name = "DeploymentRecord"; description = "Record of a deployment"; fields = { - id = proto.string 1 "Unique deployment ID"; - app_name = proto.string 2 "App that was deployed"; + id = proto.withExample "deploy-2026-04-30-001" (proto.string 1 "Unique deployment ID"); + app_name = proto.withExample "web" (proto.string 2 "App that was deployed"); provider = proto.message "DeploymentProvider" 3 "Provider used"; status = proto.message "DeploymentStatus" 4 "Current status"; - version = proto.string 5 "Version/tag deployed"; - started_at = proto.string 6 "ISO timestamp of deployment start"; - completed_at = proto.optional (proto.string 7 "ISO timestamp of completion"); - error = proto.optional (proto.string 8 "Error message if failed"); - url = proto.optional (proto.string 9 "Deployed URL"); - commit_sha = proto.optional (proto.string 10 "Git commit SHA"); - triggered_by = proto.optional (proto.string 11 "User or system that triggered"); + version = proto.withExample "v1.4.2" (proto.string 5 "Version/tag deployed"); + started_at = proto.withExample "2026-04-30T18:21:04Z" (proto.string 6 "ISO timestamp of deployment start"); + completed_at = proto.optional (proto.withExample "2026-04-30T18:23:51Z" (proto.string 7 "ISO timestamp of completion")); + error = proto.optional (proto.withExample "build failed: missing DATABASE_URL" (proto.string 8 "Error message if failed")); + url = proto.optional (proto.withExample "https://stackpanel.com" (proto.string 9 "Deployed URL")); + commit_sha = proto.optional (proto.withExample "ba6e3d245" (proto.string 10 "Git commit SHA")); + triggered_by = proto.optional (proto.withExample "cooper@darkmatter.io" (proto.string 11 "User or system that triggered")); }; }; diff --git a/nix/stackpanel/db/schemas/extensions.proto.nix b/nix/stackpanel/db/schemas/extensions.proto.nix index 903635d7..ffb94606 100644 --- a/nix/stackpanel/db/schemas/extensions.proto.nix +++ b/nix/stackpanel/db/schemas/extensions.proto.nix @@ -101,9 +101,9 @@ proto.mkProtoFile { name = "Extensions"; description = "Extensions and plugins configuration"; fields = { - enabled = proto.bool 1 "Enable extensions system"; - auto_update = proto.bool 2 "Automatically check for extension updates"; - registry = proto.optional (proto.string 3 "Default extension registry URL"); + enabled = proto.withExample true (proto.bool 1 "Enable extensions system"); + auto_update = proto.withExample false (proto.bool 2 "Automatically check for extension updates"); + registry = proto.optional (proto.withExample "https://registry.stackpanel.dev" (proto.string 3 "Default extension registry URL")); extensions = proto.map "string" "Extension" 4 "Installed extensions by key"; }; }; @@ -116,24 +116,24 @@ proto.mkProtoFile { description = "Extension configuration and metadata"; fields = { # Identity - name = proto.string 1 "Display name of the extension"; + name = proto.withExample "SST" (proto.string 1 "Display name of the extension"); description = proto.optional ( - proto.string 2 "Human-readable description of what the extension does" + proto.withExample "Serverless Stack infrastructure-as-code integration" (proto.string 2 "Human-readable description of what the extension does") ); # Status - enabled = proto.bool 3 "Whether this extension is enabled"; - builtin = proto.bool 4 "Whether this is a built-in extension shipped with stackpanel"; + enabled = proto.withExample true (proto.bool 3 "Whether this extension is enabled"); + builtin = proto.withExample true (proto.bool 4 "Whether this is a built-in extension shipped with stackpanel"); # Source information source = proto.message "ExtensionSource" 5 "Extension source configuration"; - version = proto.optional (proto.string 6 "Version constraint (e.g., '^1.0.0', '~2.3', 'latest')"); + version = proto.optional (proto.withExample "^1.0.0" (proto.string 6 "Version constraint (e.g., '^1.0.0', '~2.3', 'latest')")); # Organization category = proto.message "ExtensionCategory" 7 "Category for grouping in UI"; - priority = proto.int32 8 "Load order priority (lower = earlier)"; - tags = proto.repeated (proto.string 9 "Tags for filtering extensions"); - dependencies = proto.repeated (proto.string 10 "Other extensions this depends on"); + priority = proto.withExample 100 (proto.int32 8 "Load order priority (lower = earlier)"); + tags = proto.repeated (proto.withExample "infra" (proto.string 9 "Tags for filtering extensions")); + dependencies = proto.repeated (proto.withExample "secrets" (proto.string 10 "Other extensions this depends on")); # UI configuration panels = proto.repeated (proto.message "ExtensionPanel" 11 "UI panels provided by this extension"); @@ -154,12 +154,12 @@ proto.mkProtoFile { description = "Extension source configuration"; fields = { type = proto.message "ExtensionSourceType" 1 "Source type for the extension"; - repo = proto.optional (proto.string 2 "GitHub repository (owner/repo) for github source type"); - package = proto.optional (proto.string 3 "NPM package name for npm source type"); - path = proto.optional (proto.string 4 "Local path for local source type"); - url = proto.optional (proto.string 5 "URL for url source type"); - ref = proto.optional (proto.string 6 "Git ref (branch, tag, commit) for github source type"); - module_path = proto.optional (proto.string 7 "Path to the Nix module within the source"); + repo = proto.optional (proto.withExample "darkmatter/stackpanel-sst" (proto.string 2 "GitHub repository (owner/repo) for github source type")); + package = proto.optional (proto.withExample "@stackpanel/extension-sst" (proto.string 3 "NPM package name for npm source type")); + path = proto.optional (proto.withExample "./extensions/sst" (proto.string 4 "Local path for local source type")); + url = proto.optional (proto.withExample "https://example.com/sst.tar.gz" (proto.string 5 "URL for url source type")); + ref = proto.optional (proto.withExample "main" (proto.string 6 "Git ref (branch, tag, commit) for github source type")); + module_path = proto.optional (proto.withExample "./module.nix" (proto.string 7 "Path to the Nix module within the source")); }; }; @@ -170,14 +170,14 @@ proto.mkProtoFile { name = "ExtensionFeatures"; description = "Flags indicating which core stackpanel features this extension configures"; fields = { - files = proto.bool 1 "Extension generates files via stackpanel.files"; - scripts = proto.bool 2 "Extension provides shell scripts/commands"; - tasks = proto.bool 3 "Extension defines tasks"; - secrets = proto.bool 4 "Extension manages secrets/variables"; - shell_hooks = proto.bool 5 "Extension adds shell hooks"; - packages = proto.bool 6 "Extension adds devshell packages"; - services = proto.bool 7 "Extension configures services/processes"; - checks = proto.bool 8 "Extension defines checks/validations"; + files = proto.withExample true (proto.bool 1 "Extension generates files via stackpanel.files"); + scripts = proto.withExample true (proto.bool 2 "Extension provides shell scripts/commands"); + tasks = proto.withExample false (proto.bool 3 "Extension defines tasks"); + secrets = proto.withExample false (proto.bool 4 "Extension manages secrets/variables"); + shell_hooks = proto.withExample true (proto.bool 5 "Extension adds shell hooks"); + packages = proto.withExample true (proto.bool 6 "Extension adds devshell packages"); + services = proto.withExample false (proto.bool 7 "Extension configures services/processes"); + checks = proto.withExample false (proto.bool 8 "Extension defines checks/validations"); }; }; @@ -188,11 +188,11 @@ proto.mkProtoFile { name = "ExtensionPanel"; description = "UI panel configuration for the web interface"; fields = { - id = proto.string 1 "Unique panel identifier"; - title = proto.string 2 "Display title"; - description = proto.optional (proto.string 3 "Panel description"); + id = proto.withExample "sst-status" (proto.string 1 "Unique panel identifier"); + title = proto.withExample "SST Deployment Status" (proto.string 2 "Display title"); + description = proto.optional (proto.withExample "Live status of SST stacks across environments" (proto.string 3 "Panel description")); type = proto.message "PanelType" 4 "Panel type (determines which component to render)"; - order = proto.int32 5 "Display order (lower = first)"; + order = proto.withExample 10 (proto.int32 5 "Display order (lower = first)"); fields = proto.repeated (proto.message "PanelField" 6 "Panel configuration fields"); }; }; @@ -202,10 +202,10 @@ proto.mkProtoFile { name = "PanelField"; description = "Configuration field for a panel"; fields = { - name = proto.string 1 "Field name (maps to component prop)"; + name = proto.withExample "stage" (proto.string 1 "Field name (maps to component prop)"); type = proto.message "FieldType" 2 "Field type"; - value = proto.string 3 "Field value (JSON-encoded for complex types)"; - options = proto.repeated (proto.string 4 "Options for select fields"); + value = proto.withExample "production" (proto.string 3 "Field value (JSON-encoded for complex types)"); + options = proto.repeated (proto.withExample "production" (proto.string 4 "Options for select fields")); }; }; @@ -216,7 +216,7 @@ proto.mkProtoFile { name = "ExtensionAppData"; description = "Extension data specific to an application"; fields = { - enabled = proto.bool 1 "Whether extension is enabled for this app"; + enabled = proto.withExample true (proto.bool 1 "Whether extension is enabled for this app"); config = proto.map "string" "string" 2 "Extension config for this app (string key-value pairs)"; }; }; diff --git a/nix/stackpanel/db/schemas/files.proto.nix b/nix/stackpanel/db/schemas/files.proto.nix index af678f54..860c4adc 100644 --- a/nix/stackpanel/db/schemas/files.proto.nix +++ b/nix/stackpanel/db/schemas/files.proto.nix @@ -38,17 +38,17 @@ proto.mkProtoFile { name = "GeneratedFile"; description = "A file to be generated into the project workspace"; fields = { - path = proto.string 1 "Relative path from project root where file will be written"; + path = proto.withExample ".stack/gen/ide/vscode/settings.json" (proto.string 1 "Relative path from project root where file will be written"); type = proto.message "FileType" 2 "Type of content source (text or derivation)"; - enable = proto.bool 3 "Whether this file should be generated"; - mode = proto.optional (proto.string 4 "File permissions (e.g., '0755')"); - source = proto.optional (proto.string 5 "Module or component that generated this file"); - description = proto.optional (proto.string 6 "Human-readable description of the file's purpose"); + enable = proto.withExample true (proto.bool 3 "Whether this file should be generated"); + mode = proto.optional (proto.withExample "0644" (proto.string 4 "File permissions (e.g., '0755')")); + source = proto.optional (proto.withExample "stackpanel.ide.vscode" (proto.string 5 "Module or component that generated this file")); + description = proto.optional (proto.withExample "VS Code workspace settings generated by the IDE module" (proto.string 6 "Human-readable description of the file's purpose")); store_path = proto.optional ( - proto.string 7 "Nix store path containing the file content (for derivation type)" + proto.withExample "/nix/store/abc123-vscode-settings/settings.json" (proto.string 7 "Nix store path containing the file content (for derivation type)") ); text = proto.optional ( - proto.string 8 "Inline text content (for text type, may be truncated for large files)" + proto.withExample "{\n \"editor.formatOnSave\": true\n}\n" (proto.string 8 "Inline text content (for text type, may be truncated for large files)") ); }; }; @@ -58,7 +58,7 @@ proto.mkProtoFile { name = "GeneratedFiles"; description = "Collection of all generated file entries"; fields = { - enable = proto.bool 1 "Whether file generation is enabled globally"; + enable = proto.withExample true (proto.bool 1 "Whether file generation is enabled globally"); entries = proto.map "string" "GeneratedFile" 2 "Map of file path to file configuration"; }; }; diff --git a/nix/stackpanel/db/schemas/healthchecks.proto.nix b/nix/stackpanel/db/schemas/healthchecks.proto.nix index d19c7209..53c0ee33 100644 --- a/nix/stackpanel/db/schemas/healthchecks.proto.nix +++ b/nix/stackpanel/db/schemas/healthchecks.proto.nix @@ -66,35 +66,35 @@ proto.mkProtoFile { name = "Healthcheck"; description = "A healthcheck definition that can verify module functionality"; fields = { - id = proto.string 1 "Unique identifier for the healthcheck"; - name = proto.string 2 "Display name for the healthcheck"; - description = proto.optional (proto.string 3 "Description of what this check verifies"); + id = proto.withExample "postgres-port" (proto.string 1 "Unique identifier for the healthcheck"); + name = proto.withExample "PostgreSQL listening" (proto.string 2 "Display name for the healthcheck"); + description = proto.optional (proto.withExample "Verifies the PostgreSQL service is accepting connections on its assigned port" (proto.string 3 "Description of what this check verifies")); type = proto.message "HealthcheckType" 4 "Type of healthcheck (script, nix, http, tcp)"; severity = proto.message "HealthcheckSeverity" 5 "How critical this check is"; # Script-based checks - agent executes derivation path directly (secure, no sh -c) - script_bin_path = proto.optional (proto.string 6 "Path to script executable in Nix store"); - script_source = proto.optional (proto.string 7 "Source type: inline, path, scriptRef, package"); + script_bin_path = proto.optional (proto.withExample "/nix/store/abc123-pg-check/bin/pg-check" (proto.string 6 "Path to script executable in Nix store")); + script_source = proto.optional (proto.withExample "scriptRef" (proto.string 7 "Source type: inline, path, scriptRef, package")); # Nix-based checks - nix_expr = proto.optional (proto.string 8 "Nix expression to evaluate (for NIX type)"); + nix_expr = proto.optional (proto.withExample "config.services.postgres.enable" (proto.string 8 "Nix expression to evaluate (for NIX type)")); # HTTP-based checks - http_url = proto.optional (proto.string 9 "URL to check (for HTTP type)"); - http_method = proto.optional (proto.string 10 "HTTP method (GET, POST, etc.)"); - http_expected_status = proto.optional (proto.int32 11 "Expected HTTP status code"); + http_url = proto.optional (proto.withExample "http://localhost:6402/health" (proto.string 9 "URL to check (for HTTP type)")); + http_method = proto.optional (proto.withExample "GET" (proto.string 10 "HTTP method (GET, POST, etc.)")); + http_expected_status = proto.optional (proto.withExample 200 (proto.int32 11 "Expected HTTP status code")); # TCP-based checks - tcp_host = proto.optional (proto.string 12 "Host to connect to (for TCP type)"); - tcp_port = proto.optional (proto.int32 13 "Port to connect to (for TCP type)"); + tcp_host = proto.optional (proto.withExample "localhost" (proto.string 12 "Host to connect to (for TCP type)")); + tcp_port = proto.optional (proto.withExample 6410 (proto.int32 13 "Port to connect to (for TCP type)")); # Timing - timeout_seconds = proto.int32 14 "Timeout for the check in seconds"; - interval_seconds = proto.optional (proto.int32 15 "How often to run this check (optional)"); + timeout_seconds = proto.withExample 5 (proto.int32 14 "Timeout for the check in seconds"); + interval_seconds = proto.optional (proto.withExample 30 (proto.int32 15 "How often to run this check (optional)")); # Metadata - module = proto.string 16 "Module that registered this healthcheck"; - tags = proto.repeated (proto.string 17 "Tags for filtering/grouping checks"); + module = proto.withExample "postgres" (proto.string 16 "Module that registered this healthcheck"); + tags = proto.repeated (proto.withExample "service" (proto.string 17 "Tags for filtering/grouping checks")); }; }; @@ -103,13 +103,13 @@ proto.mkProtoFile { name = "HealthcheckResult"; description = "The result of executing a healthcheck"; fields = { - check_id = proto.string 1 "ID of the healthcheck that was run"; + check_id = proto.withExample "postgres-port" (proto.string 1 "ID of the healthcheck that was run"); status = proto.message "HealthStatus" 2 "Result status of this check"; - message = proto.optional (proto.string 3 "Human-readable result message"); - error = proto.optional (proto.string 4 "Error message if check failed to execute"); - output = proto.optional (proto.string 5 "Raw output from script/command"); - duration_ms = proto.int64 6 "How long the check took to run in milliseconds"; - timestamp = proto.string 7 "When the check was run (RFC3339)"; + message = proto.optional (proto.withExample "PostgreSQL responded in 12ms" (proto.string 3 "Human-readable result message")); + error = proto.optional (proto.withExample "connection refused" (proto.string 4 "Error message if check failed to execute")); + output = proto.optional (proto.withExample "psql: connected to localhost:6410" (proto.string 5 "Raw output from script/command")); + duration_ms = proto.withExample 12 (proto.int64 6 "How long the check took to run in milliseconds"); + timestamp = proto.withExample "2026-04-30T18:21:04Z" (proto.string 7 "When the check was run (RFC3339)"); }; }; @@ -118,12 +118,12 @@ proto.mkProtoFile { name = "ModuleHealth"; description = "Aggregated health status for a module"; fields = { - module = proto.string 1 "Module name"; + module = proto.withExample "postgres" (proto.string 1 "Module name"); status = proto.message "HealthStatus" 2 "Aggregated health status"; checks = proto.repeated (proto.message "HealthcheckResult" 3 "Individual check results"); - healthy_count = proto.int32 4 "Number of passing checks"; - total_count = proto.int32 5 "Total number of checks"; - last_updated = proto.string 6 "When health was last evaluated (RFC3339)"; + healthy_count = proto.withExample 3 (proto.int32 4 "Number of passing checks"); + total_count = proto.withExample 3 (proto.int32 5 "Total number of checks"); + last_updated = proto.withExample "2026-04-30T18:21:04Z" (proto.string 6 "When health was last evaluated (RFC3339)"); }; }; @@ -134,9 +134,9 @@ proto.mkProtoFile { fields = { overall_status = proto.message "HealthStatus" 1 "Overall system health status"; modules = proto.map "string" "ModuleHealth" 2 "Health status per module"; - total_healthy = proto.int32 3 "Total healthy checks across all modules"; - total_checks = proto.int32 4 "Total checks across all modules"; - last_updated = proto.string 5 "When summary was last computed (RFC3339)"; + total_healthy = proto.withExample 12 (proto.int32 3 "Total healthy checks across all modules"); + total_checks = proto.withExample 14 (proto.int32 4 "Total checks across all modules"); + last_updated = proto.withExample "2026-04-30T18:21:04Z" (proto.string 5 "When summary was last computed (RFC3339)"); }; }; }; diff --git a/nix/stackpanel/db/schemas/modules.proto.nix b/nix/stackpanel/db/schemas/modules.proto.nix index e1c385c3..53507ebf 100644 --- a/nix/stackpanel/db/schemas/modules.proto.nix +++ b/nix/stackpanel/db/schemas/modules.proto.nix @@ -129,13 +129,13 @@ proto.mkProtoFile { name = "ModuleMeta"; description = "Display metadata for a module"; fields = { - name = proto.string 1 "Display name of the module"; - description = proto.optional (proto.string 2 "Human-readable description"); - icon = proto.optional (proto.string 3 "Lucide icon name (e.g., 'database', 'box')"); + name = proto.withExample "PostgreSQL" (proto.string 1 "Display name of the module"); + description = proto.optional (proto.withExample "Managed PostgreSQL service for local development" (proto.string 2 "Human-readable description")); + icon = proto.optional (proto.withExample "database" (proto.string 3 "Lucide icon name (e.g., 'database', 'box')")); category = proto.message "ModuleCategory" 4 "Category for UI grouping"; - author = proto.optional (proto.string 5 "Author or maintainer"); - version = proto.optional (proto.string 6 "Module version"); - homepage = proto.optional (proto.string 7 "URL to documentation or repository"); + author = proto.optional (proto.withExample "Darkmatter" (proto.string 5 "Author or maintainer")); + version = proto.optional (proto.withExample "1.2.0" (proto.string 6 "Module version")); + homepage = proto.optional (proto.withExample "https://stackpanel.dev/docs/modules/postgres" (proto.string 7 "URL to documentation or repository")); }; }; @@ -145,10 +145,10 @@ proto.mkProtoFile { description = "Where the module comes from"; fields = { type = proto.message "ModuleSourceType" 1 "Source type"; - flake_input = proto.optional (proto.string 2 "Flake input name (for flake-input type)"); - path = proto.optional (proto.string 3 "Local path (for local type)"); - registry_id = proto.optional (proto.string 4 "Registry ID (e.g., 'stackpanel/docker')"); - ref = proto.optional (proto.string 5 "Git ref (branch, tag, commit)"); + flake_input = proto.optional (proto.withExample "stackpanel-postgres" (proto.string 2 "Flake input name (for flake-input type)")); + path = proto.optional (proto.withExample "./modules/postgres" (proto.string 3 "Local path (for local type)")); + registry_id = proto.optional (proto.withExample "stackpanel/postgres" (proto.string 4 "Registry ID (e.g., 'stackpanel/docker')")); + ref = proto.optional (proto.withExample "main" (proto.string 5 "Git ref (branch, tag, commit)")); }; }; @@ -157,14 +157,14 @@ proto.mkProtoFile { name = "ModuleFeatures"; description = "Which stackpanel features this module uses"; fields = { - files = proto.bool 1 "Generates files via stackpanel.files"; - scripts = proto.bool 2 "Provides shell scripts/commands"; - tasks = proto.bool 3 "Defines turborepo tasks"; - healthchecks = proto.bool 4 "Defines health checks"; - services = proto.bool 5 "Configures background services"; - secrets = proto.bool 6 "Manages secrets/variables"; - packages = proto.bool 7 "Adds devshell packages"; - app_module = proto.bool 8 "Extends per-app configuration"; + files = proto.withExample true (proto.bool 1 "Generates files via stackpanel.files"); + scripts = proto.withExample true (proto.bool 2 "Provides shell scripts/commands"); + tasks = proto.withExample false (proto.bool 3 "Defines turborepo tasks"); + healthchecks = proto.withExample true (proto.bool 4 "Defines health checks"); + services = proto.withExample true (proto.bool 5 "Configures background services"); + secrets = proto.withExample false (proto.bool 6 "Manages secrets/variables"); + packages = proto.withExample true (proto.bool 7 "Adds devshell packages"); + app_module = proto.withExample false (proto.bool 8 "Extends per-app configuration"); }; }; @@ -173,10 +173,10 @@ proto.mkProtoFile { name = "ModulePanelField"; description = "A field in a module panel"; fields = { - name = proto.string 1 "Field name (maps to component prop)"; + name = proto.withExample "version" (proto.string 1 "Field name (maps to component prop)"); type = proto.message "ModuleFieldType" 2 "Field type"; - value = proto.string 3 "Field value (JSON-encoded for complex types)"; - options = proto.repeated (proto.string 4 "Options for select fields"); + value = proto.withExample "16" (proto.string 3 "Field value (JSON-encoded for complex types)"); + options = proto.repeated (proto.withExample "16" (proto.string 4 "Options for select fields")); }; }; @@ -185,11 +185,11 @@ proto.mkProtoFile { name = "ModulePanel"; description = "A UI panel provided by a module"; fields = { - id = proto.string 1 "Unique panel identifier"; - title = proto.string 2 "Display title"; - description = proto.optional (proto.string 3 "Panel description"); + id = proto.withExample "postgres-status" (proto.string 1 "Unique panel identifier"); + title = proto.withExample "Postgres" (proto.string 2 "Display title"); + description = proto.optional (proto.withExample "Process status, port, and connection string" (proto.string 3 "Panel description")); type = proto.message "ModulePanelType" 4 "Panel type (determines component)"; - order = proto.int32 5 "Display order (lower = first)"; + order = proto.withExample 20 (proto.int32 5 "Display order (lower = first)"); fields = proto.repeated (proto.message "ModulePanelField" 6 "Panel configuration fields"); }; }; @@ -199,7 +199,7 @@ proto.mkProtoFile { name = "ModuleAppData"; description = "Module data for a specific app"; fields = { - enabled = proto.bool 1 "Whether module is enabled for this app"; + enabled = proto.withExample true (proto.bool 1 "Whether module is enabled for this app"); config = proto.map "string" "string" 2 "Module config (string key-value pairs)"; }; }; @@ -210,8 +210,8 @@ proto.mkProtoFile { description = "Configuration for a stackpanel module"; fields = { # Identity - id = proto.string 1 "Module identifier (e.g., 'oxlint', 'postgres')"; - enable = proto.bool 2 "Whether the module is enabled"; + id = proto.withExample "postgres" (proto.string 1 "Module identifier (e.g., 'oxlint', 'postgres')"); + enable = proto.withExample true (proto.bool 2 "Whether the module is enabled"); # Metadata meta = proto.message "ModuleMeta" 3 "Display metadata"; @@ -223,20 +223,20 @@ proto.mkProtoFile { features = proto.message "ModuleFeatures" 5 "Feature flags"; # Dependencies - requires = proto.repeated (proto.string 6 "Required modules"); - conflicts = proto.repeated (proto.string 7 "Conflicting modules"); + requires = proto.repeated (proto.withExample "process-compose" (proto.string 6 "Required modules")); + conflicts = proto.repeated (proto.withExample "mysql" (proto.string 7 "Conflicting modules")); # Ordering - priority = proto.int32 8 "Load order priority (lower = earlier)"; + priority = proto.withExample 50 (proto.int32 8 "Load order priority (lower = earlier)"); # Categorization - tags = proto.repeated (proto.string 9 "Tags for filtering"); + tags = proto.repeated (proto.withExample "database" (proto.string 9 "Tags for filtering")); # Configuration - config_schema = proto.optional (proto.string 10 '' + config_schema = proto.optional (proto.withExample "{ \"type\": \"object\", \"properties\": { \"version\": { \"type\": \"string\" } } }" (proto.string 10 '' JSON Schema for generating configuration forms. Describes the module's configurable options. - ''); + '')); settings = proto.map "string" "string" 11 '' Module-level settings (key-value pairs). These are passed to the Nix module configuration. @@ -249,7 +249,7 @@ proto.mkProtoFile { apps = proto.map "string" "ModuleAppData" 13 "Per-app module data"; # Health checks - healthcheck_module = proto.optional (proto.string 14 "Linked healthcheck module name"); + healthcheck_module = proto.optional (proto.withExample "postgres" (proto.string 14 "Linked healthcheck module name")); }; }; @@ -267,7 +267,7 @@ proto.mkProtoFile { name = "EnableModuleRequest"; description = "Request to enable a module"; fields = { - module_id = proto.string 1 "Module identifier to enable"; + module_id = proto.withExample "postgres" (proto.string 1 "Module identifier to enable"); settings = proto.map "string" "string" 2 "Initial settings (optional)"; }; }; @@ -276,7 +276,7 @@ proto.mkProtoFile { name = "DisableModuleRequest"; description = "Request to disable a module"; fields = { - module_id = proto.string 1 "Module identifier to disable"; + module_id = proto.withExample "postgres" (proto.string 1 "Module identifier to disable"); }; }; @@ -284,7 +284,7 @@ proto.mkProtoFile { name = "UpdateModuleSettingsRequest"; description = "Request to update module settings"; fields = { - module_id = proto.string 1 "Module identifier"; + module_id = proto.withExample "postgres" (proto.string 1 "Module identifier"); settings = proto.map "string" "string" 2 "New settings"; }; }; @@ -294,8 +294,8 @@ proto.mkProtoFile { description = "Response containing a single module"; fields = { module = proto.message "Module" 1 "The module"; - success = proto.bool 2 "Whether the operation succeeded"; - message = proto.optional (proto.string 3 "Status message"); + success = proto.withExample true (proto.bool 2 "Whether the operation succeeded"); + message = proto.optional (proto.withExample "Module enabled" (proto.string 3 "Status message")); }; }; @@ -304,9 +304,9 @@ proto.mkProtoFile { name = "ModuleOutputFile"; description = "A file generated by a module"; fields = { - path = proto.string 1 "File path relative to project root"; - description = proto.optional (proto.string 2 "Description of the file"); - type = proto.string 3 "File type: text, derivation, symlink"; + path = proto.withExample ".stack/state/postgres.conf" (proto.string 1 "File path relative to project root"); + description = proto.optional (proto.withExample "Generated PostgreSQL config" (proto.string 2 "Description of the file")); + type = proto.withExample "text" (proto.string 3 "File type: text, derivation, symlink"); }; }; @@ -314,8 +314,8 @@ proto.mkProtoFile { name = "ModuleOutputScript"; description = "A script provided by a module"; fields = { - name = proto.string 1 "Script name (command)"; - description = proto.optional (proto.string 2 "Description of what the script does"); + name = proto.withExample "pg-reset" (proto.string 1 "Script name (command)"); + description = proto.optional (proto.withExample "Drop and recreate the development database" (proto.string 2 "Description of what the script does")); }; }; @@ -323,11 +323,11 @@ proto.mkProtoFile { name = "ModuleOutputHealthcheck"; description = "A healthcheck defined by a module"; fields = { - id = proto.string 1 "Healthcheck ID"; - name = proto.string 2 "Display name"; - description = proto.optional (proto.string 3 "Description of what it checks"); - severity = proto.string 4 "Severity: critical, warning, info"; - type = proto.string 5 "Check type: script, http, tcp, nix"; + id = proto.withExample "postgres-port" (proto.string 1 "Healthcheck ID"); + name = proto.withExample "PostgreSQL listening" (proto.string 2 "Display name"); + description = proto.optional (proto.withExample "TCP probe against the assigned port" (proto.string 3 "Description of what it checks")); + severity = proto.withExample "critical" (proto.string 4 "Severity: critical, warning, info"); + type = proto.withExample "tcp" (proto.string 5 "Check type: script, http, tcp, nix"); }; }; @@ -335,9 +335,9 @@ proto.mkProtoFile { name = "ModuleOutputPackage"; description = "A package added by a module"; fields = { - name = proto.string 1 "Package name"; - version = proto.optional (proto.string 2 "Package version"); - description = proto.optional (proto.string 3 "Package description"); + name = proto.withExample "postgresql_16" (proto.string 1 "Package name"); + version = proto.optional (proto.withExample "16.4" (proto.string 2 "Package version")); + description = proto.optional (proto.withExample "PostgreSQL 16 server and client" (proto.string 3 "Package description")); }; }; @@ -345,7 +345,7 @@ proto.mkProtoFile { name = "ModuleOutputs"; description = "Aggregated outputs of what a module creates"; fields = { - module_id = proto.string 1 "Module identifier"; + module_id = proto.withExample "postgres" (proto.string 1 "Module identifier"); files = proto.repeated (proto.message "ModuleOutputFile" 2 "Generated files"); scripts = proto.repeated (proto.message "ModuleOutputScript" 3 "Provided scripts"); healthchecks = proto.repeated (proto.message "ModuleOutputHealthcheck" 4 "Health checks"); @@ -357,7 +357,7 @@ proto.mkProtoFile { name = "GetModuleOutputsRequest"; description = "Request to get module outputs"; fields = { - module_id = proto.string 1 "Module identifier"; + module_id = proto.withExample "postgres" (proto.string 1 "Module identifier"); }; }; }; diff --git a/nix/stackpanel/db/schemas/onboarding.proto.nix b/nix/stackpanel/db/schemas/onboarding.proto.nix index 932e4077..079ccdd4 100644 --- a/nix/stackpanel/db/schemas/onboarding.proto.nix +++ b/nix/stackpanel/db/schemas/onboarding.proto.nix @@ -37,14 +37,14 @@ proto.mkProtoFile { name = "Onboarding"; description = "Onboarding configuration for new team members"; fields = { - enable = proto.bool 1 "Enable onboarding system"; - welcome_message = proto.string 2 "Welcome message shown to new team members"; - completion_message = proto.string 3 "Message shown when onboarding is complete"; + enable = proto.withExample true (proto.bool 1 "Enable onboarding system"); + welcome_message = proto.withExample "Welcome to Stackpanel — let's get you set up." (proto.string 2 "Welcome message shown to new team members"); + completion_message = proto.withExample "All set! Run `dev` to start your services." (proto.string 3 "Message shown when onboarding is complete"); categories = proto.map "string" "Category" 4 "Categories for organizing onboarding steps"; steps = proto.map "string" "Step" 5 "Onboarding steps"; - auto_run = proto.bool 6 "Automatically run onboarding on first shell entry"; - persist_state = proto.bool 7 "Persist completed steps across shell sessions"; - state_file = proto.string 8 "Path to store onboarding state"; + auto_run = proto.withExample true (proto.bool 6 "Automatically run onboarding on first shell entry"); + persist_state = proto.withExample true (proto.bool 7 "Persist completed steps across shell sessions"); + state_file = proto.withExample ".stack/state/onboarding.json" (proto.string 8 "Path to store onboarding state"); }; }; @@ -53,10 +53,10 @@ proto.mkProtoFile { name = "Category"; description = "Onboarding category configuration"; fields = { - title = proto.string 1 "Display title for the category"; - description = proto.optional (proto.string 2 "Description of what this category covers"); - order = proto.int32 3 "Order in which this category appears"; - icon = proto.optional (proto.string 4 "Icon for the category (emoji or Nerd Font icon)"); + title = proto.withExample "Local services" (proto.string 1 "Display title for the category"); + description = proto.optional (proto.withExample "Configure databases and background services" (proto.string 2 "Description of what this category covers")); + order = proto.withExample 10 (proto.int32 3 "Order in which this category appears"); + icon = proto.optional (proto.withExample "database" (proto.string 4 "Icon for the category (emoji or Nerd Font icon)")); }; }; @@ -65,23 +65,23 @@ proto.mkProtoFile { name = "Step"; description = "Onboarding step configuration"; fields = { - id = proto.string 1 "Unique identifier for this step"; - title = proto.string 2 "Display title for the step"; - description = proto.optional (proto.string 3 "Detailed description of what this step accomplishes"); + id = proto.withExample "install-deps" (proto.string 1 "Unique identifier for this step"); + title = proto.withExample "Install dependencies" (proto.string 2 "Display title for the step"); + description = proto.optional (proto.withExample "Run `bun install` from the repo root" (proto.string 3 "Detailed description of what this step accomplishes")); type = proto.message "StepType" 4 "Type of onboarding step"; - command = proto.optional (proto.string 5 "Command to run (for 'command' type steps)"); + command = proto.optional (proto.withExample "bun install" (proto.string 5 "Command to run (for 'command' type steps)")); check_command = proto.optional ( - proto.string 6 "Command to verify step completion (exit 0 = complete)" + proto.withExample "test -d node_modules" (proto.string 6 "Command to verify step completion (exit 0 = complete)") ); - url = proto.optional (proto.string 7 "URL to open (for 'link' type steps)"); - required = proto.bool 8 "Whether this step is required"; - order = proto.int32 9 "Order in which this step should be presented"; - category = proto.string 10 "Category/group for organizing steps"; + url = proto.optional (proto.withExample "https://stackpanel.dev/docs/getting-started" (proto.string 7 "URL to open (for 'link' type steps)")); + required = proto.withExample true (proto.bool 8 "Whether this step is required"); + order = proto.withExample 10 (proto.int32 9 "Order in which this step should be presented"); + category = proto.withExample "setup" (proto.string 10 "Category/group for organizing steps"); depends_on = proto.repeated ( - proto.string 11 "List of step IDs that must be completed before this step" + proto.withExample "install-deps" (proto.string 11 "List of step IDs that must be completed before this step") ); - env = proto.repeated (proto.string 12 "Environments where this step applies"); - skip_if = proto.optional (proto.string 13 "Condition command - skip step if exits 0"); + env = proto.repeated (proto.withExample "dev" (proto.string 12 "Environments where this step applies")); + skip_if = proto.optional (proto.withExample "test -f node_modules/.installed" (proto.string 13 "Condition command - skip step if exits 0")); }; }; }; diff --git a/nix/stackpanel/db/schemas/scripts.proto.nix b/nix/stackpanel/db/schemas/scripts.proto.nix index 6f2067cc..35ec7033 100644 --- a/nix/stackpanel/db/schemas/scripts.proto.nix +++ b/nix/stackpanel/db/schemas/scripts.proto.nix @@ -88,10 +88,10 @@ proto.mkProtoFile { is responsible for parsing these arguments. ''; fields = { - name = proto.string 1 "Argument name (e.g., 'file', '--output', '-v')"; - description = proto.optional (proto.string 2 "Human-readable description of the argument"); - required = proto.optional (proto.bool 3 "Whether the argument is required (default: false)"); - default = proto.optional (proto.string 4 "Default value if not provided"); + name = proto.withExample "--dry-run" (proto.string 1 "Argument name (e.g., 'file', '--output', '-v')"); + description = proto.optional (proto.withExample "Preview changes without applying" (proto.string 2 "Human-readable description of the argument")); + required = proto.optional (proto.withExample false (proto.bool 3 "Whether the argument is required (default: false)")); + default = proto.optional (proto.withExample "production" (proto.string 4 "Default value if not provided")); }; }; @@ -110,15 +110,15 @@ proto.mkProtoFile { ''; fields = { # Input options (for defining scripts in Nix) - exec = proto.optional (proto.string 1 "Shell command to execute (mutually exclusive with path)"); - description = proto.optional (proto.string 2 "Human-readable description of the script"); + exec = proto.optional (proto.withExample "bun run dev" (proto.string 1 "Shell command to execute (mutually exclusive with path)")); + description = proto.optional (proto.withExample "Start the API server" (proto.string 2 "Human-readable description of the script")); env = proto.map "string" "string" 3 "Environment variables to set when running the script"; args = proto.repeated (proto.message "ScriptArg" 6 "Documented arguments for this script"); - timeout = proto.optional (proto.int32 7 "Maximum execution time in seconds (0 = no timeout, default: 300)"); + timeout = proto.optional (proto.withExample 300 (proto.int32 7 "Maximum execution time in seconds (0 = no timeout, default: 300)")); # Output options (serialized to agent - agent executes binPath directly) - bin_path = proto.optional (proto.string 4 "Path to script executable in Nix store (computed)"); - source = proto.optional (proto.string 5 "Source type: inline or path (for debugging)"); + bin_path = proto.optional (proto.withExample "/nix/store/abc123-scripts/bin/db-seed" (proto.string 4 "Path to script executable in Nix store (computed)")); + source = proto.optional (proto.withExample "inline" (proto.string 5 "Source type: inline or path (for debugging)")); # Note: path and runtimeInputs are Nix-only (path type, packages), not in proto }; @@ -136,7 +136,7 @@ proto.mkProtoFile { name = "ScriptsConfig"; description = "Configuration for scripts package generation"; fields = { - enable = proto.bool 1 "Whether to add the scripts package to the devshell"; + enable = proto.withExample true (proto.bool 1 "Whether to add the scripts package to the devshell"); }; }; }; diff --git a/nix/stackpanel/db/schemas/secrets.proto.nix b/nix/stackpanel/db/schemas/secrets.proto.nix index 0f31023b..ed46b8a7 100644 --- a/nix/stackpanel/db/schemas/secrets.proto.nix +++ b/nix/stackpanel/db/schemas/secrets.proto.nix @@ -84,14 +84,14 @@ proto.mkProtoFile { description = "Code generation target for secrets/env access"; fields = { name = proto.optional ( - proto.string 1 "Name of the generated package/module (defaults to the target key)" + proto.withExample "env" (proto.string 1 "Name of the generated package/module (defaults to the target key)") ); - directory = proto.optional (proto.string 2 "Output directory for generated code (repo-relative)"); + directory = proto.optional (proto.withExample "packages/gen/env/src" (proto.string 2 "Output directory for generated code (repo-relative)")); language = proto.optional ( - proto.string 3 '' + proto.withExample "typescript" (proto.string 3 '' Target language for generated code (e.g., "typescript", "go", "python"). Informational only for now; codegen selection is based on the target key. - '' + '') ); }; }; @@ -100,18 +100,18 @@ proto.mkProtoFile { name = "Environment"; description = "Environment-specific secrets configuration"; fields = { - name = proto.optional (proto.string 1 "Name of the environment (e.g., dev, staging, production)"); + name = proto.optional (proto.withExample "dev" (proto.string 1 "Name of the environment (e.g., dev, staging, production)")); sources = proto.repeated ( - proto.string 2 '' + proto.withExample "shared" (proto.string 2 '' List of SOPS-encrypted source files for this environment (without .yaml extension). These files are decrypted and merged to provide secrets for the environment. - '' + '') ); public_keys = proto.repeated ( - proto.string 3 '' + proto.withExample "age1abc1234abc1234abc1234abc1234abc1234abc1234abc1234abc1" (proto.string 3 '' AGE public keys that can decrypt secrets for this environment. New secrets for this env are encrypted to these recipients. - '' + '') ); }; }; @@ -151,26 +151,26 @@ proto.mkProtoFile { name = "Secrets"; description = "Secrets management configuration"; fields = { - enable = proto.bool 1 "Enable secrets management"; + enable = proto.withExample true (proto.bool 1 "Enable secrets management"); master_keys = proto.map "string" "MasterKey" 2 '' Master keys for encrypting/decrypting secrets. Each secret specifies which master keys can decrypt it via the master-keys field. A default "local" key is auto-generated if no keys are configured. ''; input_directory = proto.optional ( - proto.string 3 '' + proto.withExample ".stack/secrets" (proto.string 3 '' Directory containing SOPS-encrypted secrets (legacy SOPS layout). Used when decrypting/merging YAML sources defined under environments. - '' + '') ); secrets_dir = proto.optional ( - proto.string 4 "Directory where secret .age files are stored (default: .stack/secrets)" + proto.withExample ".stack/secrets" (proto.string 4 "Directory where secret .age files are stored (default: .stack/secrets)") ); system_keys = proto.repeated ( - proto.string 5 '' + proto.withExample "age1ci1234ci1234ci1234ci1234ci1234ci1234ci1234ci1234ci1" (proto.string 5 '' System-level AGE public keys (CI, deploy servers, etc.). These keys can decrypt all secrets regardless of environment restrictions. - '' + '') ); environments = proto.map "string" "Environment" 6 '' Legacy environment-specific secrets configuration. @@ -190,23 +190,23 @@ proto.mkProtoFile { name = "MasterKey"; description = "A master key for encrypting/decrypting secrets"; fields = { - age_pub = proto.string 1 '' + age_pub = proto.withExample "age1abc1234abc1234abc1234abc1234abc1234abc1234abc1234abc1" (proto.string 1 '' AGE public key for encrypting secrets to this key. Format: age1... (bech32-encoded) - ''; - ref = proto.string 2 '' + ''); + ref = proto.withExample "ref+file://.stack/keys/local.txt" (proto.string 2 '' Vals reference that resolves to the AGE private key. Examples: - ref+file://.stack/keys/local.txt (local file) - ref+awsssm://stackpanel/keys/dev (AWS SSM Parameter Store) - ref+vault://secret/data/stackpanel/prod#key (HashiCorp Vault) - ''; + ''); resolve_cmd = proto.optional ( - proto.string 3 '' + proto.withExample "op read 'op://vault/stackpanel/age-key'" (proto.string 3 '' Custom command to resolve the private key (overrides ref). The command should output the AGE private key to stdout. Example: op read 'op://vault/stackpanel/age-key' - '' + '') ); }; }; diff --git a/nix/stackpanel/db/schemas/services.proto.nix b/nix/stackpanel/db/schemas/services.proto.nix index 06090ba8..6c9a60b8 100644 --- a/nix/stackpanel/db/schemas/services.proto.nix +++ b/nix/stackpanel/db/schemas/services.proto.nix @@ -22,7 +22,7 @@ proto.mkProtoFile { name = "Services"; description = "Global development services configuration"; fields = { - project_name = proto.string 1 "Project name for database/site registration"; + project_name = proto.withExample "stackpanel-demo" (proto.string 1 "Project name for database/site registration"); postgres = proto.message "Postgres" 2 "PostgreSQL service configuration"; redis = proto.message "Redis" 3 "Redis service configuration"; minio = proto.message "Minio" 4 "Minio S3-compatible service configuration"; @@ -35,13 +35,13 @@ proto.mkProtoFile { name = "Postgres"; description = "PostgreSQL service configuration"; fields = { - enable = proto.bool 1 "Enable PostgreSQL service"; - databases = proto.repeated (proto.string 2 "List of databases to create for this project"); + enable = proto.withExample true (proto.bool 1 "Enable PostgreSQL service"); + databases = proto.repeated (proto.withExample "stackpanel" (proto.string 2 "List of databases to create for this project")); port = proto.optional ( - proto.int32 3 "PostgreSQL port. If not set, uses computed port from stackpanel.ports" + proto.withExample 6410 (proto.int32 3 "PostgreSQL port. If not set, uses computed port from stackpanel.ports") ); - version = proto.string 4 "PostgreSQL version (e.g., '15', '16', '17')"; - extensions = proto.repeated (proto.string 5 "PostgreSQL extensions to enable"); + version = proto.withExample "16" (proto.string 4 "PostgreSQL version (e.g., '15', '16', '17')"); + extensions = proto.repeated (proto.withExample "pgvector" (proto.string 5 "PostgreSQL extensions to enable")); }; }; @@ -50,12 +50,12 @@ proto.mkProtoFile { name = "Redis"; description = "Redis service configuration"; fields = { - enable = proto.bool 1 "Enable Redis service"; + enable = proto.withExample true (proto.bool 1 "Enable Redis service"); port = proto.optional ( - proto.int32 2 "Redis port. If not set, uses computed port from stackpanel.ports" + proto.withExample 6411 (proto.int32 2 "Redis port. If not set, uses computed port from stackpanel.ports") ); - maxmemory = proto.string 3 "Maximum memory limit for Redis"; - maxmemory_policy = proto.string 4 "Eviction policy when maxmemory is reached"; + maxmemory = proto.withExample "256mb" (proto.string 3 "Maximum memory limit for Redis"); + maxmemory_policy = proto.withExample "allkeys-lru" (proto.string 4 "Eviction policy when maxmemory is reached"); }; }; @@ -64,14 +64,14 @@ proto.mkProtoFile { name = "Minio"; description = "Minio S3-compatible service configuration"; fields = { - enable = proto.bool 1 "Enable Minio (S3-compatible) service"; + enable = proto.withExample true (proto.bool 1 "Enable Minio (S3-compatible) service"); port = proto.optional ( - proto.int32 2 "Minio API port. If not set, uses computed port from stackpanel.ports" + proto.withExample 6412 (proto.int32 2 "Minio API port. If not set, uses computed port from stackpanel.ports") ); console_port = proto.optional ( - proto.int32 3 "Minio console port. If not set, uses computed port from stackpanel.ports" + proto.withExample 6413 (proto.int32 3 "Minio console port. If not set, uses computed port from stackpanel.ports") ); - buckets = proto.repeated (proto.string 4 "Buckets to create on startup"); + buckets = proto.repeated (proto.withExample "uploads" (proto.string 4 "Buckets to create on startup")); }; }; @@ -80,7 +80,7 @@ proto.mkProtoFile { name = "Caddy"; description = "Caddy reverse proxy configuration"; fields = { - enable = proto.bool 1 "Enable Caddy reverse proxy"; + enable = proto.withExample true (proto.bool 1 "Enable Caddy reverse proxy"); sites = proto.map "string" "CaddySite" 2 "Sites to register with Caddy (domain -> config)"; }; }; @@ -90,8 +90,8 @@ proto.mkProtoFile { name = "CaddySite"; description = "Caddy site configuration"; fields = { - upstream = proto.string 1 "Upstream address (e.g., 'localhost:3000')"; - tls = proto.bool 2 "Enable TLS for this site"; + upstream = proto.withExample "localhost:6402" (proto.string 1 "Upstream address (e.g., 'localhost:3000')"); + tls = proto.withExample false (proto.bool 2 "Enable TLS for this site"); }; }; }; diff --git a/nix/stackpanel/db/schemas/shells.proto.nix b/nix/stackpanel/db/schemas/shells.proto.nix index 7c504295..12f560df 100644 --- a/nix/stackpanel/db/schemas/shells.proto.nix +++ b/nix/stackpanel/db/schemas/shells.proto.nix @@ -42,8 +42,8 @@ proto.mkProtoFile { zsh = proto.message "Profile" 4 "Zsh-specific settings"; fish = proto.message "Profile" 5 "Fish-specific settings"; hooks = proto.repeated (proto.message "Hook" 6 "Shell hooks to run on initialization"); - path_prepend = proto.repeated (proto.string 7 "Directories to prepend to PATH"); - path_append = proto.repeated (proto.string 8 "Directories to append to PATH"); + path_prepend = proto.repeated (proto.withExample "$PROJECT_ROOT/bin" (proto.string 7 "Directories to prepend to PATH")); + path_append = proto.repeated (proto.withExample "$PROJECT_ROOT/.stack/state/bin" (proto.string 8 "Directories to append to PATH")); }; }; @@ -54,9 +54,9 @@ proto.mkProtoFile { fields = { env = proto.map "string" "EnvVar" 1 "Environment variables"; aliases = proto.map "string" "Alias" 2 "Shell aliases"; - init_extra = proto.optional (proto.string 3 "Extra shell initialization script"); - history_size = proto.int32 4 "Number of history entries to keep"; - history_ignore = proto.repeated (proto.string 5 "Patterns to ignore in history"); + init_extra = proto.optional (proto.withExample "source $PROJECT_ROOT/.stack/state/shellhook.sh" (proto.string 3 "Extra shell initialization script")); + history_size = proto.withExample 10000 (proto.int32 4 "Number of history entries to keep"); + history_ignore = proto.repeated (proto.withExample "ls" (proto.string 5 "Patterns to ignore in history")); }; }; @@ -65,9 +65,9 @@ proto.mkProtoFile { name = "EnvVar"; description = "Environment variable configuration"; fields = { - value = proto.string 1 "Environment variable value"; - secret = proto.bool 2 "Whether this value should be treated as a secret"; - description = proto.optional (proto.string 3 "Description of what this variable is for"); + value = proto.withExample "development" (proto.string 1 "Environment variable value"); + secret = proto.withExample false (proto.bool 2 "Whether this value should be treated as a secret"); + description = proto.optional (proto.withExample "Set by stackpanel for the local devshell" (proto.string 3 "Description of what this variable is for")); }; }; @@ -76,8 +76,8 @@ proto.mkProtoFile { name = "Alias"; description = "Shell alias configuration"; fields = { - command = proto.string 1 "Command to alias to"; - description = proto.optional (proto.string 2 "Description of the alias"); + command = proto.withExample "git status" (proto.string 1 "Command to alias to"); + description = proto.optional (proto.withExample "Show working tree status" (proto.string 2 "Description of the alias")); }; }; @@ -86,10 +86,10 @@ proto.mkProtoFile { name = "Hook"; description = "Shell hook configuration"; fields = { - name = proto.string 1 "Hook name/identifier"; - script = proto.string 2 "Shell script to execute"; - order = proto.int32 3 "Execution order (lower runs first)"; - enabled = proto.bool 4 "Whether this hook is enabled"; + name = proto.withExample "stackpanel-init" (proto.string 1 "Hook name/identifier"); + script = proto.withExample "stack init --config $STACKPANEL_CONFIG_JSON" (proto.string 2 "Shell script to execute"); + order = proto.withExample 100 (proto.int32 3 "Execution order (lower runs first)"); + enabled = proto.withExample true (proto.bool 4 "Whether this hook is enabled"); }; }; }; diff --git a/nix/stackpanel/db/schemas/sst.proto.nix b/nix/stackpanel/db/schemas/sst.proto.nix index 8318183f..d3b889bc 100644 --- a/nix/stackpanel/db/schemas/sst.proto.nix +++ b/nix/stackpanel/db/schemas/sst.proto.nix @@ -52,11 +52,11 @@ proto.mkProtoFile { name = "Sst"; description = "SST infrastructure configuration for AWS provisioning"; fields = { - enable = proto.bool 1 "Enable SST infrastructure provisioning"; - project_name = proto.string 2 "SST project name"; - region = proto.string 3 "AWS region"; - account_id = proto.string 4 "AWS account ID"; - config_path = proto.string 5 "Path to generate sst.config.ts"; + enable = proto.withExample true (proto.bool 1 "Enable SST infrastructure provisioning"); + project_name = proto.withExample "stackpanel" (proto.string 2 "SST project name"); + region = proto.withExample "us-west-2" (proto.string 3 "AWS region"); + account_id = proto.withExample "123456789012" (proto.string 4 "AWS account ID"); + config_path = proto.withExample "packages/infra/sst.config.ts" (proto.string 5 "Path to generate sst.config.ts"); kms = proto.message "SstKms" 6 "KMS configuration"; oidc = proto.message "SstOidc" 7 "OIDC provider configuration"; iam = proto.message "SstIam" 8 "IAM configuration"; @@ -68,9 +68,9 @@ proto.mkProtoFile { name = "SstKms"; description = "KMS key configuration for secrets encryption"; fields = { - enable = proto.bool 1 "Create a KMS key for secrets"; - alias = proto.string 2 "KMS key alias"; - deletion_window_days = proto.int32 3 "Days before key deletion"; + enable = proto.withExample true (proto.bool 1 "Create a KMS key for secrets"); + alias = proto.withExample "stackpanel-secrets" (proto.string 2 "KMS key alias"); + deletion_window_days = proto.withExample 30 (proto.int32 3 "Days before key deletion"); }; }; @@ -79,7 +79,7 @@ proto.mkProtoFile { name = "SstOidc"; description = "OIDC provider configuration for IAM role assumption"; fields = { - provider = proto.string 1 "OIDC provider type (github-actions, flyio, roles-anywhere)"; + provider = proto.withExample "github-actions" (proto.string 1 "OIDC provider type (github-actions, flyio, roles-anywhere)"); github_actions = proto.message "SstGithubActions" 2 "GitHub Actions OIDC settings"; flyio = proto.message "SstFlyio" 3 "Fly.io OIDC settings"; roles_anywhere = proto.message "SstRolesAnywhere" 4 "Roles Anywhere settings"; @@ -91,8 +91,8 @@ proto.mkProtoFile { name = "SstGithubActions"; description = "GitHub Actions OIDC configuration"; fields = { - org = proto.string 1 "GitHub organization"; - repo = proto.string 2 "GitHub repository (or * for all)"; + org = proto.withExample "darkmatter" (proto.string 1 "GitHub organization"); + repo = proto.withExample "stackpanel" (proto.string 2 "GitHub repository (or * for all)"); }; }; @@ -101,8 +101,8 @@ proto.mkProtoFile { name = "SstFlyio"; description = "Fly.io OIDC configuration"; fields = { - org_id = proto.string 1 "Fly.io organization ID"; - app_name = proto.string 2 "Fly.io app name (or * for all)"; + org_id = proto.withExample "darkmatter-io" (proto.string 1 "Fly.io organization ID"); + app_name = proto.withExample "*" (proto.string 2 "Fly.io app name (or * for all)"); }; }; @@ -111,7 +111,7 @@ proto.mkProtoFile { name = "SstRolesAnywhere"; description = "AWS Roles Anywhere configuration"; fields = { - trust_anchor_arn = proto.string 1 "Trust anchor ARN"; + trust_anchor_arn = proto.withExample "arn:aws:rolesanywhere:us-west-2:123456789012:trust-anchor/abcd1234" (proto.string 1 "Trust anchor ARN"); }; }; @@ -120,7 +120,7 @@ proto.mkProtoFile { name = "SstIam"; description = "IAM role configuration"; fields = { - role_name = proto.string 1 "IAM role name"; + role_name = proto.withExample "stackpanel-secrets-role" (proto.string 1 "IAM role name"); }; }; }; diff --git a/nix/stackpanel/db/schemas/step-ca.proto.nix b/nix/stackpanel/db/schemas/step-ca.proto.nix index f3ae820f..6df4161d 100644 --- a/nix/stackpanel/db/schemas/step-ca.proto.nix +++ b/nix/stackpanel/db/schemas/step-ca.proto.nix @@ -47,12 +47,12 @@ proto.mkProtoFile { name = "StepCaConfig"; description = "Step CA certificate management configuration"; fields = { - enable = proto.bool 1 "Enable Step CA certificate management"; - ca_url = proto.string 2 "Step CA server URL (e.g., https://ca.internal:443)"; - ca_fingerprint = proto.string 3 "Step CA root certificate fingerprint for verification"; - provisioner = proto.string 4 "Step CA provisioner name"; - cert_name = proto.string 5 "Common name for the device certificate"; - prompt_on_shell = proto.bool 6 "Prompt for certificate setup on shell entry if not configured"; + enable = proto.withExample true (proto.bool 1 "Enable Step CA certificate management"); + ca_url = proto.withExample "https://ca.internal:443" (proto.string 2 "Step CA server URL (e.g., https://ca.internal:443)"); + ca_fingerprint = proto.withExample "abc123def456abc123def456abc123def456abc123def456abc123def456" (proto.string 3 "Step CA root certificate fingerprint for verification"); + provisioner = proto.withExample "admin" (proto.string 4 "Step CA provisioner name"); + cert_name = proto.withExample "dev-workstation" (proto.string 5 "Common name for the device certificate"); + prompt_on_shell = proto.withExample true (proto.bool 6 "Prompt for certificate setup on shell entry if not configured"); }; }; }; diff --git a/nix/stackpanel/db/schemas/tasks.proto.nix b/nix/stackpanel/db/schemas/tasks.proto.nix index 96d9c8d1..fc95b037 100644 --- a/nix/stackpanel/db/schemas/tasks.proto.nix +++ b/nix/stackpanel/db/schemas/tasks.proto.nix @@ -62,18 +62,18 @@ proto.mkProtoFile { ''; fields = { # Script definition (stackpanel-specific) - exec = proto.optional (proto.string 1 "Shell script to execute (compiled to Nix derivation)"); - description = proto.optional (proto.string 2 "Human-readable description of the task"); - cwd = proto.optional (proto.string 3 "Working directory for the task (relative to repo root)"); + exec = proto.optional (proto.withExample "bun run build" (proto.string 1 "Shell script to execute (compiled to Nix derivation)")); + description = proto.optional (proto.withExample "Build all packages" (proto.string 2 "Human-readable description of the task")); + cwd = proto.optional (proto.withExample "apps/web" (proto.string 3 "Working directory for the task (relative to repo root)")); env = proto.map "string" "string" 4 "Environment variables for the task"; # Turborepo configuration (mirrors turbo.json schema) - depends_on = proto.repeated (proto.string 5 "Tasks that must complete first (use ^ for deps)"); - outputs = proto.repeated (proto.string 6 "Output file globs for caching (e.g. dist/**)"); - inputs = proto.repeated (proto.string 7 "Input file globs for cache key (e.g. $TURBO_DEFAULT$)"); - persistent = proto.optional (proto.bool 8 "Long-running process (e.g. dev server)"); - cache = proto.optional (proto.bool 9 "Enable Turborepo caching (default: true)"); - interactive = proto.optional (proto.bool 10 "Task accepts stdin input"); + depends_on = proto.repeated (proto.withExample "^build" (proto.string 5 "Tasks that must complete first (use ^ for deps)")); + outputs = proto.repeated (proto.withExample "dist/**" (proto.string 6 "Output file globs for caching (e.g. dist/**)")); + inputs = proto.repeated (proto.withExample "$TURBO_DEFAULT$" (proto.string 7 "Input file globs for cache key (e.g. $TURBO_DEFAULT$)")); + persistent = proto.optional (proto.withExample false (proto.bool 8 "Long-running process (e.g. dev server)")); + cache = proto.optional (proto.withExample true (proto.bool 9 "Enable Turborepo caching (default: true)")); + interactive = proto.optional (proto.withExample false (proto.bool 10 "Task accepts stdin input")); }; }; diff --git a/nix/stackpanel/db/schemas/variables.proto.nix b/nix/stackpanel/db/schemas/variables.proto.nix index 194e9ba2..c07130ab 100644 --- a/nix/stackpanel/db/schemas/variables.proto.nix +++ b/nix/stackpanel/db/schemas/variables.proto.nix @@ -36,26 +36,26 @@ proto.mkProtoFile { name = "Variable"; description = "A workspace variable (secret, literal, or vals reference)"; fields = { - id = proto.optional (proto.string 1 '' + id = proto.optional (proto.withExample "/dev/DATABASE_URL" (proto.string 1 '' Path-based identifier. Format: // - + Examples: /dev/DATABASE_URL → Secret in dev.yaml /prod/API_KEY → Secret in prod.yaml /computed/apps/web/port → Computed by Nix module - ''); - value = proto.string 2 '' + '')); + value = proto.withExample "ref+sops://.stack/secrets/dev.yaml#/DATABASE_URL" (proto.string 2 '' The value - either a literal string or a vals reference. - + Literals: "postgresql://localhost:5432/dev" "3000" - + Vals references: "ref+sops://.stack/secrets/dev.yaml#/DATABASE_URL" "ref+awsssm://prod/api-key" "ref+exec://echo $RANDOM" - ''; + ''); }; }; diff --git a/packages/proto/gen/gopb/app_build.pb.go b/packages/proto/gen/gopb/app_build.pb.go index 3f8eafe0..6e500d17 100644 --- a/packages/proto/gen/gopb/app_build.pb.go +++ b/packages/proto/gen/gopb/app_build.pb.go @@ -27,7 +27,7 @@ type AppBuildConfig struct { Enable bool `protobuf:"varint,1,opt,name=enable,proto3" json:"enable,omitempty"` // Enable Nix packaging for this app SrcRoot *string `protobuf:"bytes,2,opt,name=src_root,json=srcRoot,proto3,oneof" json:"src_root,omitempty"` // Source root relative to repo SrcLayout *string `protobuf:"bytes,3,opt,name=src_layout,json=srcLayout,proto3,oneof" json:"src_layout,omitempty"` // Source layout (workspace or standalone, null for auto-detect) - SrcInclude []string `protobuf:"bytes,4,rep,name=src_include,json=srcInclude,proto3" json:"src_include,omitempty"` // Glob patterns for source filter + SrcInclude []string `protobuf:"bytes,4,rep,name=src_include,json=srcInclude,proto3" json:"src_include,omitempty"` // Glob patterns for source filter (example: ["src/**", "package.json"]) DepsLockfile *string `protobuf:"bytes,5,opt,name=deps_lockfile,json=depsLockfile,proto3,oneof" json:"deps_lockfile,omitempty"` // Lockfile path relative to repo OutputName *string `protobuf:"bytes,6,opt,name=output_name,json=outputName,proto3,oneof" json:"output_name,omitempty"` // Override output package name OutputVersion string `protobuf:"bytes,7,opt,name=output_version,json=outputVersion,proto3" json:"output_version,omitempty"` // Package version diff --git a/packages/proto/gen/gopb/apps.pb.go b/packages/proto/gen/gopb/apps.pb.go index 33b01fa5..90bdb4ce 100644 --- a/packages/proto/gen/gopb/apps.pb.go +++ b/packages/proto/gen/gopb/apps.pb.go @@ -24,18 +24,20 @@ const ( // Configuration for a single application in the workspace type App struct { state protoimpl.MessageState `protogen:"open.v1"` - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Display name of the app - Description *string `protobuf:"bytes,2,opt,name=description,proto3,oneof" json:"description,omitempty"` // Description of the app - Path string `protobuf:"bytes,3,opt,name=path,proto3" json:"path,omitempty"` // Relative path to the app directory - Type *string `protobuf:"bytes,4,opt,name=type,proto3,oneof" json:"type,omitempty"` // App type/runtime (bun, go, python, rust, etc.) - Port *int32 `protobuf:"varint,5,opt,name=port,proto3,oneof" json:"port,omitempty"` // Development server port - Domain *string `protobuf:"bytes,6,opt,name=domain,proto3,oneof" json:"domain,omitempty"` // Local development domain + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Display name of the app (example: "Web App") + Description *string `protobuf:"bytes,2,opt,name=description,proto3,oneof" json:"description,omitempty"` // Description of the app (example: "Frontend web application") + Path string `protobuf:"bytes,3,opt,name=path,proto3" json:"path,omitempty"` // Relative path to the app directory (example: "apps/web") + Type *string `protobuf:"bytes,4,opt,name=type,proto3,oneof" json:"type,omitempty"` // App type/runtime (bun, go, python, rust, etc.) (example: "bun") + Port *int32 `protobuf:"varint,5,opt,name=port,proto3,oneof" json:"port,omitempty"` // Development server port (example: 3000) + Domain *string `protobuf:"bytes,6,opt,name=domain,proto3,oneof" json:"domain,omitempty"` // Local development domain (example: "web.localhost") // deprecated: use env instead // Environment configurations (key = environment name like "dev", "prod"). Environments map[string]*AppEnvironment `protobuf:"bytes,7,rep,name=environments,proto3" json:"environments,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` Deploy *AppDeploy `protobuf:"bytes,8,opt,name=deploy,proto3" json:"deploy,omitempty"` // Colmena deployment mapping for this app Env map[string]*EnvironmentVariable `protobuf:"bytes,9,rep,name=env,proto3" json:"env,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // Environment variables for this app // Environment IDs for this app. Defaults to "dev", "prod", "staging", "test". + // + // (example: "dev") EnvironmentIds []string `protobuf:"bytes,10,rep,name=environmentIds,proto3" json:"environmentIds,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -144,12 +146,12 @@ func (x *App) GetEnvironmentIds() []string { // Deployment mapping for Colmena (targets, roles, and modules) type AppDeploy struct { state protoimpl.MessageState `protogen:"open.v1"` - Enable bool `protobuf:"varint,1,opt,name=enable,proto3" json:"enable,omitempty"` // Enable deployment mapping for this app - Targets []string `protobuf:"bytes,2,rep,name=targets,proto3" json:"targets,omitempty"` // Target machine ids or tag selectors - Role *string `protobuf:"bytes,3,opt,name=role,proto3,oneof" json:"role,omitempty"` // Deployment role label for this app - NixosModules []string `protobuf:"bytes,4,rep,name=nixos_modules,json=nixosModules,proto3" json:"nixos_modules,omitempty"` // Extra NixOS modules to import for this app - System *string `protobuf:"bytes,5,opt,name=system,proto3,oneof" json:"system,omitempty"` // Target system/architecture (e.g., x86_64-linux) - Secrets []string `protobuf:"bytes,6,rep,name=secrets,proto3" json:"secrets,omitempty"` // Secret references required by this app during deploy + Enable bool `protobuf:"varint,1,opt,name=enable,proto3" json:"enable,omitempty"` // Enable deployment mapping for this app (example: true) + Targets []string `protobuf:"bytes,2,rep,name=targets,proto3" json:"targets,omitempty"` // Target machine ids or tag selectors (example: "prod-web-01") + Role *string `protobuf:"bytes,3,opt,name=role,proto3,oneof" json:"role,omitempty"` // Deployment role label for this app (example: "web") + NixosModules []string `protobuf:"bytes,4,rep,name=nixos_modules,json=nixosModules,proto3" json:"nixos_modules,omitempty"` // Extra NixOS modules to import for this app (example: "./modules/nginx.nix") + System *string `protobuf:"bytes,5,opt,name=system,proto3,oneof" json:"system,omitempty"` // Target system/architecture (e.g., x86_64-linux) (example: "x86_64-linux") + Secrets []string `protobuf:"bytes,6,rep,name=secrets,proto3" json:"secrets,omitempty"` // Secret references required by this app during deploy (example: "DATABASE_URL") unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -229,16 +231,18 @@ func (x *AppDeploy) GetSecrets() []string { // Environment configuration (e.g., dev, staging, production) type AppEnvironment struct { state protoimpl.MessageState `protogen:"open.v1"` - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Name of the environment - Description *string `protobuf:"bytes,2,opt,name=description,proto3,oneof" json:"description,omitempty"` // (optional) Description of the environment + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Name of the environment (example: "dev") + Description *string `protobuf:"bytes,2,opt,name=description,proto3,oneof" json:"description,omitempty"` // (optional) Description of the environment (example: "Local development environment") // Environment variables for this environment. // Key: Environment variable name (e.g., DATABASE_URL) // Value: Literal string or vals reference (e.g., ref+sops://...) Env map[string]string `protobuf:"bytes,3,rep,name=env,proto3" json:"env,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` - Extends []string `protobuf:"bytes,4,rep,name=extends,proto3" json:"extends,omitempty"` // Inherit these environments - useful for sharing environment variables between environments. + Extends []string `protobuf:"bytes,4,rep,name=extends,proto3" json:"extends,omitempty"` // Inherit these environments - useful for sharing environment variables between environments. (example: "common") // Env var names in this environment that contain sensitive values. // Used to auto-derive deployment.secrets — these are wrapped with // alchemy.secret() at deploy time. + // + // (example: "DATABASE_URL") Secrets []string `protobuf:"bytes,5,rep,name=secrets,proto3" json:"secrets,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -356,13 +360,20 @@ func (x *Apps) GetApps() map[string]*App { // Environment variable for this app type EnvironmentVariable struct { - state protoimpl.MessageState `protogen:"open.v1"` - Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` // ID of the environment variable - defaults to key used in the attribute path. KEY will be read from $KEY in the environment - Required bool `protobuf:"varint,2,opt,name=required,proto3" json:"required,omitempty"` // Whether the environment variable is required - Secret bool `protobuf:"varint,3,opt,name=secret,proto3" json:"secret,omitempty"` // Whether the environment variable is sensitive - Value *string `protobuf:"bytes,4,opt,name=value,proto3,oneof" json:"value,omitempty"` // Value of the environment variable - Sops *string `protobuf:"bytes,5,opt,name=sops,proto3,oneof" json:"sops,omitempty"` // Path to the SOPS file for this variable's group - DefaultValue *string `protobuf:"bytes,6,opt,name=defaultValue,proto3,oneof" json:"defaultValue,omitempty"` // Default value of the environment variable + state protoimpl.MessageState `protogen:"open.v1"` + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` // ID of the environment variable - defaults to key used in the attribute path. KEY will be read from $KEY in the environment (example: "DATABASE_URL") + Required bool `protobuf:"varint,2,opt,name=required,proto3" json:"required,omitempty"` // Whether the environment variable is required (example: true) + Secret bool `protobuf:"varint,3,opt,name=secret,proto3" json:"secret,omitempty"` // Whether the environment variable is sensitive (example: false) + Value *string `protobuf:"bytes,4,opt,name=value,proto3,oneof" json:"value,omitempty"` // Value of the environment variable (example: "postgres://localhost:5432/app") + Sops *string `protobuf:"bytes,5,opt,name=sops,proto3,oneof" json:"sops,omitempty"` // Path to the SOPS file for this variable's group (example: ".stack/secrets/dev.yaml") + DefaultValue *string `protobuf:"bytes,6,opt,name=defaultValue,proto3,oneof" json:"defaultValue,omitempty"` // Default value of the environment variable (example: "postgres://localhost:5432/app") + // Human-readable description of what this variable is for and where to + // obtain it. Surfaced in the studio Variables UI and in the actionable + // error message thrown by `loadAppEnv(..., { validate: true })` when + // the variable is missing. + // + // (example: "Postgres connection string used by the API server") + Description *string `protobuf:"bytes,7,opt,name=description,proto3,oneof" json:"description,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -439,6 +450,13 @@ func (x *EnvironmentVariable) GetDefaultValue() string { return "" } +func (x *EnvironmentVariable) GetDescription() string { + if x != nil && x.Description != nil { + return *x.Description + } + return "" +} + var File_apps_proto protoreflect.FileDescriptor const file_apps_proto_rawDesc = "" + @@ -490,17 +508,19 @@ const file_apps_proto_rawDesc = "" + "\x04apps\x18\x01 \x03(\v2\x1d.stackpanel.db.Apps.AppsEntryR\x04apps\x1aK\n" + "\tAppsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12(\n" + - "\x05value\x18\x02 \x01(\v2\x12.stackpanel.db.AppR\x05value:\x028\x01\"\xdc\x01\n" + + "\x05value\x18\x02 \x01(\v2\x12.stackpanel.db.AppR\x05value:\x028\x01\"\x93\x02\n" + "\x13EnvironmentVariable\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x1a\n" + "\brequired\x18\x02 \x01(\bR\brequired\x12\x16\n" + "\x06secret\x18\x03 \x01(\bR\x06secret\x12\x19\n" + "\x05value\x18\x04 \x01(\tH\x00R\x05value\x88\x01\x01\x12\x17\n" + "\x04sops\x18\x05 \x01(\tH\x01R\x04sops\x88\x01\x01\x12'\n" + - "\fdefaultValue\x18\x06 \x01(\tH\x02R\fdefaultValue\x88\x01\x01B\b\n" + + "\fdefaultValue\x18\x06 \x01(\tH\x02R\fdefaultValue\x88\x01\x01\x12%\n" + + "\vdescription\x18\a \x01(\tH\x03R\vdescription\x88\x01\x01B\b\n" + "\x06_valueB\a\n" + "\x05_sopsB\x0f\n" + - "\r_defaultValueB:Z8github.com/darkmatter/stackpanel/packages/proto/gen/gopbb\x06proto3" + "\r_defaultValueB\x0e\n" + + "\f_descriptionB:Z8github.com/darkmatter/stackpanel/packages/proto/gen/gopbb\x06proto3" var ( file_apps_proto_rawDescOnce sync.Once diff --git a/packages/proto/gen/gopb/aws.pb.go b/packages/proto/gen/gopb/aws.pb.go index 48edfe7e..ec767755 100644 --- a/packages/proto/gen/gopb/aws.pb.go +++ b/packages/proto/gen/gopb/aws.pb.go @@ -25,8 +25,8 @@ const ( type Aws struct { state protoimpl.MessageState `protogen:"open.v1"` RolesAnywhere *RolesAnywhere `protobuf:"bytes,1,opt,name=roles_anywhere,json=rolesAnywhere,proto3" json:"roles_anywhere,omitempty"` // AWS Roles Anywhere configuration - DefaultProfile string `protobuf:"bytes,2,opt,name=default_profile,json=defaultProfile,proto3" json:"default_profile,omitempty"` // AWS profile name to use as default (default: 'default') - ExtraConfig string `protobuf:"bytes,3,opt,name=extra_config,json=extraConfig,proto3" json:"extra_config,omitempty"` // Additional AWS config to append (raw INI format) + DefaultProfile string `protobuf:"bytes,2,opt,name=default_profile,json=defaultProfile,proto3" json:"default_profile,omitempty"` // AWS profile name to use as default (default: 'default') (example: "default") + ExtraConfig string `protobuf:"bytes,3,opt,name=extra_config,json=extraConfig,proto3" json:"extra_config,omitempty"` // Additional AWS config to append (raw INI format) (example: "[profile dev]\nregion = us-east-1") unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -85,14 +85,14 @@ func (x *Aws) GetExtraConfig() string { // AWS Roles Anywhere configuration for certificate-based authentication type RolesAnywhere struct { state protoimpl.MessageState `protogen:"open.v1"` - Enable bool `protobuf:"varint,1,opt,name=enable,proto3" json:"enable,omitempty"` // Enable AWS Roles Anywhere cert auth - Region string `protobuf:"bytes,2,opt,name=region,proto3" json:"region,omitempty"` // AWS region - AccountId string `protobuf:"bytes,3,opt,name=account_id,json=accountId,proto3" json:"account_id,omitempty"` // AWS account ID - RoleName string `protobuf:"bytes,4,opt,name=role_name,json=roleName,proto3" json:"role_name,omitempty"` // IAM role name to assume - TrustAnchorArn string `protobuf:"bytes,5,opt,name=trust_anchor_arn,json=trustAnchorArn,proto3" json:"trust_anchor_arn,omitempty"` // AWS Roles Anywhere trust anchor ARN - ProfileArn string `protobuf:"bytes,6,opt,name=profile_arn,json=profileArn,proto3" json:"profile_arn,omitempty"` // AWS Roles Anywhere profile ARN - CacheBufferSeconds string `protobuf:"bytes,7,opt,name=cache_buffer_seconds,json=cacheBufferSeconds,proto3" json:"cache_buffer_seconds,omitempty"` // Seconds before expiry to refresh cached credentials - PromptOnShell bool `protobuf:"varint,8,opt,name=prompt_on_shell,json=promptOnShell,proto3" json:"prompt_on_shell,omitempty"` // Prompt for AWS cert-auth setup on shell entry if not configured + Enable bool `protobuf:"varint,1,opt,name=enable,proto3" json:"enable,omitempty"` // Enable AWS Roles Anywhere cert auth (example: true) + Region string `protobuf:"bytes,2,opt,name=region,proto3" json:"region,omitempty"` // AWS region (example: "us-east-1") + AccountId string `protobuf:"bytes,3,opt,name=account_id,json=accountId,proto3" json:"account_id,omitempty"` // AWS account ID (example: "123456789012") + RoleName string `protobuf:"bytes,4,opt,name=role_name,json=roleName,proto3" json:"role_name,omitempty"` // IAM role name to assume (example: "DeveloperRole") + TrustAnchorArn string `protobuf:"bytes,5,opt,name=trust_anchor_arn,json=trustAnchorArn,proto3" json:"trust_anchor_arn,omitempty"` // AWS Roles Anywhere trust anchor ARN (example: "arn:aws:rolesanywhere:us-east-1:123456789012:trust-anchor/abcd1234") + ProfileArn string `protobuf:"bytes,6,opt,name=profile_arn,json=profileArn,proto3" json:"profile_arn,omitempty"` // AWS Roles Anywhere profile ARN (example: "arn:aws:rolesanywhere:us-east-1:123456789012:profile/efgh5678") + CacheBufferSeconds string `protobuf:"bytes,7,opt,name=cache_buffer_seconds,json=cacheBufferSeconds,proto3" json:"cache_buffer_seconds,omitempty"` // Seconds before expiry to refresh cached credentials (example: "300") + PromptOnShell bool `protobuf:"varint,8,opt,name=prompt_on_shell,json=promptOnShell,proto3" json:"prompt_on_shell,omitempty"` // Prompt for AWS cert-auth setup on shell entry if not configured (example: true) unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } diff --git a/packages/proto/gen/gopb/bun_app.pb.go b/packages/proto/gen/gopb/bun_app.pb.go index fd65722d..34246503 100644 --- a/packages/proto/gen/gopb/bun_app.pb.go +++ b/packages/proto/gen/gopb/bun_app.pb.go @@ -25,16 +25,16 @@ const ( type BunAppConfig struct { state protoimpl.MessageState `protogen:"open.v1"` Enable bool `protobuf:"varint,1,opt,name=enable,proto3" json:"enable,omitempty"` // Enable Bun app support for this app - MainPackage string `protobuf:"bytes,2,opt,name=main_package,json=mainPackage,proto3" json:"main_package,omitempty"` // Main entry point for bun run + MainPackage string `protobuf:"bytes,2,opt,name=main_package,json=mainPackage,proto3" json:"main_package,omitempty"` // Main entry point for bun run (example: "src/index.ts") Version string `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"` // App version - BinaryName *string `protobuf:"bytes,4,opt,name=binary_name,json=binaryName,proto3,oneof" json:"binary_name,omitempty"` // Binary name (if different from app name) + BinaryName *string `protobuf:"bytes,4,opt,name=binary_name,json=binaryName,proto3,oneof" json:"binary_name,omitempty"` // Binary name (if different from app name) (example: "my-app") BuildPhase string `protobuf:"bytes,5,opt,name=build_phase,json=buildPhase,proto3" json:"build_phase,omitempty"` // Build phase command StartScript string `protobuf:"bytes,6,opt,name=start_script,json=startScript,proto3" json:"start_script,omitempty"` // Start script for runtime - RuntimeEnv map[string]string `protobuf:"bytes,7,rep,name=runtime_env,json=runtimeEnv,proto3" json:"runtime_env,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // Runtime environment variables + RuntimeEnv map[string]string `protobuf:"bytes,7,rep,name=runtime_env,json=runtimeEnv,proto3" json:"runtime_env,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // Runtime environment variables (example: {"NODE_ENV":"production"}) InheritPath bool `protobuf:"varint,8,opt,name=inherit_path,json=inheritPath,proto3" json:"inherit_path,omitempty"` // Whether to inherit PATH from environment at runtime GenerateFiles bool `protobuf:"varint,9,opt,name=generate_files,json=generateFiles,proto3" json:"generate_files,omitempty"` // Generate package.json with bun2nix postinstall and standard scripts Description string `protobuf:"bytes,10,opt,name=description,proto3" json:"description,omitempty"` // App description - OutputDir string `protobuf:"bytes,11,opt,name=output_dir,json=outputDir,proto3" json:"output_dir,omitempty"` // Build output directory copied into the packaged artifact + OutputDir string `protobuf:"bytes,11,opt,name=output_dir,json=outputDir,proto3" json:"output_dir,omitempty"` // Build output directory copied into the packaged artifact (example: "dist") unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } diff --git a/packages/proto/gen/gopb/config.pb.go b/packages/proto/gen/gopb/config.pb.go index f17d7a1f..2c315589 100644 --- a/packages/proto/gen/gopb/config.pb.go +++ b/packages/proto/gen/gopb/config.pb.go @@ -24,10 +24,10 @@ const ( // Stackpanel project configuration type Config struct { state protoimpl.MessageState `protogen:"open.v1"` - Enable bool `protobuf:"varint,1,opt,name=enable,proto3" json:"enable,omitempty"` // Enable stackpanel for this project - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` // Project name - Github string `protobuf:"bytes,3,opt,name=github,proto3" json:"github,omitempty"` // GitHub repository (owner/repo format) - Debug bool `protobuf:"varint,4,opt,name=debug,proto3" json:"debug,omitempty"` // Enable debug output + Enable bool `protobuf:"varint,1,opt,name=enable,proto3" json:"enable,omitempty"` // Enable stackpanel for this project (example: true) + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` // Project name (example: "stackpanel-demo") + Github string `protobuf:"bytes,3,opt,name=github,proto3" json:"github,omitempty"` // GitHub repository (owner/repo format) (example: "darkmatter/stackpanel") + Debug bool `protobuf:"varint,4,opt,name=debug,proto3" json:"debug,omitempty"` // Enable debug output (example: false) unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } diff --git a/packages/proto/gen/gopb/databases.pb.go b/packages/proto/gen/gopb/databases.pb.go index 2b5e934e..c6f8c0af 100644 --- a/packages/proto/gen/gopb/databases.pb.go +++ b/packages/proto/gen/gopb/databases.pb.go @@ -142,12 +142,12 @@ func (SSLMode) EnumDescriptor() ([]byte, []int) { // Database connection settings type Connection struct { state protoimpl.MessageState `protogen:"open.v1"` - Host string `protobuf:"bytes,1,opt,name=host,proto3" json:"host,omitempty"` // Database host - Port int32 `protobuf:"varint,2,opt,name=port,proto3" json:"port,omitempty"` // Database port - Database string `protobuf:"bytes,3,opt,name=database,proto3" json:"database,omitempty"` // Database name - Username string `protobuf:"bytes,4,opt,name=username,proto3" json:"username,omitempty"` // Database username - PasswordEnv *string `protobuf:"bytes,5,opt,name=password_env,json=passwordEnv,proto3,oneof" json:"password_env,omitempty"` // Environment variable containing the password - Ssl bool `protobuf:"varint,6,opt,name=ssl,proto3" json:"ssl,omitempty"` // Enable SSL/TLS connection + Host string `protobuf:"bytes,1,opt,name=host,proto3" json:"host,omitempty"` // Database host (example: "localhost") + Port int32 `protobuf:"varint,2,opt,name=port,proto3" json:"port,omitempty"` // Database port (example: 5432) + Database string `protobuf:"bytes,3,opt,name=database,proto3" json:"database,omitempty"` // Database name (example: "stackpanel") + Username string `protobuf:"bytes,4,opt,name=username,proto3" json:"username,omitempty"` // Database username (example: "postgres") + PasswordEnv *string `protobuf:"bytes,5,opt,name=password_env,json=passwordEnv,proto3,oneof" json:"password_env,omitempty"` // Environment variable containing the password (example: "DATABASE_PASSWORD") + Ssl bool `protobuf:"varint,6,opt,name=ssl,proto3" json:"ssl,omitempty"` // Enable SSL/TLS connection (example: false) SslMode SSLMode `protobuf:"varint,7,opt,name=ssl_mode,json=sslMode,proto3,enum=stackpanel.db.SSLMode" json:"ssl_mode,omitempty"` // SSL mode for PostgreSQL connections unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -238,9 +238,9 @@ type DatabaseInstance struct { Type DatabaseType `protobuf:"varint,1,opt,name=type,proto3,enum=stackpanel.db.DatabaseType" json:"type,omitempty"` // Database type Connection *Connection `protobuf:"bytes,2,opt,name=connection,proto3" json:"connection,omitempty"` // Database connection settings Pool *Pool `protobuf:"bytes,3,opt,name=pool,proto3" json:"pool,omitempty"` // Connection pool settings - MigrationsPath string `protobuf:"bytes,4,opt,name=migrations_path,json=migrationsPath,proto3" json:"migrations_path,omitempty"` // Path to migrations directory - SeedsPath *string `protobuf:"bytes,5,opt,name=seeds_path,json=seedsPath,proto3,oneof" json:"seeds_path,omitempty"` // Path to seed data directory - AutoMigrate bool `protobuf:"varint,6,opt,name=auto_migrate,json=autoMigrate,proto3" json:"auto_migrate,omitempty"` // Run migrations on startup + MigrationsPath string `protobuf:"bytes,4,opt,name=migrations_path,json=migrationsPath,proto3" json:"migrations_path,omitempty"` // Path to migrations directory (example: "./apps/server/migrations") + SeedsPath *string `protobuf:"bytes,5,opt,name=seeds_path,json=seedsPath,proto3,oneof" json:"seeds_path,omitempty"` // Path to seed data directory (example: "./apps/server/seeds") + AutoMigrate bool `protobuf:"varint,6,opt,name=auto_migrate,json=autoMigrate,proto3" json:"auto_migrate,omitempty"` // Run migrations on startup (example: true) unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -320,7 +320,7 @@ func (x *DatabaseInstance) GetAutoMigrate() bool { // Database connection and configuration settings type Databases struct { state protoimpl.MessageState `protogen:"open.v1"` - Default string `protobuf:"bytes,1,opt,name=default,proto3" json:"default,omitempty"` // Default database configuration to use + Default string `protobuf:"bytes,1,opt,name=default,proto3" json:"default,omitempty"` // Default database configuration to use (example: "primary") Databases map[string]*DatabaseInstance `protobuf:"bytes,2,rep,name=databases,proto3" json:"databases,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // Database configurations by environment/name unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -373,10 +373,10 @@ func (x *Databases) GetDatabases() map[string]*DatabaseInstance { // Connection pool settings type Pool struct { state protoimpl.MessageState `protogen:"open.v1"` - Min int32 `protobuf:"varint,1,opt,name=min,proto3" json:"min,omitempty"` // Minimum connections in pool - Max int32 `protobuf:"varint,2,opt,name=max,proto3" json:"max,omitempty"` // Maximum connections in pool - IdleTimeout int32 `protobuf:"varint,3,opt,name=idle_timeout,json=idleTimeout,proto3" json:"idle_timeout,omitempty"` // Idle connection timeout in seconds - ConnectionTimeout int32 `protobuf:"varint,4,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` // Connection timeout in seconds + Min int32 `protobuf:"varint,1,opt,name=min,proto3" json:"min,omitempty"` // Minimum connections in pool (example: 2) + Max int32 `protobuf:"varint,2,opt,name=max,proto3" json:"max,omitempty"` // Maximum connections in pool (example: 10) + IdleTimeout int32 `protobuf:"varint,3,opt,name=idle_timeout,json=idleTimeout,proto3" json:"idle_timeout,omitempty"` // Idle connection timeout in seconds (example: 30) + ConnectionTimeout int32 `protobuf:"varint,4,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` // Connection timeout in seconds (example: 5) unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } diff --git a/packages/proto/gen/gopb/deployment.pb.go b/packages/proto/gen/gopb/deployment.pb.go index 0bac984b..cb8cd146 100644 --- a/packages/proto/gen/gopb/deployment.pb.go +++ b/packages/proto/gen/gopb/deployment.pb.go @@ -301,7 +301,7 @@ func (FlyMachineCpuKind) EnumDescriptor() ([]byte, []int) { // Per-app deployment configuration type AppDeployment struct { state protoimpl.MessageState `protogen:"open.v1"` - Enable bool `protobuf:"varint,1,opt,name=enable,proto3" json:"enable,omitempty"` // Enable deployment for this app + Enable bool `protobuf:"varint,1,opt,name=enable,proto3" json:"enable,omitempty"` // Enable deployment for this app (example: true) Provider DeploymentProvider `protobuf:"varint,2,opt,name=provider,proto3,enum=stackpanel.db.DeploymentProvider" json:"provider,omitempty"` // Deployment provider Fly *FlyAppConfig `protobuf:"bytes,3,opt,name=fly,proto3,oneof" json:"fly,omitempty"` // Fly.io specific config Cloudflare *CloudflareAppConfig `protobuf:"bytes,4,opt,name=cloudflare,proto3,oneof" json:"cloudflare,omitempty"` // Cloudflare specific config @@ -370,15 +370,15 @@ func (x *AppDeployment) GetCloudflare() *CloudflareAppConfig { // Cloudflare per-app deployment configuration type CloudflareAppConfig struct { state protoimpl.MessageState `protogen:"open.v1"` - WorkerName string `protobuf:"bytes,1,opt,name=worker_name,json=workerName,proto3" json:"worker_name,omitempty"` // Worker name + WorkerName string `protobuf:"bytes,1,opt,name=worker_name,json=workerName,proto3" json:"worker_name,omitempty"` // Worker name (example: "stackpanel-web") Type CloudflareWorkerType `protobuf:"varint,2,opt,name=type,proto3,enum=stackpanel.db.CloudflareWorkerType" json:"type,omitempty"` // Deployment type (vite/worker/pages) - Route *string `protobuf:"bytes,3,opt,name=route,proto3,oneof" json:"route,omitempty"` // Custom domain route pattern - Compatibility string `protobuf:"bytes,4,opt,name=compatibility,proto3" json:"compatibility,omitempty"` // Compatibility mode (node/browser) + Route *string `protobuf:"bytes,3,opt,name=route,proto3,oneof" json:"route,omitempty"` // Custom domain route pattern (example: "stackpanel.com/*") + Compatibility string `protobuf:"bytes,4,opt,name=compatibility,proto3" json:"compatibility,omitempty"` // Compatibility mode (node/browser) (example: "node") Bindings map[string]string `protobuf:"bytes,5,rep,name=bindings,proto3" json:"bindings,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // Environment variable bindings - Secrets []string `protobuf:"bytes,6,rep,name=secrets,proto3" json:"secrets,omitempty"` // Secret names to inject - KvNamespaces []string `protobuf:"bytes,7,rep,name=kv_namespaces,json=kvNamespaces,proto3" json:"kv_namespaces,omitempty"` // KV namespace bindings - D1Databases []string `protobuf:"bytes,8,rep,name=d1_databases,json=d1Databases,proto3" json:"d1_databases,omitempty"` // D1 database bindings - R2Buckets []string `protobuf:"bytes,9,rep,name=r2_buckets,json=r2Buckets,proto3" json:"r2_buckets,omitempty"` // R2 bucket bindings + Secrets []string `protobuf:"bytes,6,rep,name=secrets,proto3" json:"secrets,omitempty"` // Secret names to inject (example: "API_KEY") + KvNamespaces []string `protobuf:"bytes,7,rep,name=kv_namespaces,json=kvNamespaces,proto3" json:"kv_namespaces,omitempty"` // KV namespace bindings (example: "SESSIONS") + D1Databases []string `protobuf:"bytes,8,rep,name=d1_databases,json=d1Databases,proto3" json:"d1_databases,omitempty"` // D1 database bindings (example: "DB") + R2Buckets []string `protobuf:"bytes,9,rep,name=r2_buckets,json=r2Buckets,proto3" json:"r2_buckets,omitempty"` // R2 bucket bindings (example: "ASSETS") unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -479,9 +479,9 @@ func (x *CloudflareAppConfig) GetR2Buckets() []string { // Cloudflare global settings type CloudflareGlobalConfig struct { state protoimpl.MessageState `protogen:"open.v1"` - AccountId *string `protobuf:"bytes,1,opt,name=account_id,json=accountId,proto3,oneof" json:"account_id,omitempty"` // Cloudflare account ID - CompatibilityDate string `protobuf:"bytes,2,opt,name=compatibility_date,json=compatibilityDate,proto3" json:"compatibility_date,omitempty"` // Workers compatibility date - DefaultRoute *string `protobuf:"bytes,3,opt,name=default_route,json=defaultRoute,proto3,oneof" json:"default_route,omitempty"` // Default custom domain route pattern + AccountId *string `protobuf:"bytes,1,opt,name=account_id,json=accountId,proto3,oneof" json:"account_id,omitempty"` // Cloudflare account ID (example: "abcd1234abcd1234abcd1234abcd1234") + CompatibilityDate string `protobuf:"bytes,2,opt,name=compatibility_date,json=compatibilityDate,proto3" json:"compatibility_date,omitempty"` // Workers compatibility date (example: "2026-04-01") + DefaultRoute *string `protobuf:"bytes,3,opt,name=default_route,json=defaultRoute,proto3,oneof" json:"default_route,omitempty"` // Default custom domain route pattern (example: "*.stackpanel.com/*") unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -646,17 +646,17 @@ func (x *DeploymentHistory) GetDeployments() []*DeploymentRecord { // Record of a deployment type DeploymentRecord struct { state protoimpl.MessageState `protogen:"open.v1"` - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // Unique deployment ID - AppName string `protobuf:"bytes,2,opt,name=app_name,json=appName,proto3" json:"app_name,omitempty"` // App that was deployed + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // Unique deployment ID (example: "deploy-2026-04-30-001") + AppName string `protobuf:"bytes,2,opt,name=app_name,json=appName,proto3" json:"app_name,omitempty"` // App that was deployed (example: "web") Provider DeploymentProvider `protobuf:"varint,3,opt,name=provider,proto3,enum=stackpanel.db.DeploymentProvider" json:"provider,omitempty"` // Provider used Status DeploymentStatus `protobuf:"varint,4,opt,name=status,proto3,enum=stackpanel.db.DeploymentStatus" json:"status,omitempty"` // Current status - Version string `protobuf:"bytes,5,opt,name=version,proto3" json:"version,omitempty"` // Version/tag deployed - StartedAt string `protobuf:"bytes,6,opt,name=started_at,json=startedAt,proto3" json:"started_at,omitempty"` // ISO timestamp of deployment start - CompletedAt *string `protobuf:"bytes,7,opt,name=completed_at,json=completedAt,proto3,oneof" json:"completed_at,omitempty"` // ISO timestamp of completion - Error *string `protobuf:"bytes,8,opt,name=error,proto3,oneof" json:"error,omitempty"` // Error message if failed - Url *string `protobuf:"bytes,9,opt,name=url,proto3,oneof" json:"url,omitempty"` // Deployed URL - CommitSha *string `protobuf:"bytes,10,opt,name=commit_sha,json=commitSha,proto3,oneof" json:"commit_sha,omitempty"` // Git commit SHA - TriggeredBy *string `protobuf:"bytes,11,opt,name=triggered_by,json=triggeredBy,proto3,oneof" json:"triggered_by,omitempty"` // User or system that triggered + Version string `protobuf:"bytes,5,opt,name=version,proto3" json:"version,omitempty"` // Version/tag deployed (example: "v1.4.2") + StartedAt string `protobuf:"bytes,6,opt,name=started_at,json=startedAt,proto3" json:"started_at,omitempty"` // ISO timestamp of deployment start (example: "2026-04-30T18:21:04Z") + CompletedAt *string `protobuf:"bytes,7,opt,name=completed_at,json=completedAt,proto3,oneof" json:"completed_at,omitempty"` // ISO timestamp of completion (example: "2026-04-30T18:23:51Z") + Error *string `protobuf:"bytes,8,opt,name=error,proto3,oneof" json:"error,omitempty"` // Error message if failed (example: "build failed: missing DATABASE_URL") + Url *string `protobuf:"bytes,9,opt,name=url,proto3,oneof" json:"url,omitempty"` // Deployed URL (example: "https://stackpanel.com") + CommitSha *string `protobuf:"bytes,10,opt,name=commit_sha,json=commitSha,proto3,oneof" json:"commit_sha,omitempty"` // Git commit SHA (example: "ba6e3d245") + TriggeredBy *string `protobuf:"bytes,11,opt,name=triggered_by,json=triggeredBy,proto3,oneof" json:"triggered_by,omitempty"` // User or system that triggered (example: "cooper@darkmatter.io") unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -771,19 +771,19 @@ func (x *DeploymentRecord) GetTriggeredBy() string { // Fly.io per-app deployment configuration type FlyAppConfig struct { state protoimpl.MessageState `protogen:"open.v1"` - AppName string `protobuf:"bytes,1,opt,name=app_name,json=appName,proto3" json:"app_name,omitempty"` // Fly.io app name - Region string `protobuf:"bytes,2,opt,name=region,proto3" json:"region,omitempty"` // Primary deployment region - Memory string `protobuf:"bytes,3,opt,name=memory,proto3" json:"memory,omitempty"` // Memory allocation (e.g., '512mb', '1gb') + AppName string `protobuf:"bytes,1,opt,name=app_name,json=appName,proto3" json:"app_name,omitempty"` // Fly.io app name (example: "stackpanel-web") + Region string `protobuf:"bytes,2,opt,name=region,proto3" json:"region,omitempty"` // Primary deployment region (example: "iad") + Memory string `protobuf:"bytes,3,opt,name=memory,proto3" json:"memory,omitempty"` // Memory allocation (e.g., '512mb', '1gb') (example: "512mb") CpuKind FlyMachineCpuKind `protobuf:"varint,4,opt,name=cpu_kind,json=cpuKind,proto3,enum=stackpanel.db.FlyMachineCpuKind" json:"cpu_kind,omitempty"` // CPU type - Cpus int32 `protobuf:"varint,5,opt,name=cpus,proto3" json:"cpus,omitempty"` // Number of CPUs + Cpus int32 `protobuf:"varint,5,opt,name=cpus,proto3" json:"cpus,omitempty"` // Number of CPUs (example: 1) AutoStop FlyAutoStop `protobuf:"varint,6,opt,name=auto_stop,json=autoStop,proto3,enum=stackpanel.db.FlyAutoStop" json:"auto_stop,omitempty"` // Auto-stop behavior - AutoStart bool `protobuf:"varint,7,opt,name=auto_start,json=autoStart,proto3" json:"auto_start,omitempty"` // Auto-start on request - MinMachines int32 `protobuf:"varint,8,opt,name=min_machines,json=minMachines,proto3" json:"min_machines,omitempty"` // Minimum machines to keep running - ForceHttps bool `protobuf:"varint,9,opt,name=force_https,json=forceHttps,proto3" json:"force_https,omitempty"` // Force HTTPS for all requests + AutoStart bool `protobuf:"varint,7,opt,name=auto_start,json=autoStart,proto3" json:"auto_start,omitempty"` // Auto-start on request (example: true) + MinMachines int32 `protobuf:"varint,8,opt,name=min_machines,json=minMachines,proto3" json:"min_machines,omitempty"` // Minimum machines to keep running (example: 0) + ForceHttps bool `protobuf:"varint,9,opt,name=force_https,json=forceHttps,proto3" json:"force_https,omitempty"` // Force HTTPS for all requests (example: true) Env map[string]string `protobuf:"bytes,10,rep,name=env,proto3" json:"env,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // Environment variables - Secrets []string `protobuf:"bytes,11,rep,name=secrets,proto3" json:"secrets,omitempty"` // Secret names to inject - HealthCheckPath *string `protobuf:"bytes,12,opt,name=health_check_path,json=healthCheckPath,proto3,oneof" json:"health_check_path,omitempty"` // Health check endpoint path - HealthCheckInterval *string `protobuf:"bytes,13,opt,name=health_check_interval,json=healthCheckInterval,proto3,oneof" json:"health_check_interval,omitempty"` // Health check interval + Secrets []string `protobuf:"bytes,11,rep,name=secrets,proto3" json:"secrets,omitempty"` // Secret names to inject (example: "DATABASE_URL") + HealthCheckPath *string `protobuf:"bytes,12,opt,name=health_check_path,json=healthCheckPath,proto3,oneof" json:"health_check_path,omitempty"` // Health check endpoint path (example: "/health") + HealthCheckInterval *string `protobuf:"bytes,13,opt,name=health_check_interval,json=healthCheckInterval,proto3,oneof" json:"health_check_interval,omitempty"` // Health check interval (example: "30s") unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -912,9 +912,9 @@ func (x *FlyAppConfig) GetHealthCheckInterval() string { // Fly.io global settings type FlyGlobalConfig struct { state protoimpl.MessageState `protogen:"open.v1"` - Organization *string `protobuf:"bytes,1,opt,name=organization,proto3,oneof" json:"organization,omitempty"` // Fly.io organization name - DefaultRegion string `protobuf:"bytes,2,opt,name=default_region,json=defaultRegion,proto3" json:"default_region,omitempty"` // Default region for new apps - RegistryPrefix string `protobuf:"bytes,3,opt,name=registry_prefix,json=registryPrefix,proto3" json:"registry_prefix,omitempty"` // Container registry prefix + Organization *string `protobuf:"bytes,1,opt,name=organization,proto3,oneof" json:"organization,omitempty"` // Fly.io organization name (example: "darkmatter-io") + DefaultRegion string `protobuf:"bytes,2,opt,name=default_region,json=defaultRegion,proto3" json:"default_region,omitempty"` // Default region for new apps (example: "iad") + RegistryPrefix string `protobuf:"bytes,3,opt,name=registry_prefix,json=registryPrefix,proto3" json:"registry_prefix,omitempty"` // Container registry prefix (example: "registry.fly.io/darkmatter") unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } diff --git a/packages/proto/gen/gopb/extensions.pb.go b/packages/proto/gen/gopb/extensions.pb.go index e45f246c..f3c17f53 100644 --- a/packages/proto/gen/gopb/extensions.pb.go +++ b/packages/proto/gen/gopb/extensions.pb.go @@ -278,16 +278,16 @@ func (PanelType) EnumDescriptor() ([]byte, []int) { // Extension configuration and metadata type Extension struct { state protoimpl.MessageState `protogen:"open.v1"` - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Display name of the extension - Description *string `protobuf:"bytes,2,opt,name=description,proto3,oneof" json:"description,omitempty"` // Human-readable description of what the extension does - Enabled bool `protobuf:"varint,3,opt,name=enabled,proto3" json:"enabled,omitempty"` // Whether this extension is enabled - Builtin bool `protobuf:"varint,4,opt,name=builtin,proto3" json:"builtin,omitempty"` // Whether this is a built-in extension shipped with stackpanel + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Display name of the extension (example: "SST") + Description *string `protobuf:"bytes,2,opt,name=description,proto3,oneof" json:"description,omitempty"` // Human-readable description of what the extension does (example: "Serverless Stack infrastructure-as-code integration") + Enabled bool `protobuf:"varint,3,opt,name=enabled,proto3" json:"enabled,omitempty"` // Whether this extension is enabled (example: true) + Builtin bool `protobuf:"varint,4,opt,name=builtin,proto3" json:"builtin,omitempty"` // Whether this is a built-in extension shipped with stackpanel (example: true) Source *ExtensionSource `protobuf:"bytes,5,opt,name=source,proto3" json:"source,omitempty"` // Extension source configuration - Version *string `protobuf:"bytes,6,opt,name=version,proto3,oneof" json:"version,omitempty"` // Version constraint (e.g., '^1.0.0', '~2.3', 'latest') + Version *string `protobuf:"bytes,6,opt,name=version,proto3,oneof" json:"version,omitempty"` // Version constraint (e.g., '^1.0.0', '~2.3', 'latest') (example: "^1.0.0") Category ExtensionCategory `protobuf:"varint,7,opt,name=category,proto3,enum=stackpanel.db.ExtensionCategory" json:"category,omitempty"` // Category for grouping in UI - Priority int32 `protobuf:"varint,8,opt,name=priority,proto3" json:"priority,omitempty"` // Load order priority (lower = earlier) - Tags []string `protobuf:"bytes,9,rep,name=tags,proto3" json:"tags,omitempty"` // Tags for filtering extensions - Dependencies []string `protobuf:"bytes,10,rep,name=dependencies,proto3" json:"dependencies,omitempty"` // Other extensions this depends on + Priority int32 `protobuf:"varint,8,opt,name=priority,proto3" json:"priority,omitempty"` // Load order priority (lower = earlier) (example: 100) + Tags []string `protobuf:"bytes,9,rep,name=tags,proto3" json:"tags,omitempty"` // Tags for filtering extensions (example: "infra") + Dependencies []string `protobuf:"bytes,10,rep,name=dependencies,proto3" json:"dependencies,omitempty"` // Other extensions this depends on (example: "secrets") Panels []*ExtensionPanel `protobuf:"bytes,11,rep,name=panels,proto3" json:"panels,omitempty"` // UI panels provided by this extension Apps map[string]*ExtensionAppData `protobuf:"bytes,12,rep,name=apps,proto3" json:"apps,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // Per-app extension data (app name -> extension data) Features *ExtensionFeatures `protobuf:"bytes,13,opt,name=features,proto3" json:"features,omitempty"` // Core features this extension configures @@ -419,7 +419,7 @@ func (x *Extension) GetFeatures() *ExtensionFeatures { // Extension data specific to an application type ExtensionAppData struct { state protoimpl.MessageState `protogen:"open.v1"` - Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"` // Whether extension is enabled for this app + Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"` // Whether extension is enabled for this app (example: true) Config map[string]string `protobuf:"bytes,2,rep,name=config,proto3" json:"config,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // Extension config for this app (string key-value pairs) unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -472,14 +472,14 @@ func (x *ExtensionAppData) GetConfig() map[string]string { // Flags indicating which core stackpanel features this extension configures type ExtensionFeatures struct { state protoimpl.MessageState `protogen:"open.v1"` - Files bool `protobuf:"varint,1,opt,name=files,proto3" json:"files,omitempty"` // Extension generates files via stackpanel.files - Scripts bool `protobuf:"varint,2,opt,name=scripts,proto3" json:"scripts,omitempty"` // Extension provides shell scripts/commands - Tasks bool `protobuf:"varint,3,opt,name=tasks,proto3" json:"tasks,omitempty"` // Extension defines tasks - Secrets bool `protobuf:"varint,4,opt,name=secrets,proto3" json:"secrets,omitempty"` // Extension manages secrets/variables - ShellHooks bool `protobuf:"varint,5,opt,name=shell_hooks,json=shellHooks,proto3" json:"shell_hooks,omitempty"` // Extension adds shell hooks - Packages bool `protobuf:"varint,6,opt,name=packages,proto3" json:"packages,omitempty"` // Extension adds devshell packages - Services bool `protobuf:"varint,7,opt,name=services,proto3" json:"services,omitempty"` // Extension configures services/processes - Checks bool `protobuf:"varint,8,opt,name=checks,proto3" json:"checks,omitempty"` // Extension defines checks/validations + Files bool `protobuf:"varint,1,opt,name=files,proto3" json:"files,omitempty"` // Extension generates files via stackpanel.files (example: true) + Scripts bool `protobuf:"varint,2,opt,name=scripts,proto3" json:"scripts,omitempty"` // Extension provides shell scripts/commands (example: true) + Tasks bool `protobuf:"varint,3,opt,name=tasks,proto3" json:"tasks,omitempty"` // Extension defines tasks (example: false) + Secrets bool `protobuf:"varint,4,opt,name=secrets,proto3" json:"secrets,omitempty"` // Extension manages secrets/variables (example: false) + ShellHooks bool `protobuf:"varint,5,opt,name=shell_hooks,json=shellHooks,proto3" json:"shell_hooks,omitempty"` // Extension adds shell hooks (example: true) + Packages bool `protobuf:"varint,6,opt,name=packages,proto3" json:"packages,omitempty"` // Extension adds devshell packages (example: true) + Services bool `protobuf:"varint,7,opt,name=services,proto3" json:"services,omitempty"` // Extension configures services/processes (example: false) + Checks bool `protobuf:"varint,8,opt,name=checks,proto3" json:"checks,omitempty"` // Extension defines checks/validations (example: false) unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -573,11 +573,11 @@ func (x *ExtensionFeatures) GetChecks() bool { // UI panel configuration for the web interface type ExtensionPanel struct { state protoimpl.MessageState `protogen:"open.v1"` - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // Unique panel identifier - Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` // Display title - Description *string `protobuf:"bytes,3,opt,name=description,proto3,oneof" json:"description,omitempty"` // Panel description + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // Unique panel identifier (example: "sst-status") + Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` // Display title (example: "SST Deployment Status") + Description *string `protobuf:"bytes,3,opt,name=description,proto3,oneof" json:"description,omitempty"` // Panel description (example: "Live status of SST stacks across environments") Type PanelType `protobuf:"varint,4,opt,name=type,proto3,enum=stackpanel.db.PanelType" json:"type,omitempty"` // Panel type (determines which component to render) - Order int32 `protobuf:"varint,5,opt,name=order,proto3" json:"order,omitempty"` // Display order (lower = first) + Order int32 `protobuf:"varint,5,opt,name=order,proto3" json:"order,omitempty"` // Display order (lower = first) (example: 10) Fields []*PanelField `protobuf:"bytes,6,rep,name=fields,proto3" json:"fields,omitempty"` // Panel configuration fields unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -659,12 +659,12 @@ func (x *ExtensionPanel) GetFields() []*PanelField { type ExtensionSource struct { state protoimpl.MessageState `protogen:"open.v1"` Type ExtensionSourceType `protobuf:"varint,1,opt,name=type,proto3,enum=stackpanel.db.ExtensionSourceType" json:"type,omitempty"` // Source type for the extension - Repo *string `protobuf:"bytes,2,opt,name=repo,proto3,oneof" json:"repo,omitempty"` // GitHub repository (owner/repo) for github source type - Package *string `protobuf:"bytes,3,opt,name=package,proto3,oneof" json:"package,omitempty"` // NPM package name for npm source type - Path *string `protobuf:"bytes,4,opt,name=path,proto3,oneof" json:"path,omitempty"` // Local path for local source type - Url *string `protobuf:"bytes,5,opt,name=url,proto3,oneof" json:"url,omitempty"` // URL for url source type - Ref *string `protobuf:"bytes,6,opt,name=ref,proto3,oneof" json:"ref,omitempty"` // Git ref (branch, tag, commit) for github source type - ModulePath *string `protobuf:"bytes,7,opt,name=module_path,json=modulePath,proto3,oneof" json:"module_path,omitempty"` // Path to the Nix module within the source + Repo *string `protobuf:"bytes,2,opt,name=repo,proto3,oneof" json:"repo,omitempty"` // GitHub repository (owner/repo) for github source type (example: "darkmatter/stackpanel-sst") + Package *string `protobuf:"bytes,3,opt,name=package,proto3,oneof" json:"package,omitempty"` // NPM package name for npm source type (example: "@stackpanel/extension-sst") + Path *string `protobuf:"bytes,4,opt,name=path,proto3,oneof" json:"path,omitempty"` // Local path for local source type (example: "./extensions/sst") + Url *string `protobuf:"bytes,5,opt,name=url,proto3,oneof" json:"url,omitempty"` // URL for url source type (example: "https://example.com/sst.tar.gz") + Ref *string `protobuf:"bytes,6,opt,name=ref,proto3,oneof" json:"ref,omitempty"` // Git ref (branch, tag, commit) for github source type (example: "main") + ModulePath *string `protobuf:"bytes,7,opt,name=module_path,json=modulePath,proto3,oneof" json:"module_path,omitempty"` // Path to the Nix module within the source (example: "./module.nix") unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -751,9 +751,9 @@ func (x *ExtensionSource) GetModulePath() string { // Extensions and plugins configuration type Extensions struct { state protoimpl.MessageState `protogen:"open.v1"` - Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"` // Enable extensions system - AutoUpdate bool `protobuf:"varint,2,opt,name=auto_update,json=autoUpdate,proto3" json:"auto_update,omitempty"` // Automatically check for extension updates - Registry *string `protobuf:"bytes,3,opt,name=registry,proto3,oneof" json:"registry,omitempty"` // Default extension registry URL + Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"` // Enable extensions system (example: true) + AutoUpdate bool `protobuf:"varint,2,opt,name=auto_update,json=autoUpdate,proto3" json:"auto_update,omitempty"` // Automatically check for extension updates (example: false) + Registry *string `protobuf:"bytes,3,opt,name=registry,proto3,oneof" json:"registry,omitempty"` // Default extension registry URL (example: "https://registry.stackpanel.dev") Extensions map[string]*Extension `protobuf:"bytes,4,rep,name=extensions,proto3" json:"extensions,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // Installed extensions by key unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -820,10 +820,10 @@ func (x *Extensions) GetExtensions() map[string]*Extension { // Configuration field for a panel type PanelField struct { state protoimpl.MessageState `protogen:"open.v1"` - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Field name (maps to component prop) + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Field name (maps to component prop) (example: "stage") Type FieldType `protobuf:"varint,2,opt,name=type,proto3,enum=stackpanel.db.FieldType" json:"type,omitempty"` // Field type - Value string `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` // Field value (JSON-encoded for complex types) - Options []string `protobuf:"bytes,4,rep,name=options,proto3" json:"options,omitempty"` // Options for select fields + Value string `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` // Field value (JSON-encoded for complex types) (example: "production") + Options []string `protobuf:"bytes,4,rep,name=options,proto3" json:"options,omitempty"` // Options for select fields (example: "production") unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } diff --git a/packages/proto/gen/gopb/files.pb.go b/packages/proto/gen/gopb/files.pb.go index 64f72b5a..c7fd4eed 100644 --- a/packages/proto/gen/gopb/files.pb.go +++ b/packages/proto/gen/gopb/files.pb.go @@ -77,14 +77,14 @@ func (FileType) EnumDescriptor() ([]byte, []int) { // A file to be generated into the project workspace type GeneratedFile struct { state protoimpl.MessageState `protogen:"open.v1"` - Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` // Relative path from project root where file will be written + Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` // Relative path from project root where file will be written (example: ".stack/gen/ide/vscode/settings.json") Type FileType `protobuf:"varint,2,opt,name=type,proto3,enum=stackpanel.db.FileType" json:"type,omitempty"` // Type of content source (text or derivation) - Enable bool `protobuf:"varint,3,opt,name=enable,proto3" json:"enable,omitempty"` // Whether this file should be generated - Mode *string `protobuf:"bytes,4,opt,name=mode,proto3,oneof" json:"mode,omitempty"` // File permissions (e.g., '0755') - Source *string `protobuf:"bytes,5,opt,name=source,proto3,oneof" json:"source,omitempty"` // Module or component that generated this file - Description *string `protobuf:"bytes,6,opt,name=description,proto3,oneof" json:"description,omitempty"` // Human-readable description of the file's purpose - StorePath *string `protobuf:"bytes,7,opt,name=store_path,json=storePath,proto3,oneof" json:"store_path,omitempty"` // Nix store path containing the file content (for derivation type) - Text *string `protobuf:"bytes,8,opt,name=text,proto3,oneof" json:"text,omitempty"` // Inline text content (for text type, may be truncated for large files) + Enable bool `protobuf:"varint,3,opt,name=enable,proto3" json:"enable,omitempty"` // Whether this file should be generated (example: true) + Mode *string `protobuf:"bytes,4,opt,name=mode,proto3,oneof" json:"mode,omitempty"` // File permissions (e.g., '0755') (example: "0644") + Source *string `protobuf:"bytes,5,opt,name=source,proto3,oneof" json:"source,omitempty"` // Module or component that generated this file (example: "stackpanel.ide.vscode") + Description *string `protobuf:"bytes,6,opt,name=description,proto3,oneof" json:"description,omitempty"` // Human-readable description of the file's purpose (example: "VS Code workspace settings generated by the IDE module") + StorePath *string `protobuf:"bytes,7,opt,name=store_path,json=storePath,proto3,oneof" json:"store_path,omitempty"` // Nix store path containing the file content (for derivation type) (example: "/nix/store/abc123-vscode-settings/settings.json") + Text *string `protobuf:"bytes,8,opt,name=text,proto3,oneof" json:"text,omitempty"` // Inline text content (for text type, may be truncated for large files) (example: "{\n \"editor.formatOnSave\": true\n}\n") unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -178,7 +178,7 @@ func (x *GeneratedFile) GetText() string { // Collection of all generated file entries type GeneratedFiles struct { state protoimpl.MessageState `protogen:"open.v1"` - Enable bool `protobuf:"varint,1,opt,name=enable,proto3" json:"enable,omitempty"` // Whether file generation is enabled globally + Enable bool `protobuf:"varint,1,opt,name=enable,proto3" json:"enable,omitempty"` // Whether file generation is enabled globally (example: true) Entries map[string]*GeneratedFile `protobuf:"bytes,2,rep,name=entries,proto3" json:"entries,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // Map of file path to file configuration unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache diff --git a/packages/proto/gen/gopb/go_app.pb.go b/packages/proto/gen/gopb/go_app.pb.go index 285a90f1..02003cc0 100644 --- a/packages/proto/gen/gopb/go_app.pb.go +++ b/packages/proto/gen/gopb/go_app.pb.go @@ -25,13 +25,13 @@ const ( type GoAppConfig struct { state protoimpl.MessageState `protogen:"open.v1"` Enable bool `protobuf:"varint,1,opt,name=enable,proto3" json:"enable,omitempty"` // Enable Go app support for this app - MainPackage string `protobuf:"bytes,2,opt,name=main_package,json=mainPackage,proto3" json:"main_package,omitempty"` // Go main package path + MainPackage string `protobuf:"bytes,2,opt,name=main_package,json=mainPackage,proto3" json:"main_package,omitempty"` // Go main package path (example: "./cmd/server") Version string `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"` // App version BinaryName *string `protobuf:"bytes,4,opt,name=binary_name,json=binaryName,proto3,oneof" json:"binary_name,omitempty"` // Binary name (if different from app name) - Ldflags []string `protobuf:"bytes,5,rep,name=ldflags,proto3" json:"ldflags,omitempty"` // Go linker flags + Ldflags []string `protobuf:"bytes,5,rep,name=ldflags,proto3" json:"ldflags,omitempty"` // Go linker flags (example: ["-X main.version=1.0.0"]) WatchDirs []string `protobuf:"bytes,6,rep,name=watch_dirs,json=watchDirs,proto3" json:"watch_dirs,omitempty"` // Directories to watch for air live reload - DevArgs []string `protobuf:"bytes,7,rep,name=dev_args,json=devArgs,proto3" json:"dev_args,omitempty"` // Arguments to pass to binary during development - Tools []string `protobuf:"bytes,8,rep,name=tools,proto3" json:"tools,omitempty"` // Additional Go tool dependencies + DevArgs []string `protobuf:"bytes,7,rep,name=dev_args,json=devArgs,proto3" json:"dev_args,omitempty"` // Arguments to pass to binary during development (example: ["serve", "--port=3000"]) + Tools []string `protobuf:"bytes,8,rep,name=tools,proto3" json:"tools,omitempty"` // Additional Go tool dependencies (example: ["github.com/golangci/golangci-lint/cmd/golangci-lint"]) GenerateFiles bool `protobuf:"varint,9,opt,name=generate_files,json=generateFiles,proto3" json:"generate_files,omitempty"` // Generate package.json, .air.toml, and tools.go Description string `protobuf:"bytes,10,opt,name=description,proto3" json:"description,omitempty"` // App description unknownFields protoimpl.UnknownFields diff --git a/packages/proto/gen/gopb/healthchecks.pb.go b/packages/proto/gen/gopb/healthchecks.pb.go index 67e5ebf0..f0542578 100644 --- a/packages/proto/gen/gopb/healthchecks.pb.go +++ b/packages/proto/gen/gopb/healthchecks.pb.go @@ -194,9 +194,9 @@ type HealthSummary struct { state protoimpl.MessageState `protogen:"open.v1"` OverallStatus HealthStatus `protobuf:"varint,1,opt,name=overall_status,json=overallStatus,proto3,enum=stackpanel.db.HealthStatus" json:"overall_status,omitempty"` // Overall system health status Modules map[string]*ModuleHealth `protobuf:"bytes,2,rep,name=modules,proto3" json:"modules,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // Health status per module - TotalHealthy int32 `protobuf:"varint,3,opt,name=total_healthy,json=totalHealthy,proto3" json:"total_healthy,omitempty"` // Total healthy checks across all modules - TotalChecks int32 `protobuf:"varint,4,opt,name=total_checks,json=totalChecks,proto3" json:"total_checks,omitempty"` // Total checks across all modules - LastUpdated string `protobuf:"bytes,5,opt,name=last_updated,json=lastUpdated,proto3" json:"last_updated,omitempty"` // When summary was last computed (RFC3339) + TotalHealthy int32 `protobuf:"varint,3,opt,name=total_healthy,json=totalHealthy,proto3" json:"total_healthy,omitempty"` // Total healthy checks across all modules (example: 12) + TotalChecks int32 `protobuf:"varint,4,opt,name=total_checks,json=totalChecks,proto3" json:"total_checks,omitempty"` // Total checks across all modules (example: 14) + LastUpdated string `protobuf:"bytes,5,opt,name=last_updated,json=lastUpdated,proto3" json:"last_updated,omitempty"` // When summary was last computed (RFC3339) (example: "2026-04-30T18:21:04Z") unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -269,23 +269,23 @@ func (x *HealthSummary) GetLastUpdated() string { // A healthcheck definition that can verify module functionality type Healthcheck struct { state protoimpl.MessageState `protogen:"open.v1"` - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // Unique identifier for the healthcheck - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` // Display name for the healthcheck - Description *string `protobuf:"bytes,3,opt,name=description,proto3,oneof" json:"description,omitempty"` // Description of what this check verifies + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // Unique identifier for the healthcheck (example: "postgres-port") + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` // Display name for the healthcheck (example: "PostgreSQL listening") + Description *string `protobuf:"bytes,3,opt,name=description,proto3,oneof" json:"description,omitempty"` // Description of what this check verifies (example: "Verifies the PostgreSQL service is accepting connections on its assigned port") Type HealthcheckType `protobuf:"varint,4,opt,name=type,proto3,enum=stackpanel.db.HealthcheckType" json:"type,omitempty"` // Type of healthcheck (script, nix, http, tcp) Severity HealthcheckSeverity `protobuf:"varint,5,opt,name=severity,proto3,enum=stackpanel.db.HealthcheckSeverity" json:"severity,omitempty"` // How critical this check is - ScriptBinPath *string `protobuf:"bytes,6,opt,name=script_bin_path,json=scriptBinPath,proto3,oneof" json:"script_bin_path,omitempty"` // Path to script executable in Nix store - ScriptSource *string `protobuf:"bytes,7,opt,name=script_source,json=scriptSource,proto3,oneof" json:"script_source,omitempty"` // Source type: inline, path, scriptRef, package - NixExpr *string `protobuf:"bytes,8,opt,name=nix_expr,json=nixExpr,proto3,oneof" json:"nix_expr,omitempty"` // Nix expression to evaluate (for NIX type) - HttpUrl *string `protobuf:"bytes,9,opt,name=http_url,json=httpUrl,proto3,oneof" json:"http_url,omitempty"` // URL to check (for HTTP type) - HttpMethod *string `protobuf:"bytes,10,opt,name=http_method,json=httpMethod,proto3,oneof" json:"http_method,omitempty"` // HTTP method (GET, POST, etc.) - HttpExpectedStatus *int32 `protobuf:"varint,11,opt,name=http_expected_status,json=httpExpectedStatus,proto3,oneof" json:"http_expected_status,omitempty"` // Expected HTTP status code - TcpHost *string `protobuf:"bytes,12,opt,name=tcp_host,json=tcpHost,proto3,oneof" json:"tcp_host,omitempty"` // Host to connect to (for TCP type) - TcpPort *int32 `protobuf:"varint,13,opt,name=tcp_port,json=tcpPort,proto3,oneof" json:"tcp_port,omitempty"` // Port to connect to (for TCP type) - TimeoutSeconds int32 `protobuf:"varint,14,opt,name=timeout_seconds,json=timeoutSeconds,proto3" json:"timeout_seconds,omitempty"` // Timeout for the check in seconds - IntervalSeconds *int32 `protobuf:"varint,15,opt,name=interval_seconds,json=intervalSeconds,proto3,oneof" json:"interval_seconds,omitempty"` // How often to run this check (optional) - Module string `protobuf:"bytes,16,opt,name=module,proto3" json:"module,omitempty"` // Module that registered this healthcheck - Tags []string `protobuf:"bytes,17,rep,name=tags,proto3" json:"tags,omitempty"` // Tags for filtering/grouping checks + ScriptBinPath *string `protobuf:"bytes,6,opt,name=script_bin_path,json=scriptBinPath,proto3,oneof" json:"script_bin_path,omitempty"` // Path to script executable in Nix store (example: "/nix/store/abc123-pg-check/bin/pg-check") + ScriptSource *string `protobuf:"bytes,7,opt,name=script_source,json=scriptSource,proto3,oneof" json:"script_source,omitempty"` // Source type: inline, path, scriptRef, package (example: "scriptRef") + NixExpr *string `protobuf:"bytes,8,opt,name=nix_expr,json=nixExpr,proto3,oneof" json:"nix_expr,omitempty"` // Nix expression to evaluate (for NIX type) (example: "config.services.postgres.enable") + HttpUrl *string `protobuf:"bytes,9,opt,name=http_url,json=httpUrl,proto3,oneof" json:"http_url,omitempty"` // URL to check (for HTTP type) (example: "http://localhost:6402/health") + HttpMethod *string `protobuf:"bytes,10,opt,name=http_method,json=httpMethod,proto3,oneof" json:"http_method,omitempty"` // HTTP method (GET, POST, etc.) (example: "GET") + HttpExpectedStatus *int32 `protobuf:"varint,11,opt,name=http_expected_status,json=httpExpectedStatus,proto3,oneof" json:"http_expected_status,omitempty"` // Expected HTTP status code (example: 200) + TcpHost *string `protobuf:"bytes,12,opt,name=tcp_host,json=tcpHost,proto3,oneof" json:"tcp_host,omitempty"` // Host to connect to (for TCP type) (example: "localhost") + TcpPort *int32 `protobuf:"varint,13,opt,name=tcp_port,json=tcpPort,proto3,oneof" json:"tcp_port,omitempty"` // Port to connect to (for TCP type) (example: 6410) + TimeoutSeconds int32 `protobuf:"varint,14,opt,name=timeout_seconds,json=timeoutSeconds,proto3" json:"timeout_seconds,omitempty"` // Timeout for the check in seconds (example: 5) + IntervalSeconds *int32 `protobuf:"varint,15,opt,name=interval_seconds,json=intervalSeconds,proto3,oneof" json:"interval_seconds,omitempty"` // How often to run this check (optional) (example: 30) + Module string `protobuf:"bytes,16,opt,name=module,proto3" json:"module,omitempty"` // Module that registered this healthcheck (example: "postgres") + Tags []string `protobuf:"bytes,17,rep,name=tags,proto3" json:"tags,omitempty"` // Tags for filtering/grouping checks (example: "service") unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -442,13 +442,13 @@ func (x *Healthcheck) GetTags() []string { // The result of executing a healthcheck type HealthcheckResult struct { state protoimpl.MessageState `protogen:"open.v1"` - CheckId string `protobuf:"bytes,1,opt,name=check_id,json=checkId,proto3" json:"check_id,omitempty"` // ID of the healthcheck that was run + CheckId string `protobuf:"bytes,1,opt,name=check_id,json=checkId,proto3" json:"check_id,omitempty"` // ID of the healthcheck that was run (example: "postgres-port") Status HealthStatus `protobuf:"varint,2,opt,name=status,proto3,enum=stackpanel.db.HealthStatus" json:"status,omitempty"` // Result status of this check - Message *string `protobuf:"bytes,3,opt,name=message,proto3,oneof" json:"message,omitempty"` // Human-readable result message - Error *string `protobuf:"bytes,4,opt,name=error,proto3,oneof" json:"error,omitempty"` // Error message if check failed to execute - Output *string `protobuf:"bytes,5,opt,name=output,proto3,oneof" json:"output,omitempty"` // Raw output from script/command - DurationMs int64 `protobuf:"varint,6,opt,name=duration_ms,json=durationMs,proto3" json:"duration_ms,omitempty"` // How long the check took to run in milliseconds - Timestamp string `protobuf:"bytes,7,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // When the check was run (RFC3339) + Message *string `protobuf:"bytes,3,opt,name=message,proto3,oneof" json:"message,omitempty"` // Human-readable result message (example: "PostgreSQL responded in 12ms") + Error *string `protobuf:"bytes,4,opt,name=error,proto3,oneof" json:"error,omitempty"` // Error message if check failed to execute (example: "connection refused") + Output *string `protobuf:"bytes,5,opt,name=output,proto3,oneof" json:"output,omitempty"` // Raw output from script/command (example: "psql: connected to localhost:6410") + DurationMs int64 `protobuf:"varint,6,opt,name=duration_ms,json=durationMs,proto3" json:"duration_ms,omitempty"` // How long the check took to run in milliseconds (example: 12) + Timestamp string `protobuf:"bytes,7,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // When the check was run (RFC3339) (example: "2026-04-30T18:21:04Z") unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -535,12 +535,12 @@ func (x *HealthcheckResult) GetTimestamp() string { // Aggregated health status for a module type ModuleHealth struct { state protoimpl.MessageState `protogen:"open.v1"` - Module string `protobuf:"bytes,1,opt,name=module,proto3" json:"module,omitempty"` // Module name + Module string `protobuf:"bytes,1,opt,name=module,proto3" json:"module,omitempty"` // Module name (example: "postgres") Status HealthStatus `protobuf:"varint,2,opt,name=status,proto3,enum=stackpanel.db.HealthStatus" json:"status,omitempty"` // Aggregated health status Checks []*HealthcheckResult `protobuf:"bytes,3,rep,name=checks,proto3" json:"checks,omitempty"` // Individual check results - HealthyCount int32 `protobuf:"varint,4,opt,name=healthy_count,json=healthyCount,proto3" json:"healthy_count,omitempty"` // Number of passing checks - TotalCount int32 `protobuf:"varint,5,opt,name=total_count,json=totalCount,proto3" json:"total_count,omitempty"` // Total number of checks - LastUpdated string `protobuf:"bytes,6,opt,name=last_updated,json=lastUpdated,proto3" json:"last_updated,omitempty"` // When health was last evaluated (RFC3339) + HealthyCount int32 `protobuf:"varint,4,opt,name=healthy_count,json=healthyCount,proto3" json:"healthy_count,omitempty"` // Number of passing checks (example: 3) + TotalCount int32 `protobuf:"varint,5,opt,name=total_count,json=totalCount,proto3" json:"total_count,omitempty"` // Total number of checks (example: 3) + LastUpdated string `protobuf:"bytes,6,opt,name=last_updated,json=lastUpdated,proto3" json:"last_updated,omitempty"` // When health was last evaluated (RFC3339) (example: "2026-04-30T18:21:04Z") unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } diff --git a/packages/proto/gen/gopb/modules.pb.go b/packages/proto/gen/gopb/modules.pb.go index 7a183c24..4e07a2d8 100644 --- a/packages/proto/gen/gopb/modules.pb.go +++ b/packages/proto/gen/gopb/modules.pb.go @@ -281,7 +281,7 @@ func (ModuleSourceType) EnumDescriptor() ([]byte, []int) { // Request to disable a module type DisableModuleRequest struct { state protoimpl.MessageState `protogen:"open.v1"` - ModuleId string `protobuf:"bytes,1,opt,name=module_id,json=moduleId,proto3" json:"module_id,omitempty"` // Module identifier to disable + ModuleId string `protobuf:"bytes,1,opt,name=module_id,json=moduleId,proto3" json:"module_id,omitempty"` // Module identifier to disable (example: "postgres") unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -326,7 +326,7 @@ func (x *DisableModuleRequest) GetModuleId() string { // Request to enable a module type EnableModuleRequest struct { state protoimpl.MessageState `protogen:"open.v1"` - ModuleId string `protobuf:"bytes,1,opt,name=module_id,json=moduleId,proto3" json:"module_id,omitempty"` // Module identifier to enable + ModuleId string `protobuf:"bytes,1,opt,name=module_id,json=moduleId,proto3" json:"module_id,omitempty"` // Module identifier to enable (example: "postgres") Settings map[string]string `protobuf:"bytes,2,rep,name=settings,proto3" json:"settings,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // Initial settings (optional) unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -379,7 +379,7 @@ func (x *EnableModuleRequest) GetSettings() map[string]string { // Request to get module outputs type GetModuleOutputsRequest struct { state protoimpl.MessageState `protogen:"open.v1"` - ModuleId string `protobuf:"bytes,1,opt,name=module_id,json=moduleId,proto3" json:"module_id,omitempty"` // Module identifier + ModuleId string `protobuf:"bytes,1,opt,name=module_id,json=moduleId,proto3" json:"module_id,omitempty"` // Module identifier (example: "postgres") unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -424,24 +424,26 @@ func (x *GetModuleOutputsRequest) GetModuleId() string { // Configuration for a stackpanel module type Module struct { state protoimpl.MessageState `protogen:"open.v1"` - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // Module identifier (e.g., 'oxlint', 'postgres') - Enable bool `protobuf:"varint,2,opt,name=enable,proto3" json:"enable,omitempty"` // Whether the module is enabled + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // Module identifier (e.g., 'oxlint', 'postgres') (example: "postgres") + Enable bool `protobuf:"varint,2,opt,name=enable,proto3" json:"enable,omitempty"` // Whether the module is enabled (example: true) Meta *ModuleMeta `protobuf:"bytes,3,opt,name=meta,proto3" json:"meta,omitempty"` // Display metadata Source *ModuleSource `protobuf:"bytes,4,opt,name=source,proto3" json:"source,omitempty"` // Source configuration Features *ModuleFeatures `protobuf:"bytes,5,opt,name=features,proto3" json:"features,omitempty"` // Feature flags - Requires []string `protobuf:"bytes,6,rep,name=requires,proto3" json:"requires,omitempty"` // Required modules - Conflicts []string `protobuf:"bytes,7,rep,name=conflicts,proto3" json:"conflicts,omitempty"` // Conflicting modules - Priority int32 `protobuf:"varint,8,opt,name=priority,proto3" json:"priority,omitempty"` // Load order priority (lower = earlier) - Tags []string `protobuf:"bytes,9,rep,name=tags,proto3" json:"tags,omitempty"` // Tags for filtering + Requires []string `protobuf:"bytes,6,rep,name=requires,proto3" json:"requires,omitempty"` // Required modules (example: "process-compose") + Conflicts []string `protobuf:"bytes,7,rep,name=conflicts,proto3" json:"conflicts,omitempty"` // Conflicting modules (example: "mysql") + Priority int32 `protobuf:"varint,8,opt,name=priority,proto3" json:"priority,omitempty"` // Load order priority (lower = earlier) (example: 50) + Tags []string `protobuf:"bytes,9,rep,name=tags,proto3" json:"tags,omitempty"` // Tags for filtering (example: "database") // JSON Schema for generating configuration forms. // Describes the module's configurable options. + // + // (example: "{ \"type\": \"object\", \"properties\": { \"version\": { \"type\": \"string\" } } }") ConfigSchema *string `protobuf:"bytes,10,opt,name=config_schema,json=configSchema,proto3,oneof" json:"config_schema,omitempty"` // Module-level settings (key-value pairs). // These are passed to the Nix module configuration. Settings map[string]string `protobuf:"bytes,11,rep,name=settings,proto3" json:"settings,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` Panels []*ModulePanel `protobuf:"bytes,12,rep,name=panels,proto3" json:"panels,omitempty"` // UI panels Apps map[string]*ModuleAppData `protobuf:"bytes,13,rep,name=apps,proto3" json:"apps,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // Per-app module data - HealthcheckModule *string `protobuf:"bytes,14,opt,name=healthcheck_module,json=healthcheckModule,proto3,oneof" json:"healthcheck_module,omitempty"` // Linked healthcheck module name + HealthcheckModule *string `protobuf:"bytes,14,opt,name=healthcheck_module,json=healthcheckModule,proto3,oneof" json:"healthcheck_module,omitempty"` // Linked healthcheck module name (example: "postgres") unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -577,7 +579,7 @@ func (x *Module) GetHealthcheckModule() string { // Module data for a specific app type ModuleAppData struct { state protoimpl.MessageState `protogen:"open.v1"` - Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"` // Whether module is enabled for this app + Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"` // Whether module is enabled for this app (example: true) Config map[string]string `protobuf:"bytes,2,rep,name=config,proto3" json:"config,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // Module config (string key-value pairs) unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -630,14 +632,14 @@ func (x *ModuleAppData) GetConfig() map[string]string { // Which stackpanel features this module uses type ModuleFeatures struct { state protoimpl.MessageState `protogen:"open.v1"` - Files bool `protobuf:"varint,1,opt,name=files,proto3" json:"files,omitempty"` // Generates files via stackpanel.files - Scripts bool `protobuf:"varint,2,opt,name=scripts,proto3" json:"scripts,omitempty"` // Provides shell scripts/commands - Tasks bool `protobuf:"varint,3,opt,name=tasks,proto3" json:"tasks,omitempty"` // Defines turborepo tasks - Healthchecks bool `protobuf:"varint,4,opt,name=healthchecks,proto3" json:"healthchecks,omitempty"` // Defines health checks - Services bool `protobuf:"varint,5,opt,name=services,proto3" json:"services,omitempty"` // Configures background services - Secrets bool `protobuf:"varint,6,opt,name=secrets,proto3" json:"secrets,omitempty"` // Manages secrets/variables - Packages bool `protobuf:"varint,7,opt,name=packages,proto3" json:"packages,omitempty"` // Adds devshell packages - AppModule bool `protobuf:"varint,8,opt,name=app_module,json=appModule,proto3" json:"app_module,omitempty"` // Extends per-app configuration + Files bool `protobuf:"varint,1,opt,name=files,proto3" json:"files,omitempty"` // Generates files via stackpanel.files (example: true) + Scripts bool `protobuf:"varint,2,opt,name=scripts,proto3" json:"scripts,omitempty"` // Provides shell scripts/commands (example: true) + Tasks bool `protobuf:"varint,3,opt,name=tasks,proto3" json:"tasks,omitempty"` // Defines turborepo tasks (example: false) + Healthchecks bool `protobuf:"varint,4,opt,name=healthchecks,proto3" json:"healthchecks,omitempty"` // Defines health checks (example: true) + Services bool `protobuf:"varint,5,opt,name=services,proto3" json:"services,omitempty"` // Configures background services (example: true) + Secrets bool `protobuf:"varint,6,opt,name=secrets,proto3" json:"secrets,omitempty"` // Manages secrets/variables (example: false) + Packages bool `protobuf:"varint,7,opt,name=packages,proto3" json:"packages,omitempty"` // Adds devshell packages (example: true) + AppModule bool `protobuf:"varint,8,opt,name=app_module,json=appModule,proto3" json:"app_module,omitempty"` // Extends per-app configuration (example: false) unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -731,13 +733,13 @@ func (x *ModuleFeatures) GetAppModule() bool { // Display metadata for a module type ModuleMeta struct { state protoimpl.MessageState `protogen:"open.v1"` - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Display name of the module - Description *string `protobuf:"bytes,2,opt,name=description,proto3,oneof" json:"description,omitempty"` // Human-readable description - Icon *string `protobuf:"bytes,3,opt,name=icon,proto3,oneof" json:"icon,omitempty"` // Lucide icon name (e.g., 'database', 'box') + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Display name of the module (example: "PostgreSQL") + Description *string `protobuf:"bytes,2,opt,name=description,proto3,oneof" json:"description,omitempty"` // Human-readable description (example: "Managed PostgreSQL service for local development") + Icon *string `protobuf:"bytes,3,opt,name=icon,proto3,oneof" json:"icon,omitempty"` // Lucide icon name (e.g., 'database', 'box') (example: "database") Category ModuleCategory `protobuf:"varint,4,opt,name=category,proto3,enum=stackpanel.db.ModuleCategory" json:"category,omitempty"` // Category for UI grouping - Author *string `protobuf:"bytes,5,opt,name=author,proto3,oneof" json:"author,omitempty"` // Author or maintainer - Version *string `protobuf:"bytes,6,opt,name=version,proto3,oneof" json:"version,omitempty"` // Module version - Homepage *string `protobuf:"bytes,7,opt,name=homepage,proto3,oneof" json:"homepage,omitempty"` // URL to documentation or repository + Author *string `protobuf:"bytes,5,opt,name=author,proto3,oneof" json:"author,omitempty"` // Author or maintainer (example: "Darkmatter") + Version *string `protobuf:"bytes,6,opt,name=version,proto3,oneof" json:"version,omitempty"` // Module version (example: "1.2.0") + Homepage *string `protobuf:"bytes,7,opt,name=homepage,proto3,oneof" json:"homepage,omitempty"` // URL to documentation or repository (example: "https://stackpanel.dev/docs/modules/postgres") unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -824,9 +826,9 @@ func (x *ModuleMeta) GetHomepage() string { // A file generated by a module type ModuleOutputFile struct { state protoimpl.MessageState `protogen:"open.v1"` - Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` // File path relative to project root - Description *string `protobuf:"bytes,2,opt,name=description,proto3,oneof" json:"description,omitempty"` // Description of the file - Type string `protobuf:"bytes,3,opt,name=type,proto3" json:"type,omitempty"` // File type: text, derivation, symlink + Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` // File path relative to project root (example: ".stack/state/postgres.conf") + Description *string `protobuf:"bytes,2,opt,name=description,proto3,oneof" json:"description,omitempty"` // Description of the file (example: "Generated PostgreSQL config") + Type string `protobuf:"bytes,3,opt,name=type,proto3" json:"type,omitempty"` // File type: text, derivation, symlink (example: "text") unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -885,11 +887,11 @@ func (x *ModuleOutputFile) GetType() string { // A healthcheck defined by a module type ModuleOutputHealthcheck struct { state protoimpl.MessageState `protogen:"open.v1"` - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // Healthcheck ID - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` // Display name - Description *string `protobuf:"bytes,3,opt,name=description,proto3,oneof" json:"description,omitempty"` // Description of what it checks - Severity string `protobuf:"bytes,4,opt,name=severity,proto3" json:"severity,omitempty"` // Severity: critical, warning, info - Type string `protobuf:"bytes,5,opt,name=type,proto3" json:"type,omitempty"` // Check type: script, http, tcp, nix + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // Healthcheck ID (example: "postgres-port") + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` // Display name (example: "PostgreSQL listening") + Description *string `protobuf:"bytes,3,opt,name=description,proto3,oneof" json:"description,omitempty"` // Description of what it checks (example: "TCP probe against the assigned port") + Severity string `protobuf:"bytes,4,opt,name=severity,proto3" json:"severity,omitempty"` // Severity: critical, warning, info (example: "critical") + Type string `protobuf:"bytes,5,opt,name=type,proto3" json:"type,omitempty"` // Check type: script, http, tcp, nix (example: "tcp") unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -962,9 +964,9 @@ func (x *ModuleOutputHealthcheck) GetType() string { // A package added by a module type ModuleOutputPackage struct { state protoimpl.MessageState `protogen:"open.v1"` - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Package name - Version *string `protobuf:"bytes,2,opt,name=version,proto3,oneof" json:"version,omitempty"` // Package version - Description *string `protobuf:"bytes,3,opt,name=description,proto3,oneof" json:"description,omitempty"` // Package description + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Package name (example: "postgresql_16") + Version *string `protobuf:"bytes,2,opt,name=version,proto3,oneof" json:"version,omitempty"` // Package version (example: "16.4") + Description *string `protobuf:"bytes,3,opt,name=description,proto3,oneof" json:"description,omitempty"` // Package description (example: "PostgreSQL 16 server and client") unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -1023,8 +1025,8 @@ func (x *ModuleOutputPackage) GetDescription() string { // A script provided by a module type ModuleOutputScript struct { state protoimpl.MessageState `protogen:"open.v1"` - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Script name (command) - Description *string `protobuf:"bytes,2,opt,name=description,proto3,oneof" json:"description,omitempty"` // Description of what the script does + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Script name (command) (example: "pg-reset") + Description *string `protobuf:"bytes,2,opt,name=description,proto3,oneof" json:"description,omitempty"` // Description of what the script does (example: "Drop and recreate the development database") unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -1076,7 +1078,7 @@ func (x *ModuleOutputScript) GetDescription() string { // Aggregated outputs of what a module creates type ModuleOutputs struct { state protoimpl.MessageState `protogen:"open.v1"` - ModuleId string `protobuf:"bytes,1,opt,name=module_id,json=moduleId,proto3" json:"module_id,omitempty"` // Module identifier + ModuleId string `protobuf:"bytes,1,opt,name=module_id,json=moduleId,proto3" json:"module_id,omitempty"` // Module identifier (example: "postgres") Files []*ModuleOutputFile `protobuf:"bytes,2,rep,name=files,proto3" json:"files,omitempty"` // Generated files Scripts []*ModuleOutputScript `protobuf:"bytes,3,rep,name=scripts,proto3" json:"scripts,omitempty"` // Provided scripts Healthchecks []*ModuleOutputHealthcheck `protobuf:"bytes,4,rep,name=healthchecks,proto3" json:"healthchecks,omitempty"` // Health checks @@ -1153,11 +1155,11 @@ func (x *ModuleOutputs) GetPackages() []*ModuleOutputPackage { // A UI panel provided by a module type ModulePanel struct { state protoimpl.MessageState `protogen:"open.v1"` - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // Unique panel identifier - Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` // Display title - Description *string `protobuf:"bytes,3,opt,name=description,proto3,oneof" json:"description,omitempty"` // Panel description + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // Unique panel identifier (example: "postgres-status") + Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` // Display title (example: "Postgres") + Description *string `protobuf:"bytes,3,opt,name=description,proto3,oneof" json:"description,omitempty"` // Panel description (example: "Process status, port, and connection string") Type ModulePanelType `protobuf:"varint,4,opt,name=type,proto3,enum=stackpanel.db.ModulePanelType" json:"type,omitempty"` // Panel type (determines component) - Order int32 `protobuf:"varint,5,opt,name=order,proto3" json:"order,omitempty"` // Display order (lower = first) + Order int32 `protobuf:"varint,5,opt,name=order,proto3" json:"order,omitempty"` // Display order (lower = first) (example: 20) Fields []*ModulePanelField `protobuf:"bytes,6,rep,name=fields,proto3" json:"fields,omitempty"` // Panel configuration fields unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -1238,10 +1240,10 @@ func (x *ModulePanel) GetFields() []*ModulePanelField { // A field in a module panel type ModulePanelField struct { state protoimpl.MessageState `protogen:"open.v1"` - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Field name (maps to component prop) + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Field name (maps to component prop) (example: "version") Type ModuleFieldType `protobuf:"varint,2,opt,name=type,proto3,enum=stackpanel.db.ModuleFieldType" json:"type,omitempty"` // Field type - Value string `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` // Field value (JSON-encoded for complex types) - Options []string `protobuf:"bytes,4,rep,name=options,proto3" json:"options,omitempty"` // Options for select fields + Value string `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` // Field value (JSON-encoded for complex types) (example: "16") + Options []string `protobuf:"bytes,4,rep,name=options,proto3" json:"options,omitempty"` // Options for select fields (example: "16") unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -1308,8 +1310,8 @@ func (x *ModulePanelField) GetOptions() []string { type ModuleResponse struct { state protoimpl.MessageState `protogen:"open.v1"` Module *Module `protobuf:"bytes,1,opt,name=module,proto3" json:"module,omitempty"` // The module - Success bool `protobuf:"varint,2,opt,name=success,proto3" json:"success,omitempty"` // Whether the operation succeeded - Message *string `protobuf:"bytes,3,opt,name=message,proto3,oneof" json:"message,omitempty"` // Status message + Success bool `protobuf:"varint,2,opt,name=success,proto3" json:"success,omitempty"` // Whether the operation succeeded (example: true) + Message *string `protobuf:"bytes,3,opt,name=message,proto3,oneof" json:"message,omitempty"` // Status message (example: "Module enabled") unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -1369,10 +1371,10 @@ func (x *ModuleResponse) GetMessage() string { type ModuleSource struct { state protoimpl.MessageState `protogen:"open.v1"` Type ModuleSourceType `protobuf:"varint,1,opt,name=type,proto3,enum=stackpanel.db.ModuleSourceType" json:"type,omitempty"` // Source type - FlakeInput *string `protobuf:"bytes,2,opt,name=flake_input,json=flakeInput,proto3,oneof" json:"flake_input,omitempty"` // Flake input name (for flake-input type) - Path *string `protobuf:"bytes,3,opt,name=path,proto3,oneof" json:"path,omitempty"` // Local path (for local type) - RegistryId *string `protobuf:"bytes,4,opt,name=registry_id,json=registryId,proto3,oneof" json:"registry_id,omitempty"` // Registry ID (e.g., 'stackpanel/docker') - Ref *string `protobuf:"bytes,5,opt,name=ref,proto3,oneof" json:"ref,omitempty"` // Git ref (branch, tag, commit) + FlakeInput *string `protobuf:"bytes,2,opt,name=flake_input,json=flakeInput,proto3,oneof" json:"flake_input,omitempty"` // Flake input name (for flake-input type) (example: "stackpanel-postgres") + Path *string `protobuf:"bytes,3,opt,name=path,proto3,oneof" json:"path,omitempty"` // Local path (for local type) (example: "./modules/postgres") + RegistryId *string `protobuf:"bytes,4,opt,name=registry_id,json=registryId,proto3,oneof" json:"registry_id,omitempty"` // Registry ID (e.g., 'stackpanel/docker') (example: "stackpanel/postgres") + Ref *string `protobuf:"bytes,5,opt,name=ref,proto3,oneof" json:"ref,omitempty"` // Git ref (branch, tag, commit) (example: "main") unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -1490,7 +1492,7 @@ func (x *Modules) GetModules() map[string]*Module { // Request to update module settings type UpdateModuleSettingsRequest struct { state protoimpl.MessageState `protogen:"open.v1"` - ModuleId string `protobuf:"bytes,1,opt,name=module_id,json=moduleId,proto3" json:"module_id,omitempty"` // Module identifier + ModuleId string `protobuf:"bytes,1,opt,name=module_id,json=moduleId,proto3" json:"module_id,omitempty"` // Module identifier (example: "postgres") Settings map[string]string `protobuf:"bytes,2,rep,name=settings,proto3" json:"settings,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // New settings unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache diff --git a/packages/proto/gen/gopb/onboarding.pb.go b/packages/proto/gen/gopb/onboarding.pb.go index 952212ac..d866e9c6 100644 --- a/packages/proto/gen/gopb/onboarding.pb.go +++ b/packages/proto/gen/gopb/onboarding.pb.go @@ -83,10 +83,10 @@ func (StepType) EnumDescriptor() ([]byte, []int) { // Onboarding category configuration type Category struct { state protoimpl.MessageState `protogen:"open.v1"` - Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"` // Display title for the category - Description *string `protobuf:"bytes,2,opt,name=description,proto3,oneof" json:"description,omitempty"` // Description of what this category covers - Order int32 `protobuf:"varint,3,opt,name=order,proto3" json:"order,omitempty"` // Order in which this category appears - Icon *string `protobuf:"bytes,4,opt,name=icon,proto3,oneof" json:"icon,omitempty"` // Icon for the category (emoji or Nerd Font icon) + Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"` // Display title for the category (example: "Local services") + Description *string `protobuf:"bytes,2,opt,name=description,proto3,oneof" json:"description,omitempty"` // Description of what this category covers (example: "Configure databases and background services") + Order int32 `protobuf:"varint,3,opt,name=order,proto3" json:"order,omitempty"` // Order in which this category appears (example: 10) + Icon *string `protobuf:"bytes,4,opt,name=icon,proto3,oneof" json:"icon,omitempty"` // Icon for the category (emoji or Nerd Font icon) (example: "database") unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -152,14 +152,14 @@ func (x *Category) GetIcon() string { // Onboarding configuration for new team members type Onboarding struct { state protoimpl.MessageState `protogen:"open.v1"` - Enable bool `protobuf:"varint,1,opt,name=enable,proto3" json:"enable,omitempty"` // Enable onboarding system - WelcomeMessage string `protobuf:"bytes,2,opt,name=welcome_message,json=welcomeMessage,proto3" json:"welcome_message,omitempty"` // Welcome message shown to new team members - CompletionMessage string `protobuf:"bytes,3,opt,name=completion_message,json=completionMessage,proto3" json:"completion_message,omitempty"` // Message shown when onboarding is complete + Enable bool `protobuf:"varint,1,opt,name=enable,proto3" json:"enable,omitempty"` // Enable onboarding system (example: true) + WelcomeMessage string `protobuf:"bytes,2,opt,name=welcome_message,json=welcomeMessage,proto3" json:"welcome_message,omitempty"` // Welcome message shown to new team members (example: "Welcome to Stackpanel — let's get you set up.") + CompletionMessage string `protobuf:"bytes,3,opt,name=completion_message,json=completionMessage,proto3" json:"completion_message,omitempty"` // Message shown when onboarding is complete (example: "All set! Run `dev` to start your services.") Categories map[string]*Category `protobuf:"bytes,4,rep,name=categories,proto3" json:"categories,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // Categories for organizing onboarding steps Steps map[string]*Step `protobuf:"bytes,5,rep,name=steps,proto3" json:"steps,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // Onboarding steps - AutoRun bool `protobuf:"varint,6,opt,name=auto_run,json=autoRun,proto3" json:"auto_run,omitempty"` // Automatically run onboarding on first shell entry - PersistState bool `protobuf:"varint,7,opt,name=persist_state,json=persistState,proto3" json:"persist_state,omitempty"` // Persist completed steps across shell sessions - StateFile string `protobuf:"bytes,8,opt,name=state_file,json=stateFile,proto3" json:"state_file,omitempty"` // Path to store onboarding state + AutoRun bool `protobuf:"varint,6,opt,name=auto_run,json=autoRun,proto3" json:"auto_run,omitempty"` // Automatically run onboarding on first shell entry (example: true) + PersistState bool `protobuf:"varint,7,opt,name=persist_state,json=persistState,proto3" json:"persist_state,omitempty"` // Persist completed steps across shell sessions (example: true) + StateFile string `protobuf:"bytes,8,opt,name=state_file,json=stateFile,proto3" json:"state_file,omitempty"` // Path to store onboarding state (example: ".stack/state/onboarding.json") unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -253,19 +253,19 @@ func (x *Onboarding) GetStateFile() string { // Onboarding step configuration type Step struct { state protoimpl.MessageState `protogen:"open.v1"` - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // Unique identifier for this step - Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` // Display title for the step - Description *string `protobuf:"bytes,3,opt,name=description,proto3,oneof" json:"description,omitempty"` // Detailed description of what this step accomplishes + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // Unique identifier for this step (example: "install-deps") + Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` // Display title for the step (example: "Install dependencies") + Description *string `protobuf:"bytes,3,opt,name=description,proto3,oneof" json:"description,omitempty"` // Detailed description of what this step accomplishes (example: "Run `bun install` from the repo root") Type StepType `protobuf:"varint,4,opt,name=type,proto3,enum=stackpanel.db.StepType" json:"type,omitempty"` // Type of onboarding step - Command *string `protobuf:"bytes,5,opt,name=command,proto3,oneof" json:"command,omitempty"` // Command to run (for 'command' type steps) - CheckCommand *string `protobuf:"bytes,6,opt,name=check_command,json=checkCommand,proto3,oneof" json:"check_command,omitempty"` // Command to verify step completion (exit 0 = complete) - Url *string `protobuf:"bytes,7,opt,name=url,proto3,oneof" json:"url,omitempty"` // URL to open (for 'link' type steps) - Required bool `protobuf:"varint,8,opt,name=required,proto3" json:"required,omitempty"` // Whether this step is required - Order int32 `protobuf:"varint,9,opt,name=order,proto3" json:"order,omitempty"` // Order in which this step should be presented - Category string `protobuf:"bytes,10,opt,name=category,proto3" json:"category,omitempty"` // Category/group for organizing steps - DependsOn []string `protobuf:"bytes,11,rep,name=depends_on,json=dependsOn,proto3" json:"depends_on,omitempty"` // List of step IDs that must be completed before this step - Env []string `protobuf:"bytes,12,rep,name=env,proto3" json:"env,omitempty"` // Environments where this step applies - SkipIf *string `protobuf:"bytes,13,opt,name=skip_if,json=skipIf,proto3,oneof" json:"skip_if,omitempty"` // Condition command - skip step if exits 0 + Command *string `protobuf:"bytes,5,opt,name=command,proto3,oneof" json:"command,omitempty"` // Command to run (for 'command' type steps) (example: "bun install") + CheckCommand *string `protobuf:"bytes,6,opt,name=check_command,json=checkCommand,proto3,oneof" json:"check_command,omitempty"` // Command to verify step completion (exit 0 = complete) (example: "test -d node_modules") + Url *string `protobuf:"bytes,7,opt,name=url,proto3,oneof" json:"url,omitempty"` // URL to open (for 'link' type steps) (example: "https://stackpanel.dev/docs/getting-started") + Required bool `protobuf:"varint,8,opt,name=required,proto3" json:"required,omitempty"` // Whether this step is required (example: true) + Order int32 `protobuf:"varint,9,opt,name=order,proto3" json:"order,omitempty"` // Order in which this step should be presented (example: 10) + Category string `protobuf:"bytes,10,opt,name=category,proto3" json:"category,omitempty"` // Category/group for organizing steps (example: "setup") + DependsOn []string `protobuf:"bytes,11,rep,name=depends_on,json=dependsOn,proto3" json:"depends_on,omitempty"` // List of step IDs that must be completed before this step (example: "install-deps") + Env []string `protobuf:"bytes,12,rep,name=env,proto3" json:"env,omitempty"` // Environments where this step applies (example: "dev") + SkipIf *string `protobuf:"bytes,13,opt,name=skip_if,json=skipIf,proto3,oneof" json:"skip_if,omitempty"` // Condition command - skip step if exits 0 (example: "test -f node_modules/.installed") unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } diff --git a/packages/proto/gen/gopb/oxlint_app.pb.go b/packages/proto/gen/gopb/oxlint_app.pb.go index 2dfd9d76..e1d86bf9 100644 --- a/packages/proto/gen/gopb/oxlint_app.pb.go +++ b/packages/proto/gen/gopb/oxlint_app.pb.go @@ -25,10 +25,10 @@ const ( type OxlintAppConfig struct { state protoimpl.MessageState `protogen:"open.v1"` Enable bool `protobuf:"varint,1,opt,name=enable,proto3" json:"enable,omitempty"` // Enable OxLint for JavaScript/TypeScript linting - ConfigPath *string `protobuf:"bytes,2,opt,name=config_path,json=configPath,proto3,oneof" json:"config_path,omitempty"` // Path to oxlint config file relative to app root - Plugins []string `protobuf:"bytes,3,rep,name=plugins,proto3" json:"plugins,omitempty"` // OxLint plugins to enable + ConfigPath *string `protobuf:"bytes,2,opt,name=config_path,json=configPath,proto3,oneof" json:"config_path,omitempty"` // Path to oxlint config file relative to app root (example: "oxlint.json") + Plugins []string `protobuf:"bytes,3,rep,name=plugins,proto3" json:"plugins,omitempty"` // OxLint plugins to enable (example: ["react", "typescript", "import", "jsx-a11y"]) Categories map[string]string `protobuf:"bytes,4,rep,name=categories,proto3" json:"categories,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // Rule category severity levels - Rules map[string]string `protobuf:"bytes,5,rep,name=rules,proto3" json:"rules,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // Individual rule overrides. Values: off, warn, error + Rules map[string]string `protobuf:"bytes,5,rep,name=rules,proto3" json:"rules,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // Individual rule overrides. Values: off, warn, error (example: {"eqeqeq":"error","no-console":"warn","no-debugger":"error"}) IgnorePatterns []string `protobuf:"bytes,6,rep,name=ignore_patterns,json=ignorePatterns,proto3" json:"ignore_patterns,omitempty"` // Glob patterns to ignore Paths []string `protobuf:"bytes,7,rep,name=paths,proto3" json:"paths,omitempty"` // Paths to lint (relative to app root) Fix bool `protobuf:"varint,8,opt,name=fix,proto3" json:"fix,omitempty"` // Whether to automatically fix fixable issues by default diff --git a/packages/proto/gen/gopb/scripts.pb.go b/packages/proto/gen/gopb/scripts.pb.go index 893d4a8f..4a85864e 100644 --- a/packages/proto/gen/gopb/scripts.pb.go +++ b/packages/proto/gen/gopb/scripts.pb.go @@ -32,13 +32,13 @@ const ( // `db-seed`, `format`, or `generate-types`. type Script struct { state protoimpl.MessageState `protogen:"open.v1"` - Exec *string `protobuf:"bytes,1,opt,name=exec,proto3,oneof" json:"exec,omitempty"` // Shell command to execute (mutually exclusive with path) - Description *string `protobuf:"bytes,2,opt,name=description,proto3,oneof" json:"description,omitempty"` // Human-readable description of the script + Exec *string `protobuf:"bytes,1,opt,name=exec,proto3,oneof" json:"exec,omitempty"` // Shell command to execute (mutually exclusive with path) (example: "bun run dev") + Description *string `protobuf:"bytes,2,opt,name=description,proto3,oneof" json:"description,omitempty"` // Human-readable description of the script (example: "Start the API server") Env map[string]string `protobuf:"bytes,3,rep,name=env,proto3" json:"env,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // Environment variables to set when running the script - BinPath *string `protobuf:"bytes,4,opt,name=bin_path,json=binPath,proto3,oneof" json:"bin_path,omitempty"` // Path to script executable in Nix store (computed) - Source *string `protobuf:"bytes,5,opt,name=source,proto3,oneof" json:"source,omitempty"` // Source type: inline or path (for debugging) + BinPath *string `protobuf:"bytes,4,opt,name=bin_path,json=binPath,proto3,oneof" json:"bin_path,omitempty"` // Path to script executable in Nix store (computed) (example: "/nix/store/abc123-scripts/bin/db-seed") + Source *string `protobuf:"bytes,5,opt,name=source,proto3,oneof" json:"source,omitempty"` // Source type: inline or path (for debugging) (example: "inline") Args []*ScriptArg `protobuf:"bytes,6,rep,name=args,proto3" json:"args,omitempty"` // Documented arguments for this script - Timeout *int32 `protobuf:"varint,7,opt,name=timeout,proto3,oneof" json:"timeout,omitempty"` // Maximum execution time in seconds (0 = no timeout, default: 300) + Timeout *int32 `protobuf:"varint,7,opt,name=timeout,proto3,oneof" json:"timeout,omitempty"` // Maximum execution time in seconds (0 = no timeout, default: 300) (example: 300) unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -129,10 +129,10 @@ func (x *Script) GetTimeout() int32 { // is responsible for parsing these arguments. type ScriptArg struct { state protoimpl.MessageState `protogen:"open.v1"` - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Argument name (e.g., 'file', '--output', '-v') - Description *string `protobuf:"bytes,2,opt,name=description,proto3,oneof" json:"description,omitempty"` // Human-readable description of the argument - Required *bool `protobuf:"varint,3,opt,name=required,proto3,oneof" json:"required,omitempty"` // Whether the argument is required (default: false) - Default *string `protobuf:"bytes,4,opt,name=default,proto3,oneof" json:"default,omitempty"` // Default value if not provided + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Argument name (e.g., 'file', '--output', '-v') (example: "--dry-run") + Description *string `protobuf:"bytes,2,opt,name=description,proto3,oneof" json:"description,omitempty"` // Human-readable description of the argument (example: "Preview changes without applying") + Required *bool `protobuf:"varint,3,opt,name=required,proto3,oneof" json:"required,omitempty"` // Whether the argument is required (default: false) (example: false) + Default *string `protobuf:"bytes,4,opt,name=default,proto3,oneof" json:"default,omitempty"` // Default value if not provided (example: "production") unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -243,7 +243,7 @@ func (x *Scripts) GetScripts() map[string]*Script { // Configuration for scripts package generation type ScriptsConfig struct { state protoimpl.MessageState `protogen:"open.v1"` - Enable bool `protobuf:"varint,1,opt,name=enable,proto3" json:"enable,omitempty"` // Whether to add the scripts package to the devshell + Enable bool `protobuf:"varint,1,opt,name=enable,proto3" json:"enable,omitempty"` // Whether to add the scripts package to the devshell (example: true) unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } diff --git a/packages/proto/gen/gopb/secrets.pb.go b/packages/proto/gen/gopb/secrets.pb.go index 67947f57..e6343ce0 100644 --- a/packages/proto/gen/gopb/secrets.pb.go +++ b/packages/proto/gen/gopb/secrets.pb.go @@ -24,10 +24,12 @@ const ( // Code generation target for secrets/env access type CodegenTarget struct { state protoimpl.MessageState `protogen:"open.v1"` - Name *string `protobuf:"bytes,1,opt,name=name,proto3,oneof" json:"name,omitempty"` // Name of the generated package/module (defaults to the target key) - Directory *string `protobuf:"bytes,2,opt,name=directory,proto3,oneof" json:"directory,omitempty"` // Output directory for generated code (repo-relative) + Name *string `protobuf:"bytes,1,opt,name=name,proto3,oneof" json:"name,omitempty"` // Name of the generated package/module (defaults to the target key) (example: "env") + Directory *string `protobuf:"bytes,2,opt,name=directory,proto3,oneof" json:"directory,omitempty"` // Output directory for generated code (repo-relative) (example: "packages/gen/env/src") // Target language for generated code (e.g., "typescript", "go", "python"). // Informational only for now; codegen selection is based on the target key. + // + // (example: "typescript") Language *string `protobuf:"bytes,3,opt,name=language,proto3,oneof" json:"language,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -87,12 +89,16 @@ func (x *CodegenTarget) GetLanguage() string { // Environment-specific secrets configuration type Environment struct { state protoimpl.MessageState `protogen:"open.v1"` - Name *string `protobuf:"bytes,1,opt,name=name,proto3,oneof" json:"name,omitempty"` // Name of the environment (e.g., dev, staging, production) + Name *string `protobuf:"bytes,1,opt,name=name,proto3,oneof" json:"name,omitempty"` // Name of the environment (e.g., dev, staging, production) (example: "dev") // List of SOPS-encrypted source files for this environment (without .yaml extension). // These files are decrypted and merged to provide secrets for the environment. + // + // (example: "shared") Sources []string `protobuf:"bytes,2,rep,name=sources,proto3" json:"sources,omitempty"` // AGE public keys that can decrypt secrets for this environment. // New secrets for this env are encrypted to these recipients. + // + // (example: "age1abc1234abc1234abc1234abc1234abc1234abc1234abc1234abc1") PublicKeys []string `protobuf:"bytes,3,rep,name=public_keys,json=publicKeys,proto3" json:"public_keys,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -154,16 +160,21 @@ type MasterKey struct { state protoimpl.MessageState `protogen:"open.v1"` // AGE public key for encrypting secrets to this key. // Format: age1... (bech32-encoded) + // + // (example: "age1abc1234abc1234abc1234abc1234abc1234abc1234abc1234abc1") AgePub string `protobuf:"bytes,1,opt,name=age_pub,json=agePub,proto3" json:"age_pub,omitempty"` // Vals reference that resolves to the AGE private key. // Examples: // - ref+file://.stack/keys/local.txt (local file) // - ref+awsssm://stackpanel/keys/dev (AWS SSM Parameter Store) // - ref+vault://secret/data/stackpanel/prod#key (HashiCorp Vault) + // (example: "ref+file://.stack/keys/local.txt") Ref string `protobuf:"bytes,2,opt,name=ref,proto3" json:"ref,omitempty"` // Custom command to resolve the private key (overrides ref). // The command should output the AGE private key to stdout. // Example: op read 'op://vault/stackpanel/age-key' + // + // (example: "op read 'op://vault/stackpanel/age-key'") ResolveCmd *string `protobuf:"bytes,3,opt,name=resolve_cmd,json=resolveCmd,proto3,oneof" json:"resolve_cmd,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -223,17 +234,21 @@ func (x *MasterKey) GetResolveCmd() string { // Secrets management configuration type Secrets struct { state protoimpl.MessageState `protogen:"open.v1"` - Enable bool `protobuf:"varint,1,opt,name=enable,proto3" json:"enable,omitempty"` // Enable secrets management + Enable bool `protobuf:"varint,1,opt,name=enable,proto3" json:"enable,omitempty"` // Enable secrets management (example: true) // Master keys for encrypting/decrypting secrets. // Each secret specifies which master keys can decrypt it via the master-keys field. // A default "local" key is auto-generated if no keys are configured. MasterKeys map[string]*MasterKey `protobuf:"bytes,2,rep,name=master_keys,json=masterKeys,proto3" json:"master_keys,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // Directory containing SOPS-encrypted secrets (legacy SOPS layout). // Used when decrypting/merging YAML sources defined under environments. + // + // (example: ".stack/secrets") InputDirectory *string `protobuf:"bytes,3,opt,name=input_directory,json=inputDirectory,proto3,oneof" json:"input_directory,omitempty"` - SecretsDir *string `protobuf:"bytes,4,opt,name=secrets_dir,json=secretsDir,proto3,oneof" json:"secrets_dir,omitempty"` // Directory where secret .age files are stored (default: .stack/secrets) + SecretsDir *string `protobuf:"bytes,4,opt,name=secrets_dir,json=secretsDir,proto3,oneof" json:"secrets_dir,omitempty"` // Directory where secret .age files are stored (default: .stack/secrets) (example: ".stack/secrets") // System-level AGE public keys (CI, deploy servers, etc.). // These keys can decrypt all secrets regardless of environment restrictions. + // + // (example: "age1ci1234ci1234ci1234ci1234ci1234ci1234ci1234ci1234ci1") SystemKeys []string `protobuf:"bytes,5,rep,name=system_keys,json=systemKeys,proto3" json:"system_keys,omitempty"` // Legacy environment-specific secrets configuration. Environments map[string]*Environment `protobuf:"bytes,6,rep,name=environments,proto3" json:"environments,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` diff --git a/packages/proto/gen/gopb/services.pb.go b/packages/proto/gen/gopb/services.pb.go index ca2084d0..0e9fdaf4 100644 --- a/packages/proto/gen/gopb/services.pb.go +++ b/packages/proto/gen/gopb/services.pb.go @@ -24,7 +24,7 @@ const ( // Caddy reverse proxy configuration type Caddy struct { state protoimpl.MessageState `protogen:"open.v1"` - Enable bool `protobuf:"varint,1,opt,name=enable,proto3" json:"enable,omitempty"` // Enable Caddy reverse proxy + Enable bool `protobuf:"varint,1,opt,name=enable,proto3" json:"enable,omitempty"` // Enable Caddy reverse proxy (example: true) Sites map[string]*CaddySite `protobuf:"bytes,2,rep,name=sites,proto3" json:"sites,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // Sites to register with Caddy (domain -> config) unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -77,8 +77,8 @@ func (x *Caddy) GetSites() map[string]*CaddySite { // Caddy site configuration type CaddySite struct { state protoimpl.MessageState `protogen:"open.v1"` - Upstream string `protobuf:"bytes,1,opt,name=upstream,proto3" json:"upstream,omitempty"` // Upstream address (e.g., 'localhost:3000') - Tls bool `protobuf:"varint,2,opt,name=tls,proto3" json:"tls,omitempty"` // Enable TLS for this site + Upstream string `protobuf:"bytes,1,opt,name=upstream,proto3" json:"upstream,omitempty"` // Upstream address (e.g., 'localhost:3000') (example: "localhost:6402") + Tls bool `protobuf:"varint,2,opt,name=tls,proto3" json:"tls,omitempty"` // Enable TLS for this site (example: false) unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -130,10 +130,10 @@ func (x *CaddySite) GetTls() bool { // Minio S3-compatible service configuration type Minio struct { state protoimpl.MessageState `protogen:"open.v1"` - Enable bool `protobuf:"varint,1,opt,name=enable,proto3" json:"enable,omitempty"` // Enable Minio (S3-compatible) service - Port *int32 `protobuf:"varint,2,opt,name=port,proto3,oneof" json:"port,omitempty"` // Minio API port. If not set, uses computed port from stackpanel.ports - ConsolePort *int32 `protobuf:"varint,3,opt,name=console_port,json=consolePort,proto3,oneof" json:"console_port,omitempty"` // Minio console port. If not set, uses computed port from stackpanel.ports - Buckets []string `protobuf:"bytes,4,rep,name=buckets,proto3" json:"buckets,omitempty"` // Buckets to create on startup + Enable bool `protobuf:"varint,1,opt,name=enable,proto3" json:"enable,omitempty"` // Enable Minio (S3-compatible) service (example: true) + Port *int32 `protobuf:"varint,2,opt,name=port,proto3,oneof" json:"port,omitempty"` // Minio API port. If not set, uses computed port from stackpanel.ports (example: 6412) + ConsolePort *int32 `protobuf:"varint,3,opt,name=console_port,json=consolePort,proto3,oneof" json:"console_port,omitempty"` // Minio console port. If not set, uses computed port from stackpanel.ports (example: 6413) + Buckets []string `protobuf:"bytes,4,rep,name=buckets,proto3" json:"buckets,omitempty"` // Buckets to create on startup (example: "uploads") unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -199,11 +199,11 @@ func (x *Minio) GetBuckets() []string { // PostgreSQL service configuration type Postgres struct { state protoimpl.MessageState `protogen:"open.v1"` - Enable bool `protobuf:"varint,1,opt,name=enable,proto3" json:"enable,omitempty"` // Enable PostgreSQL service - Databases []string `protobuf:"bytes,2,rep,name=databases,proto3" json:"databases,omitempty"` // List of databases to create for this project - Port *int32 `protobuf:"varint,3,opt,name=port,proto3,oneof" json:"port,omitempty"` // PostgreSQL port. If not set, uses computed port from stackpanel.ports - Version string `protobuf:"bytes,4,opt,name=version,proto3" json:"version,omitempty"` // PostgreSQL version (e.g., '15', '16', '17') - Extensions []string `protobuf:"bytes,5,rep,name=extensions,proto3" json:"extensions,omitempty"` // PostgreSQL extensions to enable + Enable bool `protobuf:"varint,1,opt,name=enable,proto3" json:"enable,omitempty"` // Enable PostgreSQL service (example: true) + Databases []string `protobuf:"bytes,2,rep,name=databases,proto3" json:"databases,omitempty"` // List of databases to create for this project (example: "stackpanel") + Port *int32 `protobuf:"varint,3,opt,name=port,proto3,oneof" json:"port,omitempty"` // PostgreSQL port. If not set, uses computed port from stackpanel.ports (example: 6410) + Version string `protobuf:"bytes,4,opt,name=version,proto3" json:"version,omitempty"` // PostgreSQL version (e.g., '15', '16', '17') (example: "16") + Extensions []string `protobuf:"bytes,5,rep,name=extensions,proto3" json:"extensions,omitempty"` // PostgreSQL extensions to enable (example: "pgvector") unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -276,10 +276,10 @@ func (x *Postgres) GetExtensions() []string { // Redis service configuration type Redis struct { state protoimpl.MessageState `protogen:"open.v1"` - Enable bool `protobuf:"varint,1,opt,name=enable,proto3" json:"enable,omitempty"` // Enable Redis service - Port *int32 `protobuf:"varint,2,opt,name=port,proto3,oneof" json:"port,omitempty"` // Redis port. If not set, uses computed port from stackpanel.ports - Maxmemory string `protobuf:"bytes,3,opt,name=maxmemory,proto3" json:"maxmemory,omitempty"` // Maximum memory limit for Redis - MaxmemoryPolicy string `protobuf:"bytes,4,opt,name=maxmemory_policy,json=maxmemoryPolicy,proto3" json:"maxmemory_policy,omitempty"` // Eviction policy when maxmemory is reached + Enable bool `protobuf:"varint,1,opt,name=enable,proto3" json:"enable,omitempty"` // Enable Redis service (example: true) + Port *int32 `protobuf:"varint,2,opt,name=port,proto3,oneof" json:"port,omitempty"` // Redis port. If not set, uses computed port from stackpanel.ports (example: 6411) + Maxmemory string `protobuf:"bytes,3,opt,name=maxmemory,proto3" json:"maxmemory,omitempty"` // Maximum memory limit for Redis (example: "256mb") + MaxmemoryPolicy string `protobuf:"bytes,4,opt,name=maxmemory_policy,json=maxmemoryPolicy,proto3" json:"maxmemory_policy,omitempty"` // Eviction policy when maxmemory is reached (example: "allkeys-lru") unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -345,7 +345,7 @@ func (x *Redis) GetMaxmemoryPolicy() string { // Global development services configuration type Services struct { state protoimpl.MessageState `protogen:"open.v1"` - ProjectName string `protobuf:"bytes,1,opt,name=project_name,json=projectName,proto3" json:"project_name,omitempty"` // Project name for database/site registration + ProjectName string `protobuf:"bytes,1,opt,name=project_name,json=projectName,proto3" json:"project_name,omitempty"` // Project name for database/site registration (example: "stackpanel-demo") Postgres *Postgres `protobuf:"bytes,2,opt,name=postgres,proto3" json:"postgres,omitempty"` // PostgreSQL service configuration Redis *Redis `protobuf:"bytes,3,opt,name=redis,proto3" json:"redis,omitempty"` // Redis service configuration Minio *Minio `protobuf:"bytes,4,opt,name=minio,proto3" json:"minio,omitempty"` // Minio S3-compatible service configuration diff --git a/packages/proto/gen/gopb/shells.pb.go b/packages/proto/gen/gopb/shells.pb.go index 9e996316..6f559b67 100644 --- a/packages/proto/gen/gopb/shells.pb.go +++ b/packages/proto/gen/gopb/shells.pb.go @@ -80,8 +80,8 @@ func (ShellType) EnumDescriptor() ([]byte, []int) { // Shell alias configuration type Alias struct { state protoimpl.MessageState `protogen:"open.v1"` - Command string `protobuf:"bytes,1,opt,name=command,proto3" json:"command,omitempty"` // Command to alias to - Description *string `protobuf:"bytes,2,opt,name=description,proto3,oneof" json:"description,omitempty"` // Description of the alias + Command string `protobuf:"bytes,1,opt,name=command,proto3" json:"command,omitempty"` // Command to alias to (example: "git status") + Description *string `protobuf:"bytes,2,opt,name=description,proto3,oneof" json:"description,omitempty"` // Description of the alias (example: "Show working tree status") unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -133,9 +133,9 @@ func (x *Alias) GetDescription() string { // Environment variable configuration type EnvVar struct { state protoimpl.MessageState `protogen:"open.v1"` - Value string `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` // Environment variable value - Secret bool `protobuf:"varint,2,opt,name=secret,proto3" json:"secret,omitempty"` // Whether this value should be treated as a secret - Description *string `protobuf:"bytes,3,opt,name=description,proto3,oneof" json:"description,omitempty"` // Description of what this variable is for + Value string `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` // Environment variable value (example: "development") + Secret bool `protobuf:"varint,2,opt,name=secret,proto3" json:"secret,omitempty"` // Whether this value should be treated as a secret (example: false) + Description *string `protobuf:"bytes,3,opt,name=description,proto3,oneof" json:"description,omitempty"` // Description of what this variable is for (example: "Set by stackpanel for the local devshell") unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -194,10 +194,10 @@ func (x *EnvVar) GetDescription() string { // Shell hook configuration type Hook struct { state protoimpl.MessageState `protogen:"open.v1"` - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Hook name/identifier - Script string `protobuf:"bytes,2,opt,name=script,proto3" json:"script,omitempty"` // Shell script to execute - Order int32 `protobuf:"varint,3,opt,name=order,proto3" json:"order,omitempty"` // Execution order (lower runs first) - Enabled bool `protobuf:"varint,4,opt,name=enabled,proto3" json:"enabled,omitempty"` // Whether this hook is enabled + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Hook name/identifier (example: "stackpanel-init") + Script string `protobuf:"bytes,2,opt,name=script,proto3" json:"script,omitempty"` // Shell script to execute (example: "stack init --config $STACKPANEL_CONFIG_JSON") + Order int32 `protobuf:"varint,3,opt,name=order,proto3" json:"order,omitempty"` // Execution order (lower runs first) (example: 100) + Enabled bool `protobuf:"varint,4,opt,name=enabled,proto3" json:"enabled,omitempty"` // Whether this hook is enabled (example: true) unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -265,9 +265,9 @@ type Profile struct { state protoimpl.MessageState `protogen:"open.v1"` Env map[string]*EnvVar `protobuf:"bytes,1,rep,name=env,proto3" json:"env,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // Environment variables Aliases map[string]*Alias `protobuf:"bytes,2,rep,name=aliases,proto3" json:"aliases,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // Shell aliases - InitExtra *string `protobuf:"bytes,3,opt,name=init_extra,json=initExtra,proto3,oneof" json:"init_extra,omitempty"` // Extra shell initialization script - HistorySize int32 `protobuf:"varint,4,opt,name=history_size,json=historySize,proto3" json:"history_size,omitempty"` // Number of history entries to keep - HistoryIgnore []string `protobuf:"bytes,5,rep,name=history_ignore,json=historyIgnore,proto3" json:"history_ignore,omitempty"` // Patterns to ignore in history + InitExtra *string `protobuf:"bytes,3,opt,name=init_extra,json=initExtra,proto3,oneof" json:"init_extra,omitempty"` // Extra shell initialization script (example: "source $PROJECT_ROOT/.stack/state/shellhook.sh") + HistorySize int32 `protobuf:"varint,4,opt,name=history_size,json=historySize,proto3" json:"history_size,omitempty"` // Number of history entries to keep (example: 10000) + HistoryIgnore []string `protobuf:"bytes,5,rep,name=history_ignore,json=historyIgnore,proto3" json:"history_ignore,omitempty"` // Patterns to ignore in history (example: "ls") unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -346,8 +346,8 @@ type Shells struct { Zsh *Profile `protobuf:"bytes,4,opt,name=zsh,proto3" json:"zsh,omitempty"` // Zsh-specific settings Fish *Profile `protobuf:"bytes,5,opt,name=fish,proto3" json:"fish,omitempty"` // Fish-specific settings Hooks []*Hook `protobuf:"bytes,6,rep,name=hooks,proto3" json:"hooks,omitempty"` // Shell hooks to run on initialization - PathPrepend []string `protobuf:"bytes,7,rep,name=path_prepend,json=pathPrepend,proto3" json:"path_prepend,omitempty"` // Directories to prepend to PATH - PathAppend []string `protobuf:"bytes,8,rep,name=path_append,json=pathAppend,proto3" json:"path_append,omitempty"` // Directories to append to PATH + PathPrepend []string `protobuf:"bytes,7,rep,name=path_prepend,json=pathPrepend,proto3" json:"path_prepend,omitempty"` // Directories to prepend to PATH (example: "$PROJECT_ROOT/bin") + PathAppend []string `protobuf:"bytes,8,rep,name=path_append,json=pathAppend,proto3" json:"path_append,omitempty"` // Directories to append to PATH (example: "$PROJECT_ROOT/.stack/state/bin") unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } diff --git a/packages/proto/gen/gopb/sst.pb.go b/packages/proto/gen/gopb/sst.pb.go index 60e954e2..c6ac5bb3 100644 --- a/packages/proto/gen/gopb/sst.pb.go +++ b/packages/proto/gen/gopb/sst.pb.go @@ -24,11 +24,11 @@ const ( // SST infrastructure configuration for AWS provisioning type Sst struct { state protoimpl.MessageState `protogen:"open.v1"` - Enable bool `protobuf:"varint,1,opt,name=enable,proto3" json:"enable,omitempty"` // Enable SST infrastructure provisioning - ProjectName string `protobuf:"bytes,2,opt,name=project_name,json=projectName,proto3" json:"project_name,omitempty"` // SST project name - Region string `protobuf:"bytes,3,opt,name=region,proto3" json:"region,omitempty"` // AWS region - AccountId string `protobuf:"bytes,4,opt,name=account_id,json=accountId,proto3" json:"account_id,omitempty"` // AWS account ID - ConfigPath string `protobuf:"bytes,5,opt,name=config_path,json=configPath,proto3" json:"config_path,omitempty"` // Path to generate sst.config.ts + Enable bool `protobuf:"varint,1,opt,name=enable,proto3" json:"enable,omitempty"` // Enable SST infrastructure provisioning (example: true) + ProjectName string `protobuf:"bytes,2,opt,name=project_name,json=projectName,proto3" json:"project_name,omitempty"` // SST project name (example: "stackpanel") + Region string `protobuf:"bytes,3,opt,name=region,proto3" json:"region,omitempty"` // AWS region (example: "us-west-2") + AccountId string `protobuf:"bytes,4,opt,name=account_id,json=accountId,proto3" json:"account_id,omitempty"` // AWS account ID (example: "123456789012") + ConfigPath string `protobuf:"bytes,5,opt,name=config_path,json=configPath,proto3" json:"config_path,omitempty"` // Path to generate sst.config.ts (example: "packages/infra/sst.config.ts") Kms *SstKms `protobuf:"bytes,6,opt,name=kms,proto3" json:"kms,omitempty"` // KMS configuration Oidc *SstOidc `protobuf:"bytes,7,opt,name=oidc,proto3" json:"oidc,omitempty"` // OIDC provider configuration Iam *SstIam `protobuf:"bytes,8,opt,name=iam,proto3" json:"iam,omitempty"` // IAM configuration @@ -125,8 +125,8 @@ func (x *Sst) GetIam() *SstIam { // Fly.io OIDC configuration type SstFlyio struct { state protoimpl.MessageState `protogen:"open.v1"` - OrgId string `protobuf:"bytes,1,opt,name=org_id,json=orgId,proto3" json:"org_id,omitempty"` // Fly.io organization ID - AppName string `protobuf:"bytes,2,opt,name=app_name,json=appName,proto3" json:"app_name,omitempty"` // Fly.io app name (or * for all) + OrgId string `protobuf:"bytes,1,opt,name=org_id,json=orgId,proto3" json:"org_id,omitempty"` // Fly.io organization ID (example: "darkmatter-io") + AppName string `protobuf:"bytes,2,opt,name=app_name,json=appName,proto3" json:"app_name,omitempty"` // Fly.io app name (or * for all) (example: "*") unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -178,8 +178,8 @@ func (x *SstFlyio) GetAppName() string { // GitHub Actions OIDC configuration type SstGithubActions struct { state protoimpl.MessageState `protogen:"open.v1"` - Org string `protobuf:"bytes,1,opt,name=org,proto3" json:"org,omitempty"` // GitHub organization - Repo string `protobuf:"bytes,2,opt,name=repo,proto3" json:"repo,omitempty"` // GitHub repository (or * for all) + Org string `protobuf:"bytes,1,opt,name=org,proto3" json:"org,omitempty"` // GitHub organization (example: "darkmatter") + Repo string `protobuf:"bytes,2,opt,name=repo,proto3" json:"repo,omitempty"` // GitHub repository (or * for all) (example: "stackpanel") unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -231,7 +231,7 @@ func (x *SstGithubActions) GetRepo() string { // IAM role configuration type SstIam struct { state protoimpl.MessageState `protogen:"open.v1"` - RoleName string `protobuf:"bytes,1,opt,name=role_name,json=roleName,proto3" json:"role_name,omitempty"` // IAM role name + RoleName string `protobuf:"bytes,1,opt,name=role_name,json=roleName,proto3" json:"role_name,omitempty"` // IAM role name (example: "stackpanel-secrets-role") unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -276,9 +276,9 @@ func (x *SstIam) GetRoleName() string { // KMS key configuration for secrets encryption type SstKms struct { state protoimpl.MessageState `protogen:"open.v1"` - Enable bool `protobuf:"varint,1,opt,name=enable,proto3" json:"enable,omitempty"` // Create a KMS key for secrets - Alias string `protobuf:"bytes,2,opt,name=alias,proto3" json:"alias,omitempty"` // KMS key alias - DeletionWindowDays int32 `protobuf:"varint,3,opt,name=deletion_window_days,json=deletionWindowDays,proto3" json:"deletion_window_days,omitempty"` // Days before key deletion + Enable bool `protobuf:"varint,1,opt,name=enable,proto3" json:"enable,omitempty"` // Create a KMS key for secrets (example: true) + Alias string `protobuf:"bytes,2,opt,name=alias,proto3" json:"alias,omitempty"` // KMS key alias (example: "stackpanel-secrets") + DeletionWindowDays int32 `protobuf:"varint,3,opt,name=deletion_window_days,json=deletionWindowDays,proto3" json:"deletion_window_days,omitempty"` // Days before key deletion (example: 30) unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -337,7 +337,7 @@ func (x *SstKms) GetDeletionWindowDays() int32 { // OIDC provider configuration for IAM role assumption type SstOidc struct { state protoimpl.MessageState `protogen:"open.v1"` - Provider string `protobuf:"bytes,1,opt,name=provider,proto3" json:"provider,omitempty"` // OIDC provider type (github-actions, flyio, roles-anywhere) + Provider string `protobuf:"bytes,1,opt,name=provider,proto3" json:"provider,omitempty"` // OIDC provider type (github-actions, flyio, roles-anywhere) (example: "github-actions") GithubActions *SstGithubActions `protobuf:"bytes,2,opt,name=github_actions,json=githubActions,proto3" json:"github_actions,omitempty"` // GitHub Actions OIDC settings Flyio *SstFlyio `protobuf:"bytes,3,opt,name=flyio,proto3" json:"flyio,omitempty"` // Fly.io OIDC settings RolesAnywhere *SstRolesAnywhere `protobuf:"bytes,4,opt,name=roles_anywhere,json=rolesAnywhere,proto3" json:"roles_anywhere,omitempty"` // Roles Anywhere settings @@ -406,7 +406,7 @@ func (x *SstOidc) GetRolesAnywhere() *SstRolesAnywhere { // AWS Roles Anywhere configuration type SstRolesAnywhere struct { state protoimpl.MessageState `protogen:"open.v1"` - TrustAnchorArn string `protobuf:"bytes,1,opt,name=trust_anchor_arn,json=trustAnchorArn,proto3" json:"trust_anchor_arn,omitempty"` // Trust anchor ARN + TrustAnchorArn string `protobuf:"bytes,1,opt,name=trust_anchor_arn,json=trustAnchorArn,proto3" json:"trust_anchor_arn,omitempty"` // Trust anchor ARN (example: "arn:aws:rolesanywhere:us-west-2:123456789012:trust-anchor/abcd1234") unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } diff --git a/packages/proto/gen/gopb/step_ca.pb.go b/packages/proto/gen/gopb/step_ca.pb.go index 9eef3b95..00457c45 100644 --- a/packages/proto/gen/gopb/step_ca.pb.go +++ b/packages/proto/gen/gopb/step_ca.pb.go @@ -69,12 +69,12 @@ func (x *StepCa) GetConfig() *StepCaConfig { // Step CA certificate management configuration type StepCaConfig struct { state protoimpl.MessageState `protogen:"open.v1"` - Enable bool `protobuf:"varint,1,opt,name=enable,proto3" json:"enable,omitempty"` // Enable Step CA certificate management - CaUrl string `protobuf:"bytes,2,opt,name=ca_url,json=caUrl,proto3" json:"ca_url,omitempty"` // Step CA server URL (e.g., https://ca.internal:443) - CaFingerprint string `protobuf:"bytes,3,opt,name=ca_fingerprint,json=caFingerprint,proto3" json:"ca_fingerprint,omitempty"` // Step CA root certificate fingerprint for verification - Provisioner string `protobuf:"bytes,4,opt,name=provisioner,proto3" json:"provisioner,omitempty"` // Step CA provisioner name - CertName string `protobuf:"bytes,5,opt,name=cert_name,json=certName,proto3" json:"cert_name,omitempty"` // Common name for the device certificate - PromptOnShell bool `protobuf:"varint,6,opt,name=prompt_on_shell,json=promptOnShell,proto3" json:"prompt_on_shell,omitempty"` // Prompt for certificate setup on shell entry if not configured + Enable bool `protobuf:"varint,1,opt,name=enable,proto3" json:"enable,omitempty"` // Enable Step CA certificate management (example: true) + CaUrl string `protobuf:"bytes,2,opt,name=ca_url,json=caUrl,proto3" json:"ca_url,omitempty"` // Step CA server URL (e.g., https://ca.internal:443) (example: "https://ca.internal:443") + CaFingerprint string `protobuf:"bytes,3,opt,name=ca_fingerprint,json=caFingerprint,proto3" json:"ca_fingerprint,omitempty"` // Step CA root certificate fingerprint for verification (example: "abc123def456abc123def456abc123def456abc123def456abc123def456") + Provisioner string `protobuf:"bytes,4,opt,name=provisioner,proto3" json:"provisioner,omitempty"` // Step CA provisioner name (example: "admin") + CertName string `protobuf:"bytes,5,opt,name=cert_name,json=certName,proto3" json:"cert_name,omitempty"` // Common name for the device certificate (example: "dev-workstation") + PromptOnShell bool `protobuf:"varint,6,opt,name=prompt_on_shell,json=promptOnShell,proto3" json:"prompt_on_shell,omitempty"` // Prompt for certificate setup on shell entry if not configured (example: true) unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } diff --git a/packages/proto/gen/gopb/tasks.pb.go b/packages/proto/gen/gopb/tasks.pb.go index 48308c75..8d87e37a 100644 --- a/packages/proto/gen/gopb/tasks.pb.go +++ b/packages/proto/gen/gopb/tasks.pb.go @@ -29,16 +29,16 @@ const ( // Tasks without `exec` assume the script already exists in package.json. type Task struct { state protoimpl.MessageState `protogen:"open.v1"` - Exec *string `protobuf:"bytes,1,opt,name=exec,proto3,oneof" json:"exec,omitempty"` // Shell script to execute (compiled to Nix derivation) - Description *string `protobuf:"bytes,2,opt,name=description,proto3,oneof" json:"description,omitempty"` // Human-readable description of the task - Cwd *string `protobuf:"bytes,3,opt,name=cwd,proto3,oneof" json:"cwd,omitempty"` // Working directory for the task (relative to repo root) + Exec *string `protobuf:"bytes,1,opt,name=exec,proto3,oneof" json:"exec,omitempty"` // Shell script to execute (compiled to Nix derivation) (example: "bun run build") + Description *string `protobuf:"bytes,2,opt,name=description,proto3,oneof" json:"description,omitempty"` // Human-readable description of the task (example: "Build all packages") + Cwd *string `protobuf:"bytes,3,opt,name=cwd,proto3,oneof" json:"cwd,omitempty"` // Working directory for the task (relative to repo root) (example: "apps/web") Env map[string]string `protobuf:"bytes,4,rep,name=env,proto3" json:"env,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // Environment variables for the task - DependsOn []string `protobuf:"bytes,5,rep,name=depends_on,json=dependsOn,proto3" json:"depends_on,omitempty"` // Tasks that must complete first (use ^ for deps) - Outputs []string `protobuf:"bytes,6,rep,name=outputs,proto3" json:"outputs,omitempty"` // Output file globs for caching (e.g. dist/**) - Inputs []string `protobuf:"bytes,7,rep,name=inputs,proto3" json:"inputs,omitempty"` // Input file globs for cache key (e.g. $TURBO_DEFAULT$) - Persistent *bool `protobuf:"varint,8,opt,name=persistent,proto3,oneof" json:"persistent,omitempty"` // Long-running process (e.g. dev server) - Cache *bool `protobuf:"varint,9,opt,name=cache,proto3,oneof" json:"cache,omitempty"` // Enable Turborepo caching (default: true) - Interactive *bool `protobuf:"varint,10,opt,name=interactive,proto3,oneof" json:"interactive,omitempty"` // Task accepts stdin input + DependsOn []string `protobuf:"bytes,5,rep,name=depends_on,json=dependsOn,proto3" json:"depends_on,omitempty"` // Tasks that must complete first (use ^ for deps) (example: "^build") + Outputs []string `protobuf:"bytes,6,rep,name=outputs,proto3" json:"outputs,omitempty"` // Output file globs for caching (e.g. dist/**) (example: "dist/**") + Inputs []string `protobuf:"bytes,7,rep,name=inputs,proto3" json:"inputs,omitempty"` // Input file globs for cache key (e.g. $TURBO_DEFAULT$) (example: "$TURBO_DEFAULT$") + Persistent *bool `protobuf:"varint,8,opt,name=persistent,proto3,oneof" json:"persistent,omitempty"` // Long-running process (e.g. dev server) (example: false) + Cache *bool `protobuf:"varint,9,opt,name=cache,proto3,oneof" json:"cache,omitempty"` // Enable Turborepo caching (default: true) (example: true) + Interactive *bool `protobuf:"varint,10,opt,name=interactive,proto3,oneof" json:"interactive,omitempty"` // Task accepts stdin input (example: false) unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } diff --git a/packages/proto/gen/gopb/theme.pb.go b/packages/proto/gen/gopb/theme.pb.go index 4a74c40e..aefa2851 100644 --- a/packages/proto/gen/gopb/theme.pb.go +++ b/packages/proto/gen/gopb/theme.pb.go @@ -24,12 +24,12 @@ const ( // Color scheme configuration type ColorScheme struct { state protoimpl.MessageState `protogen:"open.v1"` - Primary string `protobuf:"bytes,1,opt,name=primary,proto3" json:"primary,omitempty"` // Primary accent color - Secondary string `protobuf:"bytes,2,opt,name=secondary,proto3" json:"secondary,omitempty"` // Secondary accent color - Success string `protobuf:"bytes,3,opt,name=success,proto3" json:"success,omitempty"` // Success/positive color - Warning string `protobuf:"bytes,4,opt,name=warning,proto3" json:"warning,omitempty"` // Warning color - Error string `protobuf:"bytes,5,opt,name=error,proto3" json:"error,omitempty"` // Error/negative color - Muted string `protobuf:"bytes,6,opt,name=muted,proto3" json:"muted,omitempty"` // Muted/subtle color + Primary string `protobuf:"bytes,1,opt,name=primary,proto3" json:"primary,omitempty"` // Primary accent color (example: "#7aa2f7") + Secondary string `protobuf:"bytes,2,opt,name=secondary,proto3" json:"secondary,omitempty"` // Secondary accent color (example: "#bb9af7") + Success string `protobuf:"bytes,3,opt,name=success,proto3" json:"success,omitempty"` // Success/positive color (example: "#9ece6a") + Warning string `protobuf:"bytes,4,opt,name=warning,proto3" json:"warning,omitempty"` // Warning color (example: "#e0af68") + Error string `protobuf:"bytes,5,opt,name=error,proto3" json:"error,omitempty"` // Error/negative color (example: "#f7768e") + Muted string `protobuf:"bytes,6,opt,name=muted,proto3" json:"muted,omitempty"` // Muted/subtle color (example: "#565f89") unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -194,7 +194,7 @@ func (x *Starship) GetAddNewline() bool { // Theme and Starship prompt configuration type Theme struct { state protoimpl.MessageState `protogen:"open.v1"` - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Theme name + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Theme name (example: "tokyo-night") Colors *ColorScheme `protobuf:"bytes,2,opt,name=colors,proto3" json:"colors,omitempty"` // Color scheme configuration Starship *Starship `protobuf:"bytes,3,opt,name=starship,proto3" json:"starship,omitempty"` // Starship prompt configuration NerdFont bool `protobuf:"varint,4,opt,name=nerd_font,json=nerdFont,proto3" json:"nerd_font,omitempty"` // Use Nerd Font icons in prompt diff --git a/packages/proto/gen/gopb/variables.pb.go b/packages/proto/gen/gopb/variables.pb.go index 7ae8c588..c1592740 100644 --- a/packages/proto/gen/gopb/variables.pb.go +++ b/packages/proto/gen/gopb/variables.pb.go @@ -28,9 +28,10 @@ type Variable struct { // // Examples: // - // /dev/DATABASE_URL → Secret in dev.yaml - // /prod/API_KEY → Secret in prod.yaml - // /computed/apps/web/port → Computed by Nix module + // /dev/DATABASE_URL → Secret in dev.yaml + // /prod/API_KEY → Secret in prod.yaml + // /computed/apps/web/port → Computed by Nix module + // (example: "/dev/DATABASE_URL") Id *string `protobuf:"bytes,1,opt,name=id,proto3,oneof" json:"id,omitempty"` // The value - either a literal string or a vals reference. // @@ -41,9 +42,10 @@ type Variable struct { // // Vals references: // - // "ref+sops://.stack/secrets/dev.yaml#/DATABASE_URL" - // "ref+awsssm://prod/api-key" - // "ref+exec://echo $RANDOM" + // "ref+sops://.stack/secrets/dev.yaml#/DATABASE_URL" + // "ref+awsssm://prod/api-key" + // "ref+exec://echo $RANDOM" + // (example: "ref+sops://.stack/secrets/dev.yaml#/DATABASE_URL") Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache diff --git a/packages/proto/gen/json/stackpanel.db.App.jsonschema.bundle.json b/packages/proto/gen/json/stackpanel.db.App.jsonschema.bundle.json index 6ed792b4..0bc3dc70 100644 --- a/packages/proto/gen/json/stackpanel.db.App.jsonschema.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.App.jsonschema.bundle.json @@ -24,7 +24,7 @@ "type": "object" }, "environmentIds": { - "description": "Environment IDs for this app. Defaults to \"dev\", \"prod\", \"staging\", \"test\".", + "description": "Environment IDs for this app. Defaults to \"dev\", \"prod\", \"staging\", \"test\".\n (example: \"dev\")", "items": { "type": "string" }, @@ -142,7 +142,7 @@ "type": "string" }, "secrets": { - "description": "Env var names in this environment that contain sensitive values.\n Used to auto-derive deployment.secrets — these are wrapped with\n alchemy.secret() at deploy time.", + "description": "Env var names in this environment that contain sensitive values.\n Used to auto-derive deployment.secrets — these are wrapped with\n alchemy.secret() at deploy time.\n (example: \"DATABASE_URL\")", "items": { "type": "string" }, @@ -160,6 +160,10 @@ "defaultValue": { "type": "string" }, + "description": { + "description": "Human-readable description of what this variable is for and where to\n obtain it. Surfaced in the studio Variables UI and in the actionable\n error message thrown by `loadAppEnv(..., { validate: true })` when\n the variable is missing.\n (example: \"Postgres connection string used by the API server\")", + "type": "string" + }, "key": { "default": "", "type": "string" diff --git a/packages/proto/gen/json/stackpanel.db.App.jsonschema.json b/packages/proto/gen/json/stackpanel.db.App.jsonschema.json index 3c2db801..29383b48 100644 --- a/packages/proto/gen/json/stackpanel.db.App.jsonschema.json +++ b/packages/proto/gen/json/stackpanel.db.App.jsonschema.json @@ -23,7 +23,7 @@ "type": "object" }, "environmentIds": { - "description": "Environment IDs for this app. Defaults to \"dev\", \"prod\", \"staging\", \"test\".", + "description": "Environment IDs for this app. Defaults to \"dev\", \"prod\", \"staging\", \"test\".\n (example: \"dev\")", "items": { "type": "string" }, diff --git a/packages/proto/gen/json/stackpanel.db.App.jsonschema.strict.bundle.json b/packages/proto/gen/json/stackpanel.db.App.jsonschema.strict.bundle.json index 1e683152..be6dadc2 100644 --- a/packages/proto/gen/json/stackpanel.db.App.jsonschema.strict.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.App.jsonschema.strict.bundle.json @@ -24,7 +24,7 @@ "type": "object" }, "environmentIds": { - "description": "Environment IDs for this app. Defaults to \"dev\", \"prod\", \"staging\", \"test\".", + "description": "Environment IDs for this app. Defaults to \"dev\", \"prod\", \"staging\", \"test\".\n (example: \"dev\")", "items": { "type": "string" }, @@ -129,7 +129,7 @@ "type": "string" }, "secrets": { - "description": "Env var names in this environment that contain sensitive values.\n Used to auto-derive deployment.secrets — these are wrapped with\n alchemy.secret() at deploy time.", + "description": "Env var names in this environment that contain sensitive values.\n Used to auto-derive deployment.secrets — these are wrapped with\n alchemy.secret() at deploy time.\n (example: \"DATABASE_URL\")", "items": { "type": "string" }, @@ -150,6 +150,10 @@ "defaultValue": { "type": "string" }, + "description": { + "description": "Human-readable description of what this variable is for and where to\n obtain it. Surfaced in the studio Variables UI and in the actionable\n error message thrown by `loadAppEnv(..., { validate: true })` when\n the variable is missing.\n (example: \"Postgres connection string used by the API server\")", + "type": "string" + }, "key": { "type": "string" }, diff --git a/packages/proto/gen/json/stackpanel.db.App.jsonschema.strict.json b/packages/proto/gen/json/stackpanel.db.App.jsonschema.strict.json index 91dfaea2..a53ff727 100644 --- a/packages/proto/gen/json/stackpanel.db.App.jsonschema.strict.json +++ b/packages/proto/gen/json/stackpanel.db.App.jsonschema.strict.json @@ -23,7 +23,7 @@ "type": "object" }, "environmentIds": { - "description": "Environment IDs for this app. Defaults to \"dev\", \"prod\", \"staging\", \"test\".", + "description": "Environment IDs for this app. Defaults to \"dev\", \"prod\", \"staging\", \"test\".\n (example: \"dev\")", "items": { "type": "string" }, diff --git a/packages/proto/gen/json/stackpanel.db.App.schema.bundle.json b/packages/proto/gen/json/stackpanel.db.App.schema.bundle.json index d55c0c7d..fda7b7ac 100644 --- a/packages/proto/gen/json/stackpanel.db.App.schema.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.App.schema.bundle.json @@ -24,7 +24,7 @@ "type": "object" }, "environmentIds": { - "description": "Environment IDs for this app. Defaults to \"dev\", \"prod\", \"staging\", \"test\".", + "description": "Environment IDs for this app. Defaults to \"dev\", \"prod\", \"staging\", \"test\".\n (example: \"dev\")", "items": { "type": "string" }, @@ -142,7 +142,7 @@ "type": "string" }, "secrets": { - "description": "Env var names in this environment that contain sensitive values.\n Used to auto-derive deployment.secrets — these are wrapped with\n alchemy.secret() at deploy time.", + "description": "Env var names in this environment that contain sensitive values.\n Used to auto-derive deployment.secrets — these are wrapped with\n alchemy.secret() at deploy time.\n (example: \"DATABASE_URL\")", "items": { "type": "string" }, @@ -160,6 +160,10 @@ "defaultValue": { "type": "string" }, + "description": { + "description": "Human-readable description of what this variable is for and where to\n obtain it. Surfaced in the studio Variables UI and in the actionable\n error message thrown by `loadAppEnv(..., { validate: true })` when\n the variable is missing.\n (example: \"Postgres connection string used by the API server\")", + "type": "string" + }, "key": { "default": "", "type": "string" diff --git a/packages/proto/gen/json/stackpanel.db.App.schema.json b/packages/proto/gen/json/stackpanel.db.App.schema.json index 2eb52dce..3e10fd58 100644 --- a/packages/proto/gen/json/stackpanel.db.App.schema.json +++ b/packages/proto/gen/json/stackpanel.db.App.schema.json @@ -23,7 +23,7 @@ "type": "object" }, "environmentIds": { - "description": "Environment IDs for this app. Defaults to \"dev\", \"prod\", \"staging\", \"test\".", + "description": "Environment IDs for this app. Defaults to \"dev\", \"prod\", \"staging\", \"test\".\n (example: \"dev\")", "items": { "type": "string" }, diff --git a/packages/proto/gen/json/stackpanel.db.App.schema.strict.bundle.json b/packages/proto/gen/json/stackpanel.db.App.schema.strict.bundle.json index cfc948d9..cd3f4fe7 100644 --- a/packages/proto/gen/json/stackpanel.db.App.schema.strict.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.App.schema.strict.bundle.json @@ -24,7 +24,7 @@ "type": "object" }, "environmentIds": { - "description": "Environment IDs for this app. Defaults to \"dev\", \"prod\", \"staging\", \"test\".", + "description": "Environment IDs for this app. Defaults to \"dev\", \"prod\", \"staging\", \"test\".\n (example: \"dev\")", "items": { "type": "string" }, @@ -129,7 +129,7 @@ "type": "string" }, "secrets": { - "description": "Env var names in this environment that contain sensitive values.\n Used to auto-derive deployment.secrets — these are wrapped with\n alchemy.secret() at deploy time.", + "description": "Env var names in this environment that contain sensitive values.\n Used to auto-derive deployment.secrets — these are wrapped with\n alchemy.secret() at deploy time.\n (example: \"DATABASE_URL\")", "items": { "type": "string" }, @@ -150,6 +150,10 @@ "defaultValue": { "type": "string" }, + "description": { + "description": "Human-readable description of what this variable is for and where to\n obtain it. Surfaced in the studio Variables UI and in the actionable\n error message thrown by `loadAppEnv(..., { validate: true })` when\n the variable is missing.\n (example: \"Postgres connection string used by the API server\")", + "type": "string" + }, "key": { "type": "string" }, diff --git a/packages/proto/gen/json/stackpanel.db.App.schema.strict.json b/packages/proto/gen/json/stackpanel.db.App.schema.strict.json index 5ce6466f..b4820172 100644 --- a/packages/proto/gen/json/stackpanel.db.App.schema.strict.json +++ b/packages/proto/gen/json/stackpanel.db.App.schema.strict.json @@ -23,7 +23,7 @@ "type": "object" }, "environmentIds": { - "description": "Environment IDs for this app. Defaults to \"dev\", \"prod\", \"staging\", \"test\".", + "description": "Environment IDs for this app. Defaults to \"dev\", \"prod\", \"staging\", \"test\".\n (example: \"dev\")", "items": { "type": "string" }, diff --git a/packages/proto/gen/json/stackpanel.db.AppEnvironment.jsonschema.bundle.json b/packages/proto/gen/json/stackpanel.db.AppEnvironment.jsonschema.bundle.json index 91a57638..888ecd0f 100644 --- a/packages/proto/gen/json/stackpanel.db.AppEnvironment.jsonschema.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.AppEnvironment.jsonschema.bundle.json @@ -29,7 +29,7 @@ "type": "string" }, "secrets": { - "description": "Env var names in this environment that contain sensitive values.\n Used to auto-derive deployment.secrets — these are wrapped with\n alchemy.secret() at deploy time.", + "description": "Env var names in this environment that contain sensitive values.\n Used to auto-derive deployment.secrets — these are wrapped with\n alchemy.secret() at deploy time.\n (example: \"DATABASE_URL\")", "items": { "type": "string" }, diff --git a/packages/proto/gen/json/stackpanel.db.AppEnvironment.jsonschema.json b/packages/proto/gen/json/stackpanel.db.AppEnvironment.jsonschema.json index 54d3e2ff..649ee95e 100644 --- a/packages/proto/gen/json/stackpanel.db.AppEnvironment.jsonschema.json +++ b/packages/proto/gen/json/stackpanel.db.AppEnvironment.jsonschema.json @@ -28,7 +28,7 @@ "type": "string" }, "secrets": { - "description": "Env var names in this environment that contain sensitive values.\n Used to auto-derive deployment.secrets — these are wrapped with\n alchemy.secret() at deploy time.", + "description": "Env var names in this environment that contain sensitive values.\n Used to auto-derive deployment.secrets — these are wrapped with\n alchemy.secret() at deploy time.\n (example: \"DATABASE_URL\")", "items": { "type": "string" }, diff --git a/packages/proto/gen/json/stackpanel.db.AppEnvironment.jsonschema.strict.bundle.json b/packages/proto/gen/json/stackpanel.db.AppEnvironment.jsonschema.strict.bundle.json index cfa8dfad..3422a7ce 100644 --- a/packages/proto/gen/json/stackpanel.db.AppEnvironment.jsonschema.strict.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.AppEnvironment.jsonschema.strict.bundle.json @@ -28,7 +28,7 @@ "type": "string" }, "secrets": { - "description": "Env var names in this environment that contain sensitive values.\n Used to auto-derive deployment.secrets — these are wrapped with\n alchemy.secret() at deploy time.", + "description": "Env var names in this environment that contain sensitive values.\n Used to auto-derive deployment.secrets — these are wrapped with\n alchemy.secret() at deploy time.\n (example: \"DATABASE_URL\")", "items": { "type": "string" }, diff --git a/packages/proto/gen/json/stackpanel.db.AppEnvironment.jsonschema.strict.json b/packages/proto/gen/json/stackpanel.db.AppEnvironment.jsonschema.strict.json index e832d83e..a5c6ce5c 100644 --- a/packages/proto/gen/json/stackpanel.db.AppEnvironment.jsonschema.strict.json +++ b/packages/proto/gen/json/stackpanel.db.AppEnvironment.jsonschema.strict.json @@ -27,7 +27,7 @@ "type": "string" }, "secrets": { - "description": "Env var names in this environment that contain sensitive values.\n Used to auto-derive deployment.secrets — these are wrapped with\n alchemy.secret() at deploy time.", + "description": "Env var names in this environment that contain sensitive values.\n Used to auto-derive deployment.secrets — these are wrapped with\n alchemy.secret() at deploy time.\n (example: \"DATABASE_URL\")", "items": { "type": "string" }, diff --git a/packages/proto/gen/json/stackpanel.db.AppEnvironment.schema.bundle.json b/packages/proto/gen/json/stackpanel.db.AppEnvironment.schema.bundle.json index e076f2c9..366564d7 100644 --- a/packages/proto/gen/json/stackpanel.db.AppEnvironment.schema.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.AppEnvironment.schema.bundle.json @@ -29,7 +29,7 @@ "type": "string" }, "secrets": { - "description": "Env var names in this environment that contain sensitive values.\n Used to auto-derive deployment.secrets — these are wrapped with\n alchemy.secret() at deploy time.", + "description": "Env var names in this environment that contain sensitive values.\n Used to auto-derive deployment.secrets — these are wrapped with\n alchemy.secret() at deploy time.\n (example: \"DATABASE_URL\")", "items": { "type": "string" }, diff --git a/packages/proto/gen/json/stackpanel.db.AppEnvironment.schema.json b/packages/proto/gen/json/stackpanel.db.AppEnvironment.schema.json index c46233cf..2b897c72 100644 --- a/packages/proto/gen/json/stackpanel.db.AppEnvironment.schema.json +++ b/packages/proto/gen/json/stackpanel.db.AppEnvironment.schema.json @@ -28,7 +28,7 @@ "type": "string" }, "secrets": { - "description": "Env var names in this environment that contain sensitive values.\n Used to auto-derive deployment.secrets — these are wrapped with\n alchemy.secret() at deploy time.", + "description": "Env var names in this environment that contain sensitive values.\n Used to auto-derive deployment.secrets — these are wrapped with\n alchemy.secret() at deploy time.\n (example: \"DATABASE_URL\")", "items": { "type": "string" }, diff --git a/packages/proto/gen/json/stackpanel.db.AppEnvironment.schema.strict.bundle.json b/packages/proto/gen/json/stackpanel.db.AppEnvironment.schema.strict.bundle.json index 8c03e4c1..3c746a39 100644 --- a/packages/proto/gen/json/stackpanel.db.AppEnvironment.schema.strict.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.AppEnvironment.schema.strict.bundle.json @@ -28,7 +28,7 @@ "type": "string" }, "secrets": { - "description": "Env var names in this environment that contain sensitive values.\n Used to auto-derive deployment.secrets — these are wrapped with\n alchemy.secret() at deploy time.", + "description": "Env var names in this environment that contain sensitive values.\n Used to auto-derive deployment.secrets — these are wrapped with\n alchemy.secret() at deploy time.\n (example: \"DATABASE_URL\")", "items": { "type": "string" }, diff --git a/packages/proto/gen/json/stackpanel.db.AppEnvironment.schema.strict.json b/packages/proto/gen/json/stackpanel.db.AppEnvironment.schema.strict.json index e1e6e935..27971f2a 100644 --- a/packages/proto/gen/json/stackpanel.db.AppEnvironment.schema.strict.json +++ b/packages/proto/gen/json/stackpanel.db.AppEnvironment.schema.strict.json @@ -27,7 +27,7 @@ "type": "string" }, "secrets": { - "description": "Env var names in this environment that contain sensitive values.\n Used to auto-derive deployment.secrets — these are wrapped with\n alchemy.secret() at deploy time.", + "description": "Env var names in this environment that contain sensitive values.\n Used to auto-derive deployment.secrets — these are wrapped with\n alchemy.secret() at deploy time.\n (example: \"DATABASE_URL\")", "items": { "type": "string" }, diff --git a/packages/proto/gen/json/stackpanel.db.Apps.jsonschema.bundle.json b/packages/proto/gen/json/stackpanel.db.Apps.jsonschema.bundle.json index ff9bcc6f..1faa4c54 100644 --- a/packages/proto/gen/json/stackpanel.db.Apps.jsonschema.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.Apps.jsonschema.bundle.json @@ -24,7 +24,7 @@ "type": "object" }, "environmentIds": { - "description": "Environment IDs for this app. Defaults to \"dev\", \"prod\", \"staging\", \"test\".", + "description": "Environment IDs for this app. Defaults to \"dev\", \"prod\", \"staging\", \"test\".\n (example: \"dev\")", "items": { "type": "string" }, @@ -142,7 +142,7 @@ "type": "string" }, "secrets": { - "description": "Env var names in this environment that contain sensitive values.\n Used to auto-derive deployment.secrets — these are wrapped with\n alchemy.secret() at deploy time.", + "description": "Env var names in this environment that contain sensitive values.\n Used to auto-derive deployment.secrets — these are wrapped with\n alchemy.secret() at deploy time.\n (example: \"DATABASE_URL\")", "items": { "type": "string" }, @@ -178,6 +178,10 @@ "defaultValue": { "type": "string" }, + "description": { + "description": "Human-readable description of what this variable is for and where to\n obtain it. Surfaced in the studio Variables UI and in the actionable\n error message thrown by `loadAppEnv(..., { validate: true })` when\n the variable is missing.\n (example: \"Postgres connection string used by the API server\")", + "type": "string" + }, "key": { "default": "", "type": "string" diff --git a/packages/proto/gen/json/stackpanel.db.Apps.jsonschema.strict.bundle.json b/packages/proto/gen/json/stackpanel.db.Apps.jsonschema.strict.bundle.json index 2f6056c5..0cdd5f2d 100644 --- a/packages/proto/gen/json/stackpanel.db.Apps.jsonschema.strict.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.Apps.jsonschema.strict.bundle.json @@ -24,7 +24,7 @@ "type": "object" }, "environmentIds": { - "description": "Environment IDs for this app. Defaults to \"dev\", \"prod\", \"staging\", \"test\".", + "description": "Environment IDs for this app. Defaults to \"dev\", \"prod\", \"staging\", \"test\".\n (example: \"dev\")", "items": { "type": "string" }, @@ -129,7 +129,7 @@ "type": "string" }, "secrets": { - "description": "Env var names in this environment that contain sensitive values.\n Used to auto-derive deployment.secrets — these are wrapped with\n alchemy.secret() at deploy time.", + "description": "Env var names in this environment that contain sensitive values.\n Used to auto-derive deployment.secrets — these are wrapped with\n alchemy.secret() at deploy time.\n (example: \"DATABASE_URL\")", "items": { "type": "string" }, @@ -168,6 +168,10 @@ "defaultValue": { "type": "string" }, + "description": { + "description": "Human-readable description of what this variable is for and where to\n obtain it. Surfaced in the studio Variables UI and in the actionable\n error message thrown by `loadAppEnv(..., { validate: true })` when\n the variable is missing.\n (example: \"Postgres connection string used by the API server\")", + "type": "string" + }, "key": { "type": "string" }, diff --git a/packages/proto/gen/json/stackpanel.db.Apps.schema.bundle.json b/packages/proto/gen/json/stackpanel.db.Apps.schema.bundle.json index 41dd1bd0..a0d5e125 100644 --- a/packages/proto/gen/json/stackpanel.db.Apps.schema.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.Apps.schema.bundle.json @@ -24,7 +24,7 @@ "type": "object" }, "environmentIds": { - "description": "Environment IDs for this app. Defaults to \"dev\", \"prod\", \"staging\", \"test\".", + "description": "Environment IDs for this app. Defaults to \"dev\", \"prod\", \"staging\", \"test\".\n (example: \"dev\")", "items": { "type": "string" }, @@ -142,7 +142,7 @@ "type": "string" }, "secrets": { - "description": "Env var names in this environment that contain sensitive values.\n Used to auto-derive deployment.secrets — these are wrapped with\n alchemy.secret() at deploy time.", + "description": "Env var names in this environment that contain sensitive values.\n Used to auto-derive deployment.secrets — these are wrapped with\n alchemy.secret() at deploy time.\n (example: \"DATABASE_URL\")", "items": { "type": "string" }, @@ -178,6 +178,10 @@ "defaultValue": { "type": "string" }, + "description": { + "description": "Human-readable description of what this variable is for and where to\n obtain it. Surfaced in the studio Variables UI and in the actionable\n error message thrown by `loadAppEnv(..., { validate: true })` when\n the variable is missing.\n (example: \"Postgres connection string used by the API server\")", + "type": "string" + }, "key": { "default": "", "type": "string" diff --git a/packages/proto/gen/json/stackpanel.db.Apps.schema.strict.bundle.json b/packages/proto/gen/json/stackpanel.db.Apps.schema.strict.bundle.json index 6ccc7eb1..7a659224 100644 --- a/packages/proto/gen/json/stackpanel.db.Apps.schema.strict.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.Apps.schema.strict.bundle.json @@ -24,7 +24,7 @@ "type": "object" }, "environmentIds": { - "description": "Environment IDs for this app. Defaults to \"dev\", \"prod\", \"staging\", \"test\".", + "description": "Environment IDs for this app. Defaults to \"dev\", \"prod\", \"staging\", \"test\".\n (example: \"dev\")", "items": { "type": "string" }, @@ -129,7 +129,7 @@ "type": "string" }, "secrets": { - "description": "Env var names in this environment that contain sensitive values.\n Used to auto-derive deployment.secrets — these are wrapped with\n alchemy.secret() at deploy time.", + "description": "Env var names in this environment that contain sensitive values.\n Used to auto-derive deployment.secrets — these are wrapped with\n alchemy.secret() at deploy time.\n (example: \"DATABASE_URL\")", "items": { "type": "string" }, @@ -168,6 +168,10 @@ "defaultValue": { "type": "string" }, + "description": { + "description": "Human-readable description of what this variable is for and where to\n obtain it. Surfaced in the studio Variables UI and in the actionable\n error message thrown by `loadAppEnv(..., { validate: true })` when\n the variable is missing.\n (example: \"Postgres connection string used by the API server\")", + "type": "string" + }, "key": { "type": "string" }, diff --git a/packages/proto/gen/json/stackpanel.db.CodegenTarget.jsonschema.bundle.json b/packages/proto/gen/json/stackpanel.db.CodegenTarget.jsonschema.bundle.json index a57659e8..3d1fec5c 100644 --- a/packages/proto/gen/json/stackpanel.db.CodegenTarget.jsonschema.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.CodegenTarget.jsonschema.bundle.json @@ -9,7 +9,7 @@ "type": "string" }, "language": { - "description": "Target language for generated code (e.g., \"typescript\", \"go\", \"python\").\n Informational only for now; codegen selection is based on the target key.", + "description": "Target language for generated code (e.g., \"typescript\", \"go\", \"python\").\n Informational only for now; codegen selection is based on the target key.\n (example: \"typescript\")", "type": "string" }, "name": { diff --git a/packages/proto/gen/json/stackpanel.db.CodegenTarget.jsonschema.json b/packages/proto/gen/json/stackpanel.db.CodegenTarget.jsonschema.json index b4d2cb25..9acfa935 100644 --- a/packages/proto/gen/json/stackpanel.db.CodegenTarget.jsonschema.json +++ b/packages/proto/gen/json/stackpanel.db.CodegenTarget.jsonschema.json @@ -8,7 +8,7 @@ "type": "string" }, "language": { - "description": "Target language for generated code (e.g., \"typescript\", \"go\", \"python\").\n Informational only for now; codegen selection is based on the target key.", + "description": "Target language for generated code (e.g., \"typescript\", \"go\", \"python\").\n Informational only for now; codegen selection is based on the target key.\n (example: \"typescript\")", "type": "string" }, "name": { diff --git a/packages/proto/gen/json/stackpanel.db.CodegenTarget.jsonschema.strict.bundle.json b/packages/proto/gen/json/stackpanel.db.CodegenTarget.jsonschema.strict.bundle.json index 4d2a486b..170ae820 100644 --- a/packages/proto/gen/json/stackpanel.db.CodegenTarget.jsonschema.strict.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.CodegenTarget.jsonschema.strict.bundle.json @@ -9,7 +9,7 @@ "type": "string" }, "language": { - "description": "Target language for generated code (e.g., \"typescript\", \"go\", \"python\").\n Informational only for now; codegen selection is based on the target key.", + "description": "Target language for generated code (e.g., \"typescript\", \"go\", \"python\").\n Informational only for now; codegen selection is based on the target key.\n (example: \"typescript\")", "type": "string" }, "name": { diff --git a/packages/proto/gen/json/stackpanel.db.CodegenTarget.jsonschema.strict.json b/packages/proto/gen/json/stackpanel.db.CodegenTarget.jsonschema.strict.json index cd87b822..82064d72 100644 --- a/packages/proto/gen/json/stackpanel.db.CodegenTarget.jsonschema.strict.json +++ b/packages/proto/gen/json/stackpanel.db.CodegenTarget.jsonschema.strict.json @@ -8,7 +8,7 @@ "type": "string" }, "language": { - "description": "Target language for generated code (e.g., \"typescript\", \"go\", \"python\").\n Informational only for now; codegen selection is based on the target key.", + "description": "Target language for generated code (e.g., \"typescript\", \"go\", \"python\").\n Informational only for now; codegen selection is based on the target key.\n (example: \"typescript\")", "type": "string" }, "name": { diff --git a/packages/proto/gen/json/stackpanel.db.CodegenTarget.schema.bundle.json b/packages/proto/gen/json/stackpanel.db.CodegenTarget.schema.bundle.json index f128371f..748a6375 100644 --- a/packages/proto/gen/json/stackpanel.db.CodegenTarget.schema.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.CodegenTarget.schema.bundle.json @@ -9,7 +9,7 @@ "type": "string" }, "language": { - "description": "Target language for generated code (e.g., \"typescript\", \"go\", \"python\").\n Informational only for now; codegen selection is based on the target key.", + "description": "Target language for generated code (e.g., \"typescript\", \"go\", \"python\").\n Informational only for now; codegen selection is based on the target key.\n (example: \"typescript\")", "type": "string" }, "name": { diff --git a/packages/proto/gen/json/stackpanel.db.CodegenTarget.schema.json b/packages/proto/gen/json/stackpanel.db.CodegenTarget.schema.json index 360f0afe..c0df04df 100644 --- a/packages/proto/gen/json/stackpanel.db.CodegenTarget.schema.json +++ b/packages/proto/gen/json/stackpanel.db.CodegenTarget.schema.json @@ -8,7 +8,7 @@ "type": "string" }, "language": { - "description": "Target language for generated code (e.g., \"typescript\", \"go\", \"python\").\n Informational only for now; codegen selection is based on the target key.", + "description": "Target language for generated code (e.g., \"typescript\", \"go\", \"python\").\n Informational only for now; codegen selection is based on the target key.\n (example: \"typescript\")", "type": "string" }, "name": { diff --git a/packages/proto/gen/json/stackpanel.db.CodegenTarget.schema.strict.bundle.json b/packages/proto/gen/json/stackpanel.db.CodegenTarget.schema.strict.bundle.json index 76c83b37..2ac2c299 100644 --- a/packages/proto/gen/json/stackpanel.db.CodegenTarget.schema.strict.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.CodegenTarget.schema.strict.bundle.json @@ -9,7 +9,7 @@ "type": "string" }, "language": { - "description": "Target language for generated code (e.g., \"typescript\", \"go\", \"python\").\n Informational only for now; codegen selection is based on the target key.", + "description": "Target language for generated code (e.g., \"typescript\", \"go\", \"python\").\n Informational only for now; codegen selection is based on the target key.\n (example: \"typescript\")", "type": "string" }, "name": { diff --git a/packages/proto/gen/json/stackpanel.db.CodegenTarget.schema.strict.json b/packages/proto/gen/json/stackpanel.db.CodegenTarget.schema.strict.json index 7c3977d8..3161f8e5 100644 --- a/packages/proto/gen/json/stackpanel.db.CodegenTarget.schema.strict.json +++ b/packages/proto/gen/json/stackpanel.db.CodegenTarget.schema.strict.json @@ -8,7 +8,7 @@ "type": "string" }, "language": { - "description": "Target language for generated code (e.g., \"typescript\", \"go\", \"python\").\n Informational only for now; codegen selection is based on the target key.", + "description": "Target language for generated code (e.g., \"typescript\", \"go\", \"python\").\n Informational only for now; codegen selection is based on the target key.\n (example: \"typescript\")", "type": "string" }, "name": { diff --git a/packages/proto/gen/json/stackpanel.db.Environment.jsonschema.bundle.json b/packages/proto/gen/json/stackpanel.db.Environment.jsonschema.bundle.json index 0a7cda64..de91addf 100644 --- a/packages/proto/gen/json/stackpanel.db.Environment.jsonschema.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.Environment.jsonschema.bundle.json @@ -6,7 +6,7 @@ "description": "Environment-specific secrets configuration", "patternProperties": { "^(public_keys)$": { - "description": "AGE public keys that can decrypt secrets for this environment.\n New secrets for this env are encrypted to these recipients.", + "description": "AGE public keys that can decrypt secrets for this environment.\n New secrets for this env are encrypted to these recipients.\n (example: \"age1abc1234abc1234abc1234abc1234abc1234abc1234abc1234abc1\")", "items": { "type": "string" }, @@ -18,14 +18,14 @@ "type": "string" }, "publicKeys": { - "description": "AGE public keys that can decrypt secrets for this environment.\n New secrets for this env are encrypted to these recipients.", + "description": "AGE public keys that can decrypt secrets for this environment.\n New secrets for this env are encrypted to these recipients.\n (example: \"age1abc1234abc1234abc1234abc1234abc1234abc1234abc1234abc1\")", "items": { "type": "string" }, "type": "array" }, "sources": { - "description": "List of SOPS-encrypted source files for this environment (without .yaml extension).\n These files are decrypted and merged to provide secrets for the environment.", + "description": "List of SOPS-encrypted source files for this environment (without .yaml extension).\n These files are decrypted and merged to provide secrets for the environment.\n (example: \"shared\")", "items": { "type": "string" }, diff --git a/packages/proto/gen/json/stackpanel.db.Environment.jsonschema.json b/packages/proto/gen/json/stackpanel.db.Environment.jsonschema.json index 77fe2f31..0a8c9e30 100644 --- a/packages/proto/gen/json/stackpanel.db.Environment.jsonschema.json +++ b/packages/proto/gen/json/stackpanel.db.Environment.jsonschema.json @@ -5,7 +5,7 @@ "description": "Environment-specific secrets configuration", "patternProperties": { "^(public_keys)$": { - "description": "AGE public keys that can decrypt secrets for this environment.\n New secrets for this env are encrypted to these recipients.", + "description": "AGE public keys that can decrypt secrets for this environment.\n New secrets for this env are encrypted to these recipients.\n (example: \"age1abc1234abc1234abc1234abc1234abc1234abc1234abc1234abc1\")", "items": { "type": "string" }, @@ -17,14 +17,14 @@ "type": "string" }, "publicKeys": { - "description": "AGE public keys that can decrypt secrets for this environment.\n New secrets for this env are encrypted to these recipients.", + "description": "AGE public keys that can decrypt secrets for this environment.\n New secrets for this env are encrypted to these recipients.\n (example: \"age1abc1234abc1234abc1234abc1234abc1234abc1234abc1234abc1\")", "items": { "type": "string" }, "type": "array" }, "sources": { - "description": "List of SOPS-encrypted source files for this environment (without .yaml extension).\n These files are decrypted and merged to provide secrets for the environment.", + "description": "List of SOPS-encrypted source files for this environment (without .yaml extension).\n These files are decrypted and merged to provide secrets for the environment.\n (example: \"shared\")", "items": { "type": "string" }, diff --git a/packages/proto/gen/json/stackpanel.db.Environment.jsonschema.strict.bundle.json b/packages/proto/gen/json/stackpanel.db.Environment.jsonschema.strict.bundle.json index 354d727d..69db4dee 100644 --- a/packages/proto/gen/json/stackpanel.db.Environment.jsonschema.strict.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.Environment.jsonschema.strict.bundle.json @@ -9,14 +9,14 @@ "type": "string" }, "publicKeys": { - "description": "AGE public keys that can decrypt secrets for this environment.\n New secrets for this env are encrypted to these recipients.", + "description": "AGE public keys that can decrypt secrets for this environment.\n New secrets for this env are encrypted to these recipients.\n (example: \"age1abc1234abc1234abc1234abc1234abc1234abc1234abc1234abc1\")", "items": { "type": "string" }, "type": "array" }, "sources": { - "description": "List of SOPS-encrypted source files for this environment (without .yaml extension).\n These files are decrypted and merged to provide secrets for the environment.", + "description": "List of SOPS-encrypted source files for this environment (without .yaml extension).\n These files are decrypted and merged to provide secrets for the environment.\n (example: \"shared\")", "items": { "type": "string" }, diff --git a/packages/proto/gen/json/stackpanel.db.Environment.jsonschema.strict.json b/packages/proto/gen/json/stackpanel.db.Environment.jsonschema.strict.json index e2d572e9..2535b1d1 100644 --- a/packages/proto/gen/json/stackpanel.db.Environment.jsonschema.strict.json +++ b/packages/proto/gen/json/stackpanel.db.Environment.jsonschema.strict.json @@ -8,14 +8,14 @@ "type": "string" }, "publicKeys": { - "description": "AGE public keys that can decrypt secrets for this environment.\n New secrets for this env are encrypted to these recipients.", + "description": "AGE public keys that can decrypt secrets for this environment.\n New secrets for this env are encrypted to these recipients.\n (example: \"age1abc1234abc1234abc1234abc1234abc1234abc1234abc1234abc1\")", "items": { "type": "string" }, "type": "array" }, "sources": { - "description": "List of SOPS-encrypted source files for this environment (without .yaml extension).\n These files are decrypted and merged to provide secrets for the environment.", + "description": "List of SOPS-encrypted source files for this environment (without .yaml extension).\n These files are decrypted and merged to provide secrets for the environment.\n (example: \"shared\")", "items": { "type": "string" }, diff --git a/packages/proto/gen/json/stackpanel.db.Environment.schema.bundle.json b/packages/proto/gen/json/stackpanel.db.Environment.schema.bundle.json index 6242ce63..72069f79 100644 --- a/packages/proto/gen/json/stackpanel.db.Environment.schema.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.Environment.schema.bundle.json @@ -6,7 +6,7 @@ "description": "Environment-specific secrets configuration", "patternProperties": { "^(publicKeys)$": { - "description": "AGE public keys that can decrypt secrets for this environment.\n New secrets for this env are encrypted to these recipients.", + "description": "AGE public keys that can decrypt secrets for this environment.\n New secrets for this env are encrypted to these recipients.\n (example: \"age1abc1234abc1234abc1234abc1234abc1234abc1234abc1234abc1\")", "items": { "type": "string" }, @@ -18,14 +18,14 @@ "type": "string" }, "public_keys": { - "description": "AGE public keys that can decrypt secrets for this environment.\n New secrets for this env are encrypted to these recipients.", + "description": "AGE public keys that can decrypt secrets for this environment.\n New secrets for this env are encrypted to these recipients.\n (example: \"age1abc1234abc1234abc1234abc1234abc1234abc1234abc1234abc1\")", "items": { "type": "string" }, "type": "array" }, "sources": { - "description": "List of SOPS-encrypted source files for this environment (without .yaml extension).\n These files are decrypted and merged to provide secrets for the environment.", + "description": "List of SOPS-encrypted source files for this environment (without .yaml extension).\n These files are decrypted and merged to provide secrets for the environment.\n (example: \"shared\")", "items": { "type": "string" }, diff --git a/packages/proto/gen/json/stackpanel.db.Environment.schema.json b/packages/proto/gen/json/stackpanel.db.Environment.schema.json index b39a1b4b..6d9512cf 100644 --- a/packages/proto/gen/json/stackpanel.db.Environment.schema.json +++ b/packages/proto/gen/json/stackpanel.db.Environment.schema.json @@ -5,7 +5,7 @@ "description": "Environment-specific secrets configuration", "patternProperties": { "^(publicKeys)$": { - "description": "AGE public keys that can decrypt secrets for this environment.\n New secrets for this env are encrypted to these recipients.", + "description": "AGE public keys that can decrypt secrets for this environment.\n New secrets for this env are encrypted to these recipients.\n (example: \"age1abc1234abc1234abc1234abc1234abc1234abc1234abc1234abc1\")", "items": { "type": "string" }, @@ -17,14 +17,14 @@ "type": "string" }, "public_keys": { - "description": "AGE public keys that can decrypt secrets for this environment.\n New secrets for this env are encrypted to these recipients.", + "description": "AGE public keys that can decrypt secrets for this environment.\n New secrets for this env are encrypted to these recipients.\n (example: \"age1abc1234abc1234abc1234abc1234abc1234abc1234abc1234abc1\")", "items": { "type": "string" }, "type": "array" }, "sources": { - "description": "List of SOPS-encrypted source files for this environment (without .yaml extension).\n These files are decrypted and merged to provide secrets for the environment.", + "description": "List of SOPS-encrypted source files for this environment (without .yaml extension).\n These files are decrypted and merged to provide secrets for the environment.\n (example: \"shared\")", "items": { "type": "string" }, diff --git a/packages/proto/gen/json/stackpanel.db.Environment.schema.strict.bundle.json b/packages/proto/gen/json/stackpanel.db.Environment.schema.strict.bundle.json index 7f6c6891..0607b08f 100644 --- a/packages/proto/gen/json/stackpanel.db.Environment.schema.strict.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.Environment.schema.strict.bundle.json @@ -9,14 +9,14 @@ "type": "string" }, "public_keys": { - "description": "AGE public keys that can decrypt secrets for this environment.\n New secrets for this env are encrypted to these recipients.", + "description": "AGE public keys that can decrypt secrets for this environment.\n New secrets for this env are encrypted to these recipients.\n (example: \"age1abc1234abc1234abc1234abc1234abc1234abc1234abc1234abc1\")", "items": { "type": "string" }, "type": "array" }, "sources": { - "description": "List of SOPS-encrypted source files for this environment (without .yaml extension).\n These files are decrypted and merged to provide secrets for the environment.", + "description": "List of SOPS-encrypted source files for this environment (without .yaml extension).\n These files are decrypted and merged to provide secrets for the environment.\n (example: \"shared\")", "items": { "type": "string" }, diff --git a/packages/proto/gen/json/stackpanel.db.Environment.schema.strict.json b/packages/proto/gen/json/stackpanel.db.Environment.schema.strict.json index edbc3c3d..db27371a 100644 --- a/packages/proto/gen/json/stackpanel.db.Environment.schema.strict.json +++ b/packages/proto/gen/json/stackpanel.db.Environment.schema.strict.json @@ -8,14 +8,14 @@ "type": "string" }, "public_keys": { - "description": "AGE public keys that can decrypt secrets for this environment.\n New secrets for this env are encrypted to these recipients.", + "description": "AGE public keys that can decrypt secrets for this environment.\n New secrets for this env are encrypted to these recipients.\n (example: \"age1abc1234abc1234abc1234abc1234abc1234abc1234abc1234abc1\")", "items": { "type": "string" }, "type": "array" }, "sources": { - "description": "List of SOPS-encrypted source files for this environment (without .yaml extension).\n These files are decrypted and merged to provide secrets for the environment.", + "description": "List of SOPS-encrypted source files for this environment (without .yaml extension).\n These files are decrypted and merged to provide secrets for the environment.\n (example: \"shared\")", "items": { "type": "string" }, diff --git a/packages/proto/gen/json/stackpanel.db.EnvironmentVariable.jsonschema.bundle.json b/packages/proto/gen/json/stackpanel.db.EnvironmentVariable.jsonschema.bundle.json index 2bf34aa3..4ea8ede6 100644 --- a/packages/proto/gen/json/stackpanel.db.EnvironmentVariable.jsonschema.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.EnvironmentVariable.jsonschema.bundle.json @@ -8,6 +8,10 @@ "defaultValue": { "type": "string" }, + "description": { + "description": "Human-readable description of what this variable is for and where to\n obtain it. Surfaced in the studio Variables UI and in the actionable\n error message thrown by `loadAppEnv(..., { validate: true })` when\n the variable is missing.\n (example: \"Postgres connection string used by the API server\")", + "type": "string" + }, "key": { "default": "", "type": "string" diff --git a/packages/proto/gen/json/stackpanel.db.EnvironmentVariable.jsonschema.json b/packages/proto/gen/json/stackpanel.db.EnvironmentVariable.jsonschema.json index 0e9600ea..a0dd0966 100644 --- a/packages/proto/gen/json/stackpanel.db.EnvironmentVariable.jsonschema.json +++ b/packages/proto/gen/json/stackpanel.db.EnvironmentVariable.jsonschema.json @@ -7,6 +7,10 @@ "defaultValue": { "type": "string" }, + "description": { + "description": "Human-readable description of what this variable is for and where to\n obtain it. Surfaced in the studio Variables UI and in the actionable\n error message thrown by `loadAppEnv(..., { validate: true })` when\n the variable is missing.\n (example: \"Postgres connection string used by the API server\")", + "type": "string" + }, "key": { "default": "", "type": "string" diff --git a/packages/proto/gen/json/stackpanel.db.EnvironmentVariable.jsonschema.strict.bundle.json b/packages/proto/gen/json/stackpanel.db.EnvironmentVariable.jsonschema.strict.bundle.json index 36b1277a..461e6a7b 100644 --- a/packages/proto/gen/json/stackpanel.db.EnvironmentVariable.jsonschema.strict.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.EnvironmentVariable.jsonschema.strict.bundle.json @@ -8,6 +8,10 @@ "defaultValue": { "type": "string" }, + "description": { + "description": "Human-readable description of what this variable is for and where to\n obtain it. Surfaced in the studio Variables UI and in the actionable\n error message thrown by `loadAppEnv(..., { validate: true })` when\n the variable is missing.\n (example: \"Postgres connection string used by the API server\")", + "type": "string" + }, "key": { "type": "string" }, diff --git a/packages/proto/gen/json/stackpanel.db.EnvironmentVariable.jsonschema.strict.json b/packages/proto/gen/json/stackpanel.db.EnvironmentVariable.jsonschema.strict.json index d7923357..54608fc5 100644 --- a/packages/proto/gen/json/stackpanel.db.EnvironmentVariable.jsonschema.strict.json +++ b/packages/proto/gen/json/stackpanel.db.EnvironmentVariable.jsonschema.strict.json @@ -7,6 +7,10 @@ "defaultValue": { "type": "string" }, + "description": { + "description": "Human-readable description of what this variable is for and where to\n obtain it. Surfaced in the studio Variables UI and in the actionable\n error message thrown by `loadAppEnv(..., { validate: true })` when\n the variable is missing.\n (example: \"Postgres connection string used by the API server\")", + "type": "string" + }, "key": { "type": "string" }, diff --git a/packages/proto/gen/json/stackpanel.db.EnvironmentVariable.schema.bundle.json b/packages/proto/gen/json/stackpanel.db.EnvironmentVariable.schema.bundle.json index 5be5a3b7..b993aa13 100644 --- a/packages/proto/gen/json/stackpanel.db.EnvironmentVariable.schema.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.EnvironmentVariable.schema.bundle.json @@ -8,6 +8,10 @@ "defaultValue": { "type": "string" }, + "description": { + "description": "Human-readable description of what this variable is for and where to\n obtain it. Surfaced in the studio Variables UI and in the actionable\n error message thrown by `loadAppEnv(..., { validate: true })` when\n the variable is missing.\n (example: \"Postgres connection string used by the API server\")", + "type": "string" + }, "key": { "default": "", "type": "string" diff --git a/packages/proto/gen/json/stackpanel.db.EnvironmentVariable.schema.json b/packages/proto/gen/json/stackpanel.db.EnvironmentVariable.schema.json index 2bc6309d..ecf0ac68 100644 --- a/packages/proto/gen/json/stackpanel.db.EnvironmentVariable.schema.json +++ b/packages/proto/gen/json/stackpanel.db.EnvironmentVariable.schema.json @@ -7,6 +7,10 @@ "defaultValue": { "type": "string" }, + "description": { + "description": "Human-readable description of what this variable is for and where to\n obtain it. Surfaced in the studio Variables UI and in the actionable\n error message thrown by `loadAppEnv(..., { validate: true })` when\n the variable is missing.\n (example: \"Postgres connection string used by the API server\")", + "type": "string" + }, "key": { "default": "", "type": "string" diff --git a/packages/proto/gen/json/stackpanel.db.EnvironmentVariable.schema.strict.bundle.json b/packages/proto/gen/json/stackpanel.db.EnvironmentVariable.schema.strict.bundle.json index 32158f30..927ab32b 100644 --- a/packages/proto/gen/json/stackpanel.db.EnvironmentVariable.schema.strict.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.EnvironmentVariable.schema.strict.bundle.json @@ -8,6 +8,10 @@ "defaultValue": { "type": "string" }, + "description": { + "description": "Human-readable description of what this variable is for and where to\n obtain it. Surfaced in the studio Variables UI and in the actionable\n error message thrown by `loadAppEnv(..., { validate: true })` when\n the variable is missing.\n (example: \"Postgres connection string used by the API server\")", + "type": "string" + }, "key": { "type": "string" }, diff --git a/packages/proto/gen/json/stackpanel.db.EnvironmentVariable.schema.strict.json b/packages/proto/gen/json/stackpanel.db.EnvironmentVariable.schema.strict.json index 20f045ae..791e5054 100644 --- a/packages/proto/gen/json/stackpanel.db.EnvironmentVariable.schema.strict.json +++ b/packages/proto/gen/json/stackpanel.db.EnvironmentVariable.schema.strict.json @@ -7,6 +7,10 @@ "defaultValue": { "type": "string" }, + "description": { + "description": "Human-readable description of what this variable is for and where to\n obtain it. Surfaced in the studio Variables UI and in the actionable\n error message thrown by `loadAppEnv(..., { validate: true })` when\n the variable is missing.\n (example: \"Postgres connection string used by the API server\")", + "type": "string" + }, "key": { "type": "string" }, diff --git a/packages/proto/gen/json/stackpanel.db.MasterKey.jsonschema.bundle.json b/packages/proto/gen/json/stackpanel.db.MasterKey.jsonschema.bundle.json index e1996d6b..3f8cc2d3 100644 --- a/packages/proto/gen/json/stackpanel.db.MasterKey.jsonschema.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.MasterKey.jsonschema.bundle.json @@ -7,27 +7,27 @@ "patternProperties": { "^(age_pub)$": { "default": "", - "description": "AGE public key for encrypting secrets to this key.\n Format: age1... (bech32-encoded)", + "description": "AGE public key for encrypting secrets to this key.\n Format: age1... (bech32-encoded)\n (example: \"age1abc1234abc1234abc1234abc1234abc1234abc1234abc1234abc1\")", "type": "string" }, "^(resolve_cmd)$": { - "description": "Custom command to resolve the private key (overrides ref).\n The command should output the AGE private key to stdout.\n Example: op read 'op://vault/stackpanel/age-key'", + "description": "Custom command to resolve the private key (overrides ref).\n The command should output the AGE private key to stdout.\n Example: op read 'op://vault/stackpanel/age-key'\n (example: \"op read 'op://vault/stackpanel/age-key'\")", "type": "string" } }, "properties": { "agePub": { "default": "", - "description": "AGE public key for encrypting secrets to this key.\n Format: age1... (bech32-encoded)", + "description": "AGE public key for encrypting secrets to this key.\n Format: age1... (bech32-encoded)\n (example: \"age1abc1234abc1234abc1234abc1234abc1234abc1234abc1234abc1\")", "type": "string" }, "ref": { "default": "", - "description": "Vals reference that resolves to the AGE private key.\n Examples:\n - ref+file://.stack/keys/local.txt (local file)\n - ref+awsssm://stackpanel/keys/dev (AWS SSM Parameter Store)\n - ref+vault://secret/data/stackpanel/prod#key (HashiCorp Vault)", + "description": "Vals reference that resolves to the AGE private key.\n Examples:\n - ref+file://.stack/keys/local.txt (local file)\n - ref+awsssm://stackpanel/keys/dev (AWS SSM Parameter Store)\n - ref+vault://secret/data/stackpanel/prod#key (HashiCorp Vault)\n (example: \"ref+file://.stack/keys/local.txt\")", "type": "string" }, "resolveCmd": { - "description": "Custom command to resolve the private key (overrides ref).\n The command should output the AGE private key to stdout.\n Example: op read 'op://vault/stackpanel/age-key'", + "description": "Custom command to resolve the private key (overrides ref).\n The command should output the AGE private key to stdout.\n Example: op read 'op://vault/stackpanel/age-key'\n (example: \"op read 'op://vault/stackpanel/age-key'\")", "type": "string" } }, diff --git a/packages/proto/gen/json/stackpanel.db.MasterKey.jsonschema.json b/packages/proto/gen/json/stackpanel.db.MasterKey.jsonschema.json index 7bf2d84d..b4300344 100644 --- a/packages/proto/gen/json/stackpanel.db.MasterKey.jsonschema.json +++ b/packages/proto/gen/json/stackpanel.db.MasterKey.jsonschema.json @@ -6,27 +6,27 @@ "patternProperties": { "^(age_pub)$": { "default": "", - "description": "AGE public key for encrypting secrets to this key.\n Format: age1... (bech32-encoded)", + "description": "AGE public key for encrypting secrets to this key.\n Format: age1... (bech32-encoded)\n (example: \"age1abc1234abc1234abc1234abc1234abc1234abc1234abc1234abc1\")", "type": "string" }, "^(resolve_cmd)$": { - "description": "Custom command to resolve the private key (overrides ref).\n The command should output the AGE private key to stdout.\n Example: op read 'op://vault/stackpanel/age-key'", + "description": "Custom command to resolve the private key (overrides ref).\n The command should output the AGE private key to stdout.\n Example: op read 'op://vault/stackpanel/age-key'\n (example: \"op read 'op://vault/stackpanel/age-key'\")", "type": "string" } }, "properties": { "agePub": { "default": "", - "description": "AGE public key for encrypting secrets to this key.\n Format: age1... (bech32-encoded)", + "description": "AGE public key for encrypting secrets to this key.\n Format: age1... (bech32-encoded)\n (example: \"age1abc1234abc1234abc1234abc1234abc1234abc1234abc1234abc1\")", "type": "string" }, "ref": { "default": "", - "description": "Vals reference that resolves to the AGE private key.\n Examples:\n - ref+file://.stack/keys/local.txt (local file)\n - ref+awsssm://stackpanel/keys/dev (AWS SSM Parameter Store)\n - ref+vault://secret/data/stackpanel/prod#key (HashiCorp Vault)", + "description": "Vals reference that resolves to the AGE private key.\n Examples:\n - ref+file://.stack/keys/local.txt (local file)\n - ref+awsssm://stackpanel/keys/dev (AWS SSM Parameter Store)\n - ref+vault://secret/data/stackpanel/prod#key (HashiCorp Vault)\n (example: \"ref+file://.stack/keys/local.txt\")", "type": "string" }, "resolveCmd": { - "description": "Custom command to resolve the private key (overrides ref).\n The command should output the AGE private key to stdout.\n Example: op read 'op://vault/stackpanel/age-key'", + "description": "Custom command to resolve the private key (overrides ref).\n The command should output the AGE private key to stdout.\n Example: op read 'op://vault/stackpanel/age-key'\n (example: \"op read 'op://vault/stackpanel/age-key'\")", "type": "string" } }, diff --git a/packages/proto/gen/json/stackpanel.db.MasterKey.jsonschema.strict.bundle.json b/packages/proto/gen/json/stackpanel.db.MasterKey.jsonschema.strict.bundle.json index 5e612d17..b5039372 100644 --- a/packages/proto/gen/json/stackpanel.db.MasterKey.jsonschema.strict.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.MasterKey.jsonschema.strict.bundle.json @@ -6,15 +6,15 @@ "description": "A master key for encrypting/decrypting secrets", "properties": { "agePub": { - "description": "AGE public key for encrypting secrets to this key.\n Format: age1... (bech32-encoded)", + "description": "AGE public key for encrypting secrets to this key.\n Format: age1... (bech32-encoded)\n (example: \"age1abc1234abc1234abc1234abc1234abc1234abc1234abc1234abc1\")", "type": "string" }, "ref": { - "description": "Vals reference that resolves to the AGE private key.\n Examples:\n - ref+file://.stack/keys/local.txt (local file)\n - ref+awsssm://stackpanel/keys/dev (AWS SSM Parameter Store)\n - ref+vault://secret/data/stackpanel/prod#key (HashiCorp Vault)", + "description": "Vals reference that resolves to the AGE private key.\n Examples:\n - ref+file://.stack/keys/local.txt (local file)\n - ref+awsssm://stackpanel/keys/dev (AWS SSM Parameter Store)\n - ref+vault://secret/data/stackpanel/prod#key (HashiCorp Vault)\n (example: \"ref+file://.stack/keys/local.txt\")", "type": "string" }, "resolveCmd": { - "description": "Custom command to resolve the private key (overrides ref).\n The command should output the AGE private key to stdout.\n Example: op read 'op://vault/stackpanel/age-key'", + "description": "Custom command to resolve the private key (overrides ref).\n The command should output the AGE private key to stdout.\n Example: op read 'op://vault/stackpanel/age-key'\n (example: \"op read 'op://vault/stackpanel/age-key'\")", "type": "string" } }, diff --git a/packages/proto/gen/json/stackpanel.db.MasterKey.jsonschema.strict.json b/packages/proto/gen/json/stackpanel.db.MasterKey.jsonschema.strict.json index 0da8ee4a..b4ed03f1 100644 --- a/packages/proto/gen/json/stackpanel.db.MasterKey.jsonschema.strict.json +++ b/packages/proto/gen/json/stackpanel.db.MasterKey.jsonschema.strict.json @@ -5,15 +5,15 @@ "description": "A master key for encrypting/decrypting secrets", "properties": { "agePub": { - "description": "AGE public key for encrypting secrets to this key.\n Format: age1... (bech32-encoded)", + "description": "AGE public key for encrypting secrets to this key.\n Format: age1... (bech32-encoded)\n (example: \"age1abc1234abc1234abc1234abc1234abc1234abc1234abc1234abc1\")", "type": "string" }, "ref": { - "description": "Vals reference that resolves to the AGE private key.\n Examples:\n - ref+file://.stack/keys/local.txt (local file)\n - ref+awsssm://stackpanel/keys/dev (AWS SSM Parameter Store)\n - ref+vault://secret/data/stackpanel/prod#key (HashiCorp Vault)", + "description": "Vals reference that resolves to the AGE private key.\n Examples:\n - ref+file://.stack/keys/local.txt (local file)\n - ref+awsssm://stackpanel/keys/dev (AWS SSM Parameter Store)\n - ref+vault://secret/data/stackpanel/prod#key (HashiCorp Vault)\n (example: \"ref+file://.stack/keys/local.txt\")", "type": "string" }, "resolveCmd": { - "description": "Custom command to resolve the private key (overrides ref).\n The command should output the AGE private key to stdout.\n Example: op read 'op://vault/stackpanel/age-key'", + "description": "Custom command to resolve the private key (overrides ref).\n The command should output the AGE private key to stdout.\n Example: op read 'op://vault/stackpanel/age-key'\n (example: \"op read 'op://vault/stackpanel/age-key'\")", "type": "string" } }, diff --git a/packages/proto/gen/json/stackpanel.db.MasterKey.schema.bundle.json b/packages/proto/gen/json/stackpanel.db.MasterKey.schema.bundle.json index b84b2bf2..53aac617 100644 --- a/packages/proto/gen/json/stackpanel.db.MasterKey.schema.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.MasterKey.schema.bundle.json @@ -7,27 +7,27 @@ "patternProperties": { "^(agePub)$": { "default": "", - "description": "AGE public key for encrypting secrets to this key.\n Format: age1... (bech32-encoded)", + "description": "AGE public key for encrypting secrets to this key.\n Format: age1... (bech32-encoded)\n (example: \"age1abc1234abc1234abc1234abc1234abc1234abc1234abc1234abc1\")", "type": "string" }, "^(resolveCmd)$": { - "description": "Custom command to resolve the private key (overrides ref).\n The command should output the AGE private key to stdout.\n Example: op read 'op://vault/stackpanel/age-key'", + "description": "Custom command to resolve the private key (overrides ref).\n The command should output the AGE private key to stdout.\n Example: op read 'op://vault/stackpanel/age-key'\n (example: \"op read 'op://vault/stackpanel/age-key'\")", "type": "string" } }, "properties": { "age_pub": { "default": "", - "description": "AGE public key for encrypting secrets to this key.\n Format: age1... (bech32-encoded)", + "description": "AGE public key for encrypting secrets to this key.\n Format: age1... (bech32-encoded)\n (example: \"age1abc1234abc1234abc1234abc1234abc1234abc1234abc1234abc1\")", "type": "string" }, "ref": { "default": "", - "description": "Vals reference that resolves to the AGE private key.\n Examples:\n - ref+file://.stack/keys/local.txt (local file)\n - ref+awsssm://stackpanel/keys/dev (AWS SSM Parameter Store)\n - ref+vault://secret/data/stackpanel/prod#key (HashiCorp Vault)", + "description": "Vals reference that resolves to the AGE private key.\n Examples:\n - ref+file://.stack/keys/local.txt (local file)\n - ref+awsssm://stackpanel/keys/dev (AWS SSM Parameter Store)\n - ref+vault://secret/data/stackpanel/prod#key (HashiCorp Vault)\n (example: \"ref+file://.stack/keys/local.txt\")", "type": "string" }, "resolve_cmd": { - "description": "Custom command to resolve the private key (overrides ref).\n The command should output the AGE private key to stdout.\n Example: op read 'op://vault/stackpanel/age-key'", + "description": "Custom command to resolve the private key (overrides ref).\n The command should output the AGE private key to stdout.\n Example: op read 'op://vault/stackpanel/age-key'\n (example: \"op read 'op://vault/stackpanel/age-key'\")", "type": "string" } }, diff --git a/packages/proto/gen/json/stackpanel.db.MasterKey.schema.json b/packages/proto/gen/json/stackpanel.db.MasterKey.schema.json index ed40b42f..02f793b8 100644 --- a/packages/proto/gen/json/stackpanel.db.MasterKey.schema.json +++ b/packages/proto/gen/json/stackpanel.db.MasterKey.schema.json @@ -6,27 +6,27 @@ "patternProperties": { "^(agePub)$": { "default": "", - "description": "AGE public key for encrypting secrets to this key.\n Format: age1... (bech32-encoded)", + "description": "AGE public key for encrypting secrets to this key.\n Format: age1... (bech32-encoded)\n (example: \"age1abc1234abc1234abc1234abc1234abc1234abc1234abc1234abc1\")", "type": "string" }, "^(resolveCmd)$": { - "description": "Custom command to resolve the private key (overrides ref).\n The command should output the AGE private key to stdout.\n Example: op read 'op://vault/stackpanel/age-key'", + "description": "Custom command to resolve the private key (overrides ref).\n The command should output the AGE private key to stdout.\n Example: op read 'op://vault/stackpanel/age-key'\n (example: \"op read 'op://vault/stackpanel/age-key'\")", "type": "string" } }, "properties": { "age_pub": { "default": "", - "description": "AGE public key for encrypting secrets to this key.\n Format: age1... (bech32-encoded)", + "description": "AGE public key for encrypting secrets to this key.\n Format: age1... (bech32-encoded)\n (example: \"age1abc1234abc1234abc1234abc1234abc1234abc1234abc1234abc1\")", "type": "string" }, "ref": { "default": "", - "description": "Vals reference that resolves to the AGE private key.\n Examples:\n - ref+file://.stack/keys/local.txt (local file)\n - ref+awsssm://stackpanel/keys/dev (AWS SSM Parameter Store)\n - ref+vault://secret/data/stackpanel/prod#key (HashiCorp Vault)", + "description": "Vals reference that resolves to the AGE private key.\n Examples:\n - ref+file://.stack/keys/local.txt (local file)\n - ref+awsssm://stackpanel/keys/dev (AWS SSM Parameter Store)\n - ref+vault://secret/data/stackpanel/prod#key (HashiCorp Vault)\n (example: \"ref+file://.stack/keys/local.txt\")", "type": "string" }, "resolve_cmd": { - "description": "Custom command to resolve the private key (overrides ref).\n The command should output the AGE private key to stdout.\n Example: op read 'op://vault/stackpanel/age-key'", + "description": "Custom command to resolve the private key (overrides ref).\n The command should output the AGE private key to stdout.\n Example: op read 'op://vault/stackpanel/age-key'\n (example: \"op read 'op://vault/stackpanel/age-key'\")", "type": "string" } }, diff --git a/packages/proto/gen/json/stackpanel.db.MasterKey.schema.strict.bundle.json b/packages/proto/gen/json/stackpanel.db.MasterKey.schema.strict.bundle.json index 6ce81ff2..ecf0c4e5 100644 --- a/packages/proto/gen/json/stackpanel.db.MasterKey.schema.strict.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.MasterKey.schema.strict.bundle.json @@ -6,15 +6,15 @@ "description": "A master key for encrypting/decrypting secrets", "properties": { "age_pub": { - "description": "AGE public key for encrypting secrets to this key.\n Format: age1... (bech32-encoded)", + "description": "AGE public key for encrypting secrets to this key.\n Format: age1... (bech32-encoded)\n (example: \"age1abc1234abc1234abc1234abc1234abc1234abc1234abc1234abc1\")", "type": "string" }, "ref": { - "description": "Vals reference that resolves to the AGE private key.\n Examples:\n - ref+file://.stack/keys/local.txt (local file)\n - ref+awsssm://stackpanel/keys/dev (AWS SSM Parameter Store)\n - ref+vault://secret/data/stackpanel/prod#key (HashiCorp Vault)", + "description": "Vals reference that resolves to the AGE private key.\n Examples:\n - ref+file://.stack/keys/local.txt (local file)\n - ref+awsssm://stackpanel/keys/dev (AWS SSM Parameter Store)\n - ref+vault://secret/data/stackpanel/prod#key (HashiCorp Vault)\n (example: \"ref+file://.stack/keys/local.txt\")", "type": "string" }, "resolve_cmd": { - "description": "Custom command to resolve the private key (overrides ref).\n The command should output the AGE private key to stdout.\n Example: op read 'op://vault/stackpanel/age-key'", + "description": "Custom command to resolve the private key (overrides ref).\n The command should output the AGE private key to stdout.\n Example: op read 'op://vault/stackpanel/age-key'\n (example: \"op read 'op://vault/stackpanel/age-key'\")", "type": "string" } }, diff --git a/packages/proto/gen/json/stackpanel.db.MasterKey.schema.strict.json b/packages/proto/gen/json/stackpanel.db.MasterKey.schema.strict.json index 82377064..a5e21d0e 100644 --- a/packages/proto/gen/json/stackpanel.db.MasterKey.schema.strict.json +++ b/packages/proto/gen/json/stackpanel.db.MasterKey.schema.strict.json @@ -5,15 +5,15 @@ "description": "A master key for encrypting/decrypting secrets", "properties": { "age_pub": { - "description": "AGE public key for encrypting secrets to this key.\n Format: age1... (bech32-encoded)", + "description": "AGE public key for encrypting secrets to this key.\n Format: age1... (bech32-encoded)\n (example: \"age1abc1234abc1234abc1234abc1234abc1234abc1234abc1234abc1\")", "type": "string" }, "ref": { - "description": "Vals reference that resolves to the AGE private key.\n Examples:\n - ref+file://.stack/keys/local.txt (local file)\n - ref+awsssm://stackpanel/keys/dev (AWS SSM Parameter Store)\n - ref+vault://secret/data/stackpanel/prod#key (HashiCorp Vault)", + "description": "Vals reference that resolves to the AGE private key.\n Examples:\n - ref+file://.stack/keys/local.txt (local file)\n - ref+awsssm://stackpanel/keys/dev (AWS SSM Parameter Store)\n - ref+vault://secret/data/stackpanel/prod#key (HashiCorp Vault)\n (example: \"ref+file://.stack/keys/local.txt\")", "type": "string" }, "resolve_cmd": { - "description": "Custom command to resolve the private key (overrides ref).\n The command should output the AGE private key to stdout.\n Example: op read 'op://vault/stackpanel/age-key'", + "description": "Custom command to resolve the private key (overrides ref).\n The command should output the AGE private key to stdout.\n Example: op read 'op://vault/stackpanel/age-key'\n (example: \"op read 'op://vault/stackpanel/age-key'\")", "type": "string" } }, diff --git a/packages/proto/gen/json/stackpanel.db.Module.jsonschema.bundle.json b/packages/proto/gen/json/stackpanel.db.Module.jsonschema.bundle.json index e95a1275..5c4aee79 100644 --- a/packages/proto/gen/json/stackpanel.db.Module.jsonschema.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.Module.jsonschema.bundle.json @@ -6,7 +6,7 @@ "description": "Configuration for a stackpanel module", "patternProperties": { "^(config_schema)$": { - "description": "JSON Schema for generating configuration forms.\n Describes the module's configurable options.", + "description": "JSON Schema for generating configuration forms.\n Describes the module's configurable options.\n (example: \"{ \\\"type\\\": \\\"object\\\", \\\"properties\\\": { \\\"version\\\": { \\\"type\\\": \\\"string\\\" } } }\")", "type": "string" }, "^(healthcheck_module)$": { @@ -24,7 +24,7 @@ "type": "object" }, "configSchema": { - "description": "JSON Schema for generating configuration forms.\n Describes the module's configurable options.", + "description": "JSON Schema for generating configuration forms.\n Describes the module's configurable options.\n (example: \"{ \\\"type\\\": \\\"object\\\", \\\"properties\\\": { \\\"version\\\": { \\\"type\\\": \\\"string\\\" } } }\")", "type": "string" }, "conflicts": { diff --git a/packages/proto/gen/json/stackpanel.db.Module.jsonschema.json b/packages/proto/gen/json/stackpanel.db.Module.jsonschema.json index 948b891c..0e7141e3 100644 --- a/packages/proto/gen/json/stackpanel.db.Module.jsonschema.json +++ b/packages/proto/gen/json/stackpanel.db.Module.jsonschema.json @@ -5,7 +5,7 @@ "description": "Configuration for a stackpanel module", "patternProperties": { "^(config_schema)$": { - "description": "JSON Schema for generating configuration forms.\n Describes the module's configurable options.", + "description": "JSON Schema for generating configuration forms.\n Describes the module's configurable options.\n (example: \"{ \\\"type\\\": \\\"object\\\", \\\"properties\\\": { \\\"version\\\": { \\\"type\\\": \\\"string\\\" } } }\")", "type": "string" }, "^(healthcheck_module)$": { @@ -23,7 +23,7 @@ "type": "object" }, "configSchema": { - "description": "JSON Schema for generating configuration forms.\n Describes the module's configurable options.", + "description": "JSON Schema for generating configuration forms.\n Describes the module's configurable options.\n (example: \"{ \\\"type\\\": \\\"object\\\", \\\"properties\\\": { \\\"version\\\": { \\\"type\\\": \\\"string\\\" } } }\")", "type": "string" }, "conflicts": { diff --git a/packages/proto/gen/json/stackpanel.db.Module.jsonschema.strict.bundle.json b/packages/proto/gen/json/stackpanel.db.Module.jsonschema.strict.bundle.json index f061700c..c3f0ff83 100644 --- a/packages/proto/gen/json/stackpanel.db.Module.jsonschema.strict.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.Module.jsonschema.strict.bundle.json @@ -15,7 +15,7 @@ "type": "object" }, "configSchema": { - "description": "JSON Schema for generating configuration forms.\n Describes the module's configurable options.", + "description": "JSON Schema for generating configuration forms.\n Describes the module's configurable options.\n (example: \"{ \\\"type\\\": \\\"object\\\", \\\"properties\\\": { \\\"version\\\": { \\\"type\\\": \\\"string\\\" } } }\")", "type": "string" }, "conflicts": { diff --git a/packages/proto/gen/json/stackpanel.db.Module.jsonschema.strict.json b/packages/proto/gen/json/stackpanel.db.Module.jsonschema.strict.json index aceb9d25..e1fde2c1 100644 --- a/packages/proto/gen/json/stackpanel.db.Module.jsonschema.strict.json +++ b/packages/proto/gen/json/stackpanel.db.Module.jsonschema.strict.json @@ -14,7 +14,7 @@ "type": "object" }, "configSchema": { - "description": "JSON Schema for generating configuration forms.\n Describes the module's configurable options.", + "description": "JSON Schema for generating configuration forms.\n Describes the module's configurable options.\n (example: \"{ \\\"type\\\": \\\"object\\\", \\\"properties\\\": { \\\"version\\\": { \\\"type\\\": \\\"string\\\" } } }\")", "type": "string" }, "conflicts": { diff --git a/packages/proto/gen/json/stackpanel.db.Module.schema.bundle.json b/packages/proto/gen/json/stackpanel.db.Module.schema.bundle.json index 61aeb319..1c0c3a68 100644 --- a/packages/proto/gen/json/stackpanel.db.Module.schema.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.Module.schema.bundle.json @@ -6,7 +6,7 @@ "description": "Configuration for a stackpanel module", "patternProperties": { "^(configSchema)$": { - "description": "JSON Schema for generating configuration forms.\n Describes the module's configurable options.", + "description": "JSON Schema for generating configuration forms.\n Describes the module's configurable options.\n (example: \"{ \\\"type\\\": \\\"object\\\", \\\"properties\\\": { \\\"version\\\": { \\\"type\\\": \\\"string\\\" } } }\")", "type": "string" }, "^(healthcheckModule)$": { @@ -24,7 +24,7 @@ "type": "object" }, "config_schema": { - "description": "JSON Schema for generating configuration forms.\n Describes the module's configurable options.", + "description": "JSON Schema for generating configuration forms.\n Describes the module's configurable options.\n (example: \"{ \\\"type\\\": \\\"object\\\", \\\"properties\\\": { \\\"version\\\": { \\\"type\\\": \\\"string\\\" } } }\")", "type": "string" }, "conflicts": { diff --git a/packages/proto/gen/json/stackpanel.db.Module.schema.json b/packages/proto/gen/json/stackpanel.db.Module.schema.json index 844289c5..ab0277f7 100644 --- a/packages/proto/gen/json/stackpanel.db.Module.schema.json +++ b/packages/proto/gen/json/stackpanel.db.Module.schema.json @@ -5,7 +5,7 @@ "description": "Configuration for a stackpanel module", "patternProperties": { "^(configSchema)$": { - "description": "JSON Schema for generating configuration forms.\n Describes the module's configurable options.", + "description": "JSON Schema for generating configuration forms.\n Describes the module's configurable options.\n (example: \"{ \\\"type\\\": \\\"object\\\", \\\"properties\\\": { \\\"version\\\": { \\\"type\\\": \\\"string\\\" } } }\")", "type": "string" }, "^(healthcheckModule)$": { @@ -23,7 +23,7 @@ "type": "object" }, "config_schema": { - "description": "JSON Schema for generating configuration forms.\n Describes the module's configurable options.", + "description": "JSON Schema for generating configuration forms.\n Describes the module's configurable options.\n (example: \"{ \\\"type\\\": \\\"object\\\", \\\"properties\\\": { \\\"version\\\": { \\\"type\\\": \\\"string\\\" } } }\")", "type": "string" }, "conflicts": { diff --git a/packages/proto/gen/json/stackpanel.db.Module.schema.strict.bundle.json b/packages/proto/gen/json/stackpanel.db.Module.schema.strict.bundle.json index 74a04a9f..8f887b4c 100644 --- a/packages/proto/gen/json/stackpanel.db.Module.schema.strict.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.Module.schema.strict.bundle.json @@ -15,7 +15,7 @@ "type": "object" }, "config_schema": { - "description": "JSON Schema for generating configuration forms.\n Describes the module's configurable options.", + "description": "JSON Schema for generating configuration forms.\n Describes the module's configurable options.\n (example: \"{ \\\"type\\\": \\\"object\\\", \\\"properties\\\": { \\\"version\\\": { \\\"type\\\": \\\"string\\\" } } }\")", "type": "string" }, "conflicts": { diff --git a/packages/proto/gen/json/stackpanel.db.Module.schema.strict.json b/packages/proto/gen/json/stackpanel.db.Module.schema.strict.json index 958c5247..c5ebfa46 100644 --- a/packages/proto/gen/json/stackpanel.db.Module.schema.strict.json +++ b/packages/proto/gen/json/stackpanel.db.Module.schema.strict.json @@ -14,7 +14,7 @@ "type": "object" }, "config_schema": { - "description": "JSON Schema for generating configuration forms.\n Describes the module's configurable options.", + "description": "JSON Schema for generating configuration forms.\n Describes the module's configurable options.\n (example: \"{ \\\"type\\\": \\\"object\\\", \\\"properties\\\": { \\\"version\\\": { \\\"type\\\": \\\"string\\\" } } }\")", "type": "string" }, "conflicts": { diff --git a/packages/proto/gen/json/stackpanel.db.ModuleResponse.jsonschema.bundle.json b/packages/proto/gen/json/stackpanel.db.ModuleResponse.jsonschema.bundle.json index 8745304e..9588911b 100644 --- a/packages/proto/gen/json/stackpanel.db.ModuleResponse.jsonschema.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.ModuleResponse.jsonschema.bundle.json @@ -6,7 +6,7 @@ "description": "Configuration for a stackpanel module", "patternProperties": { "^(config_schema)$": { - "description": "JSON Schema for generating configuration forms.\n Describes the module's configurable options.", + "description": "JSON Schema for generating configuration forms.\n Describes the module's configurable options.\n (example: \"{ \\\"type\\\": \\\"object\\\", \\\"properties\\\": { \\\"version\\\": { \\\"type\\\": \\\"string\\\" } } }\")", "type": "string" }, "^(healthcheck_module)$": { @@ -24,7 +24,7 @@ "type": "object" }, "configSchema": { - "description": "JSON Schema for generating configuration forms.\n Describes the module's configurable options.", + "description": "JSON Schema for generating configuration forms.\n Describes the module's configurable options.\n (example: \"{ \\\"type\\\": \\\"object\\\", \\\"properties\\\": { \\\"version\\\": { \\\"type\\\": \\\"string\\\" } } }\")", "type": "string" }, "conflicts": { diff --git a/packages/proto/gen/json/stackpanel.db.ModuleResponse.jsonschema.strict.bundle.json b/packages/proto/gen/json/stackpanel.db.ModuleResponse.jsonschema.strict.bundle.json index d171c435..9ec4a0ae 100644 --- a/packages/proto/gen/json/stackpanel.db.ModuleResponse.jsonschema.strict.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.ModuleResponse.jsonschema.strict.bundle.json @@ -15,7 +15,7 @@ "type": "object" }, "configSchema": { - "description": "JSON Schema for generating configuration forms.\n Describes the module's configurable options.", + "description": "JSON Schema for generating configuration forms.\n Describes the module's configurable options.\n (example: \"{ \\\"type\\\": \\\"object\\\", \\\"properties\\\": { \\\"version\\\": { \\\"type\\\": \\\"string\\\" } } }\")", "type": "string" }, "conflicts": { diff --git a/packages/proto/gen/json/stackpanel.db.ModuleResponse.schema.bundle.json b/packages/proto/gen/json/stackpanel.db.ModuleResponse.schema.bundle.json index 84d204f8..65a49fcf 100644 --- a/packages/proto/gen/json/stackpanel.db.ModuleResponse.schema.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.ModuleResponse.schema.bundle.json @@ -6,7 +6,7 @@ "description": "Configuration for a stackpanel module", "patternProperties": { "^(configSchema)$": { - "description": "JSON Schema for generating configuration forms.\n Describes the module's configurable options.", + "description": "JSON Schema for generating configuration forms.\n Describes the module's configurable options.\n (example: \"{ \\\"type\\\": \\\"object\\\", \\\"properties\\\": { \\\"version\\\": { \\\"type\\\": \\\"string\\\" } } }\")", "type": "string" }, "^(healthcheckModule)$": { @@ -24,7 +24,7 @@ "type": "object" }, "config_schema": { - "description": "JSON Schema for generating configuration forms.\n Describes the module's configurable options.", + "description": "JSON Schema for generating configuration forms.\n Describes the module's configurable options.\n (example: \"{ \\\"type\\\": \\\"object\\\", \\\"properties\\\": { \\\"version\\\": { \\\"type\\\": \\\"string\\\" } } }\")", "type": "string" }, "conflicts": { diff --git a/packages/proto/gen/json/stackpanel.db.ModuleResponse.schema.strict.bundle.json b/packages/proto/gen/json/stackpanel.db.ModuleResponse.schema.strict.bundle.json index 3450f64a..e2192990 100644 --- a/packages/proto/gen/json/stackpanel.db.ModuleResponse.schema.strict.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.ModuleResponse.schema.strict.bundle.json @@ -15,7 +15,7 @@ "type": "object" }, "config_schema": { - "description": "JSON Schema for generating configuration forms.\n Describes the module's configurable options.", + "description": "JSON Schema for generating configuration forms.\n Describes the module's configurable options.\n (example: \"{ \\\"type\\\": \\\"object\\\", \\\"properties\\\": { \\\"version\\\": { \\\"type\\\": \\\"string\\\" } } }\")", "type": "string" }, "conflicts": { diff --git a/packages/proto/gen/json/stackpanel.db.Modules.jsonschema.bundle.json b/packages/proto/gen/json/stackpanel.db.Modules.jsonschema.bundle.json index cbfc69d2..cc635c07 100644 --- a/packages/proto/gen/json/stackpanel.db.Modules.jsonschema.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.Modules.jsonschema.bundle.json @@ -6,7 +6,7 @@ "description": "Configuration for a stackpanel module", "patternProperties": { "^(config_schema)$": { - "description": "JSON Schema for generating configuration forms.\n Describes the module's configurable options.", + "description": "JSON Schema for generating configuration forms.\n Describes the module's configurable options.\n (example: \"{ \\\"type\\\": \\\"object\\\", \\\"properties\\\": { \\\"version\\\": { \\\"type\\\": \\\"string\\\" } } }\")", "type": "string" }, "^(healthcheck_module)$": { @@ -24,7 +24,7 @@ "type": "object" }, "configSchema": { - "description": "JSON Schema for generating configuration forms.\n Describes the module's configurable options.", + "description": "JSON Schema for generating configuration forms.\n Describes the module's configurable options.\n (example: \"{ \\\"type\\\": \\\"object\\\", \\\"properties\\\": { \\\"version\\\": { \\\"type\\\": \\\"string\\\" } } }\")", "type": "string" }, "conflicts": { diff --git a/packages/proto/gen/json/stackpanel.db.Modules.jsonschema.strict.bundle.json b/packages/proto/gen/json/stackpanel.db.Modules.jsonschema.strict.bundle.json index f6cdb919..af10fd59 100644 --- a/packages/proto/gen/json/stackpanel.db.Modules.jsonschema.strict.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.Modules.jsonschema.strict.bundle.json @@ -15,7 +15,7 @@ "type": "object" }, "configSchema": { - "description": "JSON Schema for generating configuration forms.\n Describes the module's configurable options.", + "description": "JSON Schema for generating configuration forms.\n Describes the module's configurable options.\n (example: \"{ \\\"type\\\": \\\"object\\\", \\\"properties\\\": { \\\"version\\\": { \\\"type\\\": \\\"string\\\" } } }\")", "type": "string" }, "conflicts": { diff --git a/packages/proto/gen/json/stackpanel.db.Modules.schema.bundle.json b/packages/proto/gen/json/stackpanel.db.Modules.schema.bundle.json index c38f0cdd..62242762 100644 --- a/packages/proto/gen/json/stackpanel.db.Modules.schema.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.Modules.schema.bundle.json @@ -6,7 +6,7 @@ "description": "Configuration for a stackpanel module", "patternProperties": { "^(configSchema)$": { - "description": "JSON Schema for generating configuration forms.\n Describes the module's configurable options.", + "description": "JSON Schema for generating configuration forms.\n Describes the module's configurable options.\n (example: \"{ \\\"type\\\": \\\"object\\\", \\\"properties\\\": { \\\"version\\\": { \\\"type\\\": \\\"string\\\" } } }\")", "type": "string" }, "^(healthcheckModule)$": { @@ -24,7 +24,7 @@ "type": "object" }, "config_schema": { - "description": "JSON Schema for generating configuration forms.\n Describes the module's configurable options.", + "description": "JSON Schema for generating configuration forms.\n Describes the module's configurable options.\n (example: \"{ \\\"type\\\": \\\"object\\\", \\\"properties\\\": { \\\"version\\\": { \\\"type\\\": \\\"string\\\" } } }\")", "type": "string" }, "conflicts": { diff --git a/packages/proto/gen/json/stackpanel.db.Modules.schema.strict.bundle.json b/packages/proto/gen/json/stackpanel.db.Modules.schema.strict.bundle.json index 7fdd9d5f..0fefdde3 100644 --- a/packages/proto/gen/json/stackpanel.db.Modules.schema.strict.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.Modules.schema.strict.bundle.json @@ -15,7 +15,7 @@ "type": "object" }, "config_schema": { - "description": "JSON Schema for generating configuration forms.\n Describes the module's configurable options.", + "description": "JSON Schema for generating configuration forms.\n Describes the module's configurable options.\n (example: \"{ \\\"type\\\": \\\"object\\\", \\\"properties\\\": { \\\"version\\\": { \\\"type\\\": \\\"string\\\" } } }\")", "type": "string" }, "conflicts": { diff --git a/packages/proto/gen/json/stackpanel.db.Secrets.jsonschema.bundle.json b/packages/proto/gen/json/stackpanel.db.Secrets.jsonschema.bundle.json index a5455ac2..ace7125d 100644 --- a/packages/proto/gen/json/stackpanel.db.Secrets.jsonschema.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.Secrets.jsonschema.bundle.json @@ -9,7 +9,7 @@ "type": "string" }, "language": { - "description": "Target language for generated code (e.g., \"typescript\", \"go\", \"python\").\n Informational only for now; codegen selection is based on the target key.", + "description": "Target language for generated code (e.g., \"typescript\", \"go\", \"python\").\n Informational only for now; codegen selection is based on the target key.\n (example: \"typescript\")", "type": "string" }, "name": { @@ -25,7 +25,7 @@ "description": "Environment-specific secrets configuration", "patternProperties": { "^(public_keys)$": { - "description": "AGE public keys that can decrypt secrets for this environment.\n New secrets for this env are encrypted to these recipients.", + "description": "AGE public keys that can decrypt secrets for this environment.\n New secrets for this env are encrypted to these recipients.\n (example: \"age1abc1234abc1234abc1234abc1234abc1234abc1234abc1234abc1\")", "items": { "type": "string" }, @@ -37,14 +37,14 @@ "type": "string" }, "publicKeys": { - "description": "AGE public keys that can decrypt secrets for this environment.\n New secrets for this env are encrypted to these recipients.", + "description": "AGE public keys that can decrypt secrets for this environment.\n New secrets for this env are encrypted to these recipients.\n (example: \"age1abc1234abc1234abc1234abc1234abc1234abc1234abc1234abc1\")", "items": { "type": "string" }, "type": "array" }, "sources": { - "description": "List of SOPS-encrypted source files for this environment (without .yaml extension).\n These files are decrypted and merged to provide secrets for the environment.", + "description": "List of SOPS-encrypted source files for this environment (without .yaml extension).\n These files are decrypted and merged to provide secrets for the environment.\n (example: \"shared\")", "items": { "type": "string" }, @@ -61,27 +61,27 @@ "patternProperties": { "^(age_pub)$": { "default": "", - "description": "AGE public key for encrypting secrets to this key.\n Format: age1... (bech32-encoded)", + "description": "AGE public key for encrypting secrets to this key.\n Format: age1... (bech32-encoded)\n (example: \"age1abc1234abc1234abc1234abc1234abc1234abc1234abc1234abc1\")", "type": "string" }, "^(resolve_cmd)$": { - "description": "Custom command to resolve the private key (overrides ref).\n The command should output the AGE private key to stdout.\n Example: op read 'op://vault/stackpanel/age-key'", + "description": "Custom command to resolve the private key (overrides ref).\n The command should output the AGE private key to stdout.\n Example: op read 'op://vault/stackpanel/age-key'\n (example: \"op read 'op://vault/stackpanel/age-key'\")", "type": "string" } }, "properties": { "agePub": { "default": "", - "description": "AGE public key for encrypting secrets to this key.\n Format: age1... (bech32-encoded)", + "description": "AGE public key for encrypting secrets to this key.\n Format: age1... (bech32-encoded)\n (example: \"age1abc1234abc1234abc1234abc1234abc1234abc1234abc1234abc1\")", "type": "string" }, "ref": { "default": "", - "description": "Vals reference that resolves to the AGE private key.\n Examples:\n - ref+file://.stack/keys/local.txt (local file)\n - ref+awsssm://stackpanel/keys/dev (AWS SSM Parameter Store)\n - ref+vault://secret/data/stackpanel/prod#key (HashiCorp Vault)", + "description": "Vals reference that resolves to the AGE private key.\n Examples:\n - ref+file://.stack/keys/local.txt (local file)\n - ref+awsssm://stackpanel/keys/dev (AWS SSM Parameter Store)\n - ref+vault://secret/data/stackpanel/prod#key (HashiCorp Vault)\n (example: \"ref+file://.stack/keys/local.txt\")", "type": "string" }, "resolveCmd": { - "description": "Custom command to resolve the private key (overrides ref).\n The command should output the AGE private key to stdout.\n Example: op read 'op://vault/stackpanel/age-key'", + "description": "Custom command to resolve the private key (overrides ref).\n The command should output the AGE private key to stdout.\n Example: op read 'op://vault/stackpanel/age-key'\n (example: \"op read 'op://vault/stackpanel/age-key'\")", "type": "string" } }, @@ -94,7 +94,7 @@ "description": "Secrets management configuration", "patternProperties": { "^(input_directory)$": { - "description": "Directory containing SOPS-encrypted secrets (legacy SOPS layout).\n Used when decrypting/merging YAML sources defined under environments.", + "description": "Directory containing SOPS-encrypted secrets (legacy SOPS layout).\n Used when decrypting/merging YAML sources defined under environments.\n (example: \".stack/secrets\")", "type": "string" }, "^(master_keys)$": { @@ -111,7 +111,7 @@ "type": "string" }, "^(system_keys)$": { - "description": "System-level AGE public keys (CI, deploy servers, etc.).\n These keys can decrypt all secrets regardless of environment restrictions.", + "description": "System-level AGE public keys (CI, deploy servers, etc.).\n These keys can decrypt all secrets regardless of environment restrictions.\n (example: \"age1ci1234ci1234ci1234ci1234ci1234ci1234ci1234ci1234ci1\")", "items": { "type": "string" }, @@ -154,7 +154,7 @@ "type": "object" }, "inputDirectory": { - "description": "Directory containing SOPS-encrypted secrets (legacy SOPS layout).\n Used when decrypting/merging YAML sources defined under environments.", + "description": "Directory containing SOPS-encrypted secrets (legacy SOPS layout).\n Used when decrypting/merging YAML sources defined under environments.\n (example: \".stack/secrets\")", "type": "string" }, "masterKeys": { @@ -171,7 +171,7 @@ "type": "string" }, "systemKeys": { - "description": "System-level AGE public keys (CI, deploy servers, etc.).\n These keys can decrypt all secrets regardless of environment restrictions.", + "description": "System-level AGE public keys (CI, deploy servers, etc.).\n These keys can decrypt all secrets regardless of environment restrictions.\n (example: \"age1ci1234ci1234ci1234ci1234ci1234ci1234ci1234ci1234ci1\")", "items": { "type": "string" }, diff --git a/packages/proto/gen/json/stackpanel.db.Secrets.jsonschema.json b/packages/proto/gen/json/stackpanel.db.Secrets.jsonschema.json index dcd99a17..440d4f96 100644 --- a/packages/proto/gen/json/stackpanel.db.Secrets.jsonschema.json +++ b/packages/proto/gen/json/stackpanel.db.Secrets.jsonschema.json @@ -5,7 +5,7 @@ "description": "Secrets management configuration", "patternProperties": { "^(input_directory)$": { - "description": "Directory containing SOPS-encrypted secrets (legacy SOPS layout).\n Used when decrypting/merging YAML sources defined under environments.", + "description": "Directory containing SOPS-encrypted secrets (legacy SOPS layout).\n Used when decrypting/merging YAML sources defined under environments.\n (example: \".stack/secrets\")", "type": "string" }, "^(master_keys)$": { @@ -22,7 +22,7 @@ "type": "string" }, "^(system_keys)$": { - "description": "System-level AGE public keys (CI, deploy servers, etc.).\n These keys can decrypt all secrets regardless of environment restrictions.", + "description": "System-level AGE public keys (CI, deploy servers, etc.).\n These keys can decrypt all secrets regardless of environment restrictions.\n (example: \"age1ci1234ci1234ci1234ci1234ci1234ci1234ci1234ci1234ci1\")", "items": { "type": "string" }, @@ -65,7 +65,7 @@ "type": "object" }, "inputDirectory": { - "description": "Directory containing SOPS-encrypted secrets (legacy SOPS layout).\n Used when decrypting/merging YAML sources defined under environments.", + "description": "Directory containing SOPS-encrypted secrets (legacy SOPS layout).\n Used when decrypting/merging YAML sources defined under environments.\n (example: \".stack/secrets\")", "type": "string" }, "masterKeys": { @@ -82,7 +82,7 @@ "type": "string" }, "systemKeys": { - "description": "System-level AGE public keys (CI, deploy servers, etc.).\n These keys can decrypt all secrets regardless of environment restrictions.", + "description": "System-level AGE public keys (CI, deploy servers, etc.).\n These keys can decrypt all secrets regardless of environment restrictions.\n (example: \"age1ci1234ci1234ci1234ci1234ci1234ci1234ci1234ci1234ci1\")", "items": { "type": "string" }, diff --git a/packages/proto/gen/json/stackpanel.db.Secrets.jsonschema.strict.bundle.json b/packages/proto/gen/json/stackpanel.db.Secrets.jsonschema.strict.bundle.json index 6c444660..c7ed02e7 100644 --- a/packages/proto/gen/json/stackpanel.db.Secrets.jsonschema.strict.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.Secrets.jsonschema.strict.bundle.json @@ -9,7 +9,7 @@ "type": "string" }, "language": { - "description": "Target language for generated code (e.g., \"typescript\", \"go\", \"python\").\n Informational only for now; codegen selection is based on the target key.", + "description": "Target language for generated code (e.g., \"typescript\", \"go\", \"python\").\n Informational only for now; codegen selection is based on the target key.\n (example: \"typescript\")", "type": "string" }, "name": { @@ -28,14 +28,14 @@ "type": "string" }, "publicKeys": { - "description": "AGE public keys that can decrypt secrets for this environment.\n New secrets for this env are encrypted to these recipients.", + "description": "AGE public keys that can decrypt secrets for this environment.\n New secrets for this env are encrypted to these recipients.\n (example: \"age1abc1234abc1234abc1234abc1234abc1234abc1234abc1234abc1\")", "items": { "type": "string" }, "type": "array" }, "sources": { - "description": "List of SOPS-encrypted source files for this environment (without .yaml extension).\n These files are decrypted and merged to provide secrets for the environment.", + "description": "List of SOPS-encrypted source files for this environment (without .yaml extension).\n These files are decrypted and merged to provide secrets for the environment.\n (example: \"shared\")", "items": { "type": "string" }, @@ -51,15 +51,15 @@ "description": "A master key for encrypting/decrypting secrets", "properties": { "agePub": { - "description": "AGE public key for encrypting secrets to this key.\n Format: age1... (bech32-encoded)", + "description": "AGE public key for encrypting secrets to this key.\n Format: age1... (bech32-encoded)\n (example: \"age1abc1234abc1234abc1234abc1234abc1234abc1234abc1234abc1\")", "type": "string" }, "ref": { - "description": "Vals reference that resolves to the AGE private key.\n Examples:\n - ref+file://.stack/keys/local.txt (local file)\n - ref+awsssm://stackpanel/keys/dev (AWS SSM Parameter Store)\n - ref+vault://secret/data/stackpanel/prod#key (HashiCorp Vault)", + "description": "Vals reference that resolves to the AGE private key.\n Examples:\n - ref+file://.stack/keys/local.txt (local file)\n - ref+awsssm://stackpanel/keys/dev (AWS SSM Parameter Store)\n - ref+vault://secret/data/stackpanel/prod#key (HashiCorp Vault)\n (example: \"ref+file://.stack/keys/local.txt\")", "type": "string" }, "resolveCmd": { - "description": "Custom command to resolve the private key (overrides ref).\n The command should output the AGE private key to stdout.\n Example: op read 'op://vault/stackpanel/age-key'", + "description": "Custom command to resolve the private key (overrides ref).\n The command should output the AGE private key to stdout.\n Example: op read 'op://vault/stackpanel/age-key'\n (example: \"op read 'op://vault/stackpanel/age-key'\")", "type": "string" } }, @@ -109,7 +109,7 @@ "type": "object" }, "inputDirectory": { - "description": "Directory containing SOPS-encrypted secrets (legacy SOPS layout).\n Used when decrypting/merging YAML sources defined under environments.", + "description": "Directory containing SOPS-encrypted secrets (legacy SOPS layout).\n Used when decrypting/merging YAML sources defined under environments.\n (example: \".stack/secrets\")", "type": "string" }, "masterKeys": { @@ -126,7 +126,7 @@ "type": "string" }, "systemKeys": { - "description": "System-level AGE public keys (CI, deploy servers, etc.).\n These keys can decrypt all secrets regardless of environment restrictions.", + "description": "System-level AGE public keys (CI, deploy servers, etc.).\n These keys can decrypt all secrets regardless of environment restrictions.\n (example: \"age1ci1234ci1234ci1234ci1234ci1234ci1234ci1234ci1234ci1\")", "items": { "type": "string" }, diff --git a/packages/proto/gen/json/stackpanel.db.Secrets.jsonschema.strict.json b/packages/proto/gen/json/stackpanel.db.Secrets.jsonschema.strict.json index 641a6e80..77304b56 100644 --- a/packages/proto/gen/json/stackpanel.db.Secrets.jsonschema.strict.json +++ b/packages/proto/gen/json/stackpanel.db.Secrets.jsonschema.strict.json @@ -38,7 +38,7 @@ "type": "object" }, "inputDirectory": { - "description": "Directory containing SOPS-encrypted secrets (legacy SOPS layout).\n Used when decrypting/merging YAML sources defined under environments.", + "description": "Directory containing SOPS-encrypted secrets (legacy SOPS layout).\n Used when decrypting/merging YAML sources defined under environments.\n (example: \".stack/secrets\")", "type": "string" }, "masterKeys": { @@ -55,7 +55,7 @@ "type": "string" }, "systemKeys": { - "description": "System-level AGE public keys (CI, deploy servers, etc.).\n These keys can decrypt all secrets regardless of environment restrictions.", + "description": "System-level AGE public keys (CI, deploy servers, etc.).\n These keys can decrypt all secrets regardless of environment restrictions.\n (example: \"age1ci1234ci1234ci1234ci1234ci1234ci1234ci1234ci1234ci1\")", "items": { "type": "string" }, diff --git a/packages/proto/gen/json/stackpanel.db.Secrets.schema.bundle.json b/packages/proto/gen/json/stackpanel.db.Secrets.schema.bundle.json index 32737384..fc1aeefb 100644 --- a/packages/proto/gen/json/stackpanel.db.Secrets.schema.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.Secrets.schema.bundle.json @@ -9,7 +9,7 @@ "type": "string" }, "language": { - "description": "Target language for generated code (e.g., \"typescript\", \"go\", \"python\").\n Informational only for now; codegen selection is based on the target key.", + "description": "Target language for generated code (e.g., \"typescript\", \"go\", \"python\").\n Informational only for now; codegen selection is based on the target key.\n (example: \"typescript\")", "type": "string" }, "name": { @@ -25,7 +25,7 @@ "description": "Environment-specific secrets configuration", "patternProperties": { "^(publicKeys)$": { - "description": "AGE public keys that can decrypt secrets for this environment.\n New secrets for this env are encrypted to these recipients.", + "description": "AGE public keys that can decrypt secrets for this environment.\n New secrets for this env are encrypted to these recipients.\n (example: \"age1abc1234abc1234abc1234abc1234abc1234abc1234abc1234abc1\")", "items": { "type": "string" }, @@ -37,14 +37,14 @@ "type": "string" }, "public_keys": { - "description": "AGE public keys that can decrypt secrets for this environment.\n New secrets for this env are encrypted to these recipients.", + "description": "AGE public keys that can decrypt secrets for this environment.\n New secrets for this env are encrypted to these recipients.\n (example: \"age1abc1234abc1234abc1234abc1234abc1234abc1234abc1234abc1\")", "items": { "type": "string" }, "type": "array" }, "sources": { - "description": "List of SOPS-encrypted source files for this environment (without .yaml extension).\n These files are decrypted and merged to provide secrets for the environment.", + "description": "List of SOPS-encrypted source files for this environment (without .yaml extension).\n These files are decrypted and merged to provide secrets for the environment.\n (example: \"shared\")", "items": { "type": "string" }, @@ -61,27 +61,27 @@ "patternProperties": { "^(agePub)$": { "default": "", - "description": "AGE public key for encrypting secrets to this key.\n Format: age1... (bech32-encoded)", + "description": "AGE public key for encrypting secrets to this key.\n Format: age1... (bech32-encoded)\n (example: \"age1abc1234abc1234abc1234abc1234abc1234abc1234abc1234abc1\")", "type": "string" }, "^(resolveCmd)$": { - "description": "Custom command to resolve the private key (overrides ref).\n The command should output the AGE private key to stdout.\n Example: op read 'op://vault/stackpanel/age-key'", + "description": "Custom command to resolve the private key (overrides ref).\n The command should output the AGE private key to stdout.\n Example: op read 'op://vault/stackpanel/age-key'\n (example: \"op read 'op://vault/stackpanel/age-key'\")", "type": "string" } }, "properties": { "age_pub": { "default": "", - "description": "AGE public key for encrypting secrets to this key.\n Format: age1... (bech32-encoded)", + "description": "AGE public key for encrypting secrets to this key.\n Format: age1... (bech32-encoded)\n (example: \"age1abc1234abc1234abc1234abc1234abc1234abc1234abc1234abc1\")", "type": "string" }, "ref": { "default": "", - "description": "Vals reference that resolves to the AGE private key.\n Examples:\n - ref+file://.stack/keys/local.txt (local file)\n - ref+awsssm://stackpanel/keys/dev (AWS SSM Parameter Store)\n - ref+vault://secret/data/stackpanel/prod#key (HashiCorp Vault)", + "description": "Vals reference that resolves to the AGE private key.\n Examples:\n - ref+file://.stack/keys/local.txt (local file)\n - ref+awsssm://stackpanel/keys/dev (AWS SSM Parameter Store)\n - ref+vault://secret/data/stackpanel/prod#key (HashiCorp Vault)\n (example: \"ref+file://.stack/keys/local.txt\")", "type": "string" }, "resolve_cmd": { - "description": "Custom command to resolve the private key (overrides ref).\n The command should output the AGE private key to stdout.\n Example: op read 'op://vault/stackpanel/age-key'", + "description": "Custom command to resolve the private key (overrides ref).\n The command should output the AGE private key to stdout.\n Example: op read 'op://vault/stackpanel/age-key'\n (example: \"op read 'op://vault/stackpanel/age-key'\")", "type": "string" } }, @@ -94,7 +94,7 @@ "description": "Secrets management configuration", "patternProperties": { "^(inputDirectory)$": { - "description": "Directory containing SOPS-encrypted secrets (legacy SOPS layout).\n Used when decrypting/merging YAML sources defined under environments.", + "description": "Directory containing SOPS-encrypted secrets (legacy SOPS layout).\n Used when decrypting/merging YAML sources defined under environments.\n (example: \".stack/secrets\")", "type": "string" }, "^(masterKeys)$": { @@ -111,7 +111,7 @@ "type": "string" }, "^(systemKeys)$": { - "description": "System-level AGE public keys (CI, deploy servers, etc.).\n These keys can decrypt all secrets regardless of environment restrictions.", + "description": "System-level AGE public keys (CI, deploy servers, etc.).\n These keys can decrypt all secrets regardless of environment restrictions.\n (example: \"age1ci1234ci1234ci1234ci1234ci1234ci1234ci1234ci1234ci1\")", "items": { "type": "string" }, @@ -154,7 +154,7 @@ "type": "object" }, "input_directory": { - "description": "Directory containing SOPS-encrypted secrets (legacy SOPS layout).\n Used when decrypting/merging YAML sources defined under environments.", + "description": "Directory containing SOPS-encrypted secrets (legacy SOPS layout).\n Used when decrypting/merging YAML sources defined under environments.\n (example: \".stack/secrets\")", "type": "string" }, "master_keys": { @@ -171,7 +171,7 @@ "type": "string" }, "system_keys": { - "description": "System-level AGE public keys (CI, deploy servers, etc.).\n These keys can decrypt all secrets regardless of environment restrictions.", + "description": "System-level AGE public keys (CI, deploy servers, etc.).\n These keys can decrypt all secrets regardless of environment restrictions.\n (example: \"age1ci1234ci1234ci1234ci1234ci1234ci1234ci1234ci1234ci1\")", "items": { "type": "string" }, diff --git a/packages/proto/gen/json/stackpanel.db.Secrets.schema.json b/packages/proto/gen/json/stackpanel.db.Secrets.schema.json index 4fb863d6..3b6ff918 100644 --- a/packages/proto/gen/json/stackpanel.db.Secrets.schema.json +++ b/packages/proto/gen/json/stackpanel.db.Secrets.schema.json @@ -5,7 +5,7 @@ "description": "Secrets management configuration", "patternProperties": { "^(inputDirectory)$": { - "description": "Directory containing SOPS-encrypted secrets (legacy SOPS layout).\n Used when decrypting/merging YAML sources defined under environments.", + "description": "Directory containing SOPS-encrypted secrets (legacy SOPS layout).\n Used when decrypting/merging YAML sources defined under environments.\n (example: \".stack/secrets\")", "type": "string" }, "^(masterKeys)$": { @@ -22,7 +22,7 @@ "type": "string" }, "^(systemKeys)$": { - "description": "System-level AGE public keys (CI, deploy servers, etc.).\n These keys can decrypt all secrets regardless of environment restrictions.", + "description": "System-level AGE public keys (CI, deploy servers, etc.).\n These keys can decrypt all secrets regardless of environment restrictions.\n (example: \"age1ci1234ci1234ci1234ci1234ci1234ci1234ci1234ci1234ci1\")", "items": { "type": "string" }, @@ -65,7 +65,7 @@ "type": "object" }, "input_directory": { - "description": "Directory containing SOPS-encrypted secrets (legacy SOPS layout).\n Used when decrypting/merging YAML sources defined under environments.", + "description": "Directory containing SOPS-encrypted secrets (legacy SOPS layout).\n Used when decrypting/merging YAML sources defined under environments.\n (example: \".stack/secrets\")", "type": "string" }, "master_keys": { @@ -82,7 +82,7 @@ "type": "string" }, "system_keys": { - "description": "System-level AGE public keys (CI, deploy servers, etc.).\n These keys can decrypt all secrets regardless of environment restrictions.", + "description": "System-level AGE public keys (CI, deploy servers, etc.).\n These keys can decrypt all secrets regardless of environment restrictions.\n (example: \"age1ci1234ci1234ci1234ci1234ci1234ci1234ci1234ci1234ci1\")", "items": { "type": "string" }, diff --git a/packages/proto/gen/json/stackpanel.db.Secrets.schema.strict.bundle.json b/packages/proto/gen/json/stackpanel.db.Secrets.schema.strict.bundle.json index de0be6d6..d87af57a 100644 --- a/packages/proto/gen/json/stackpanel.db.Secrets.schema.strict.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.Secrets.schema.strict.bundle.json @@ -9,7 +9,7 @@ "type": "string" }, "language": { - "description": "Target language for generated code (e.g., \"typescript\", \"go\", \"python\").\n Informational only for now; codegen selection is based on the target key.", + "description": "Target language for generated code (e.g., \"typescript\", \"go\", \"python\").\n Informational only for now; codegen selection is based on the target key.\n (example: \"typescript\")", "type": "string" }, "name": { @@ -28,14 +28,14 @@ "type": "string" }, "public_keys": { - "description": "AGE public keys that can decrypt secrets for this environment.\n New secrets for this env are encrypted to these recipients.", + "description": "AGE public keys that can decrypt secrets for this environment.\n New secrets for this env are encrypted to these recipients.\n (example: \"age1abc1234abc1234abc1234abc1234abc1234abc1234abc1234abc1\")", "items": { "type": "string" }, "type": "array" }, "sources": { - "description": "List of SOPS-encrypted source files for this environment (without .yaml extension).\n These files are decrypted and merged to provide secrets for the environment.", + "description": "List of SOPS-encrypted source files for this environment (without .yaml extension).\n These files are decrypted and merged to provide secrets for the environment.\n (example: \"shared\")", "items": { "type": "string" }, @@ -51,15 +51,15 @@ "description": "A master key for encrypting/decrypting secrets", "properties": { "age_pub": { - "description": "AGE public key for encrypting secrets to this key.\n Format: age1... (bech32-encoded)", + "description": "AGE public key for encrypting secrets to this key.\n Format: age1... (bech32-encoded)\n (example: \"age1abc1234abc1234abc1234abc1234abc1234abc1234abc1234abc1\")", "type": "string" }, "ref": { - "description": "Vals reference that resolves to the AGE private key.\n Examples:\n - ref+file://.stack/keys/local.txt (local file)\n - ref+awsssm://stackpanel/keys/dev (AWS SSM Parameter Store)\n - ref+vault://secret/data/stackpanel/prod#key (HashiCorp Vault)", + "description": "Vals reference that resolves to the AGE private key.\n Examples:\n - ref+file://.stack/keys/local.txt (local file)\n - ref+awsssm://stackpanel/keys/dev (AWS SSM Parameter Store)\n - ref+vault://secret/data/stackpanel/prod#key (HashiCorp Vault)\n (example: \"ref+file://.stack/keys/local.txt\")", "type": "string" }, "resolve_cmd": { - "description": "Custom command to resolve the private key (overrides ref).\n The command should output the AGE private key to stdout.\n Example: op read 'op://vault/stackpanel/age-key'", + "description": "Custom command to resolve the private key (overrides ref).\n The command should output the AGE private key to stdout.\n Example: op read 'op://vault/stackpanel/age-key'\n (example: \"op read 'op://vault/stackpanel/age-key'\")", "type": "string" } }, @@ -109,7 +109,7 @@ "type": "object" }, "input_directory": { - "description": "Directory containing SOPS-encrypted secrets (legacy SOPS layout).\n Used when decrypting/merging YAML sources defined under environments.", + "description": "Directory containing SOPS-encrypted secrets (legacy SOPS layout).\n Used when decrypting/merging YAML sources defined under environments.\n (example: \".stack/secrets\")", "type": "string" }, "master_keys": { @@ -126,7 +126,7 @@ "type": "string" }, "system_keys": { - "description": "System-level AGE public keys (CI, deploy servers, etc.).\n These keys can decrypt all secrets regardless of environment restrictions.", + "description": "System-level AGE public keys (CI, deploy servers, etc.).\n These keys can decrypt all secrets regardless of environment restrictions.\n (example: \"age1ci1234ci1234ci1234ci1234ci1234ci1234ci1234ci1234ci1\")", "items": { "type": "string" }, diff --git a/packages/proto/gen/json/stackpanel.db.Secrets.schema.strict.json b/packages/proto/gen/json/stackpanel.db.Secrets.schema.strict.json index e55b93ed..44874fa2 100644 --- a/packages/proto/gen/json/stackpanel.db.Secrets.schema.strict.json +++ b/packages/proto/gen/json/stackpanel.db.Secrets.schema.strict.json @@ -38,7 +38,7 @@ "type": "object" }, "input_directory": { - "description": "Directory containing SOPS-encrypted secrets (legacy SOPS layout).\n Used when decrypting/merging YAML sources defined under environments.", + "description": "Directory containing SOPS-encrypted secrets (legacy SOPS layout).\n Used when decrypting/merging YAML sources defined under environments.\n (example: \".stack/secrets\")", "type": "string" }, "master_keys": { @@ -55,7 +55,7 @@ "type": "string" }, "system_keys": { - "description": "System-level AGE public keys (CI, deploy servers, etc.).\n These keys can decrypt all secrets regardless of environment restrictions.", + "description": "System-level AGE public keys (CI, deploy servers, etc.).\n These keys can decrypt all secrets regardless of environment restrictions.\n (example: \"age1ci1234ci1234ci1234ci1234ci1234ci1234ci1234ci1234ci1\")", "items": { "type": "string" }, diff --git a/packages/proto/gen/json/stackpanel.db.Variable.jsonschema.bundle.json b/packages/proto/gen/json/stackpanel.db.Variable.jsonschema.bundle.json index b543bc5c..8cca500a 100644 --- a/packages/proto/gen/json/stackpanel.db.Variable.jsonschema.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.Variable.jsonschema.bundle.json @@ -6,12 +6,12 @@ "description": "A workspace variable (secret, literal, or vals reference)", "properties": { "id": { - "description": "Path-based identifier. Format: /\u003ckeygroup\u003e/\u003cVARNAME\u003e\n \n Examples:\n /dev/DATABASE_URL → Secret in dev.yaml\n /prod/API_KEY → Secret in prod.yaml\n /computed/apps/web/port → Computed by Nix module", + "description": "Path-based identifier. Format: /\u003ckeygroup\u003e/\u003cVARNAME\u003e\n \n Examples:\n /dev/DATABASE_URL → Secret in dev.yaml\n /prod/API_KEY → Secret in prod.yaml\n /computed/apps/web/port → Computed by Nix module\n (example: \"/dev/DATABASE_URL\")", "type": "string" }, "value": { "default": "", - "description": "The value - either a literal string or a vals reference.\n \n Literals:\n \"postgresql://localhost:5432/dev\"\n \"3000\"\n \n Vals references:\n \"ref+sops://.stack/secrets/dev.yaml#/DATABASE_URL\"\n \"ref+awsssm://prod/api-key\"\n \"ref+exec://echo $RANDOM\"", + "description": "The value - either a literal string or a vals reference.\n \n Literals:\n \"postgresql://localhost:5432/dev\"\n \"3000\"\n \n Vals references:\n \"ref+sops://.stack/secrets/dev.yaml#/DATABASE_URL\"\n \"ref+awsssm://prod/api-key\"\n \"ref+exec://echo $RANDOM\"\n (example: \"ref+sops://.stack/secrets/dev.yaml#/DATABASE_URL\")", "type": "string" } }, diff --git a/packages/proto/gen/json/stackpanel.db.Variable.jsonschema.json b/packages/proto/gen/json/stackpanel.db.Variable.jsonschema.json index bc42b299..ed769324 100644 --- a/packages/proto/gen/json/stackpanel.db.Variable.jsonschema.json +++ b/packages/proto/gen/json/stackpanel.db.Variable.jsonschema.json @@ -5,12 +5,12 @@ "description": "A workspace variable (secret, literal, or vals reference)", "properties": { "id": { - "description": "Path-based identifier. Format: /\u003ckeygroup\u003e/\u003cVARNAME\u003e\n \n Examples:\n /dev/DATABASE_URL → Secret in dev.yaml\n /prod/API_KEY → Secret in prod.yaml\n /computed/apps/web/port → Computed by Nix module", + "description": "Path-based identifier. Format: /\u003ckeygroup\u003e/\u003cVARNAME\u003e\n \n Examples:\n /dev/DATABASE_URL → Secret in dev.yaml\n /prod/API_KEY → Secret in prod.yaml\n /computed/apps/web/port → Computed by Nix module\n (example: \"/dev/DATABASE_URL\")", "type": "string" }, "value": { "default": "", - "description": "The value - either a literal string or a vals reference.\n \n Literals:\n \"postgresql://localhost:5432/dev\"\n \"3000\"\n \n Vals references:\n \"ref+sops://.stack/secrets/dev.yaml#/DATABASE_URL\"\n \"ref+awsssm://prod/api-key\"\n \"ref+exec://echo $RANDOM\"", + "description": "The value - either a literal string or a vals reference.\n \n Literals:\n \"postgresql://localhost:5432/dev\"\n \"3000\"\n \n Vals references:\n \"ref+sops://.stack/secrets/dev.yaml#/DATABASE_URL\"\n \"ref+awsssm://prod/api-key\"\n \"ref+exec://echo $RANDOM\"\n (example: \"ref+sops://.stack/secrets/dev.yaml#/DATABASE_URL\")", "type": "string" } }, diff --git a/packages/proto/gen/json/stackpanel.db.Variable.jsonschema.strict.bundle.json b/packages/proto/gen/json/stackpanel.db.Variable.jsonschema.strict.bundle.json index be39e785..2c110fbb 100644 --- a/packages/proto/gen/json/stackpanel.db.Variable.jsonschema.strict.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.Variable.jsonschema.strict.bundle.json @@ -6,11 +6,11 @@ "description": "A workspace variable (secret, literal, or vals reference)", "properties": { "id": { - "description": "Path-based identifier. Format: /\u003ckeygroup\u003e/\u003cVARNAME\u003e\n \n Examples:\n /dev/DATABASE_URL → Secret in dev.yaml\n /prod/API_KEY → Secret in prod.yaml\n /computed/apps/web/port → Computed by Nix module", + "description": "Path-based identifier. Format: /\u003ckeygroup\u003e/\u003cVARNAME\u003e\n \n Examples:\n /dev/DATABASE_URL → Secret in dev.yaml\n /prod/API_KEY → Secret in prod.yaml\n /computed/apps/web/port → Computed by Nix module\n (example: \"/dev/DATABASE_URL\")", "type": "string" }, "value": { - "description": "The value - either a literal string or a vals reference.\n \n Literals:\n \"postgresql://localhost:5432/dev\"\n \"3000\"\n \n Vals references:\n \"ref+sops://.stack/secrets/dev.yaml#/DATABASE_URL\"\n \"ref+awsssm://prod/api-key\"\n \"ref+exec://echo $RANDOM\"", + "description": "The value - either a literal string or a vals reference.\n \n Literals:\n \"postgresql://localhost:5432/dev\"\n \"3000\"\n \n Vals references:\n \"ref+sops://.stack/secrets/dev.yaml#/DATABASE_URL\"\n \"ref+awsssm://prod/api-key\"\n \"ref+exec://echo $RANDOM\"\n (example: \"ref+sops://.stack/secrets/dev.yaml#/DATABASE_URL\")", "type": "string" } }, diff --git a/packages/proto/gen/json/stackpanel.db.Variable.jsonschema.strict.json b/packages/proto/gen/json/stackpanel.db.Variable.jsonschema.strict.json index a408a297..c95e797c 100644 --- a/packages/proto/gen/json/stackpanel.db.Variable.jsonschema.strict.json +++ b/packages/proto/gen/json/stackpanel.db.Variable.jsonschema.strict.json @@ -5,11 +5,11 @@ "description": "A workspace variable (secret, literal, or vals reference)", "properties": { "id": { - "description": "Path-based identifier. Format: /\u003ckeygroup\u003e/\u003cVARNAME\u003e\n \n Examples:\n /dev/DATABASE_URL → Secret in dev.yaml\n /prod/API_KEY → Secret in prod.yaml\n /computed/apps/web/port → Computed by Nix module", + "description": "Path-based identifier. Format: /\u003ckeygroup\u003e/\u003cVARNAME\u003e\n \n Examples:\n /dev/DATABASE_URL → Secret in dev.yaml\n /prod/API_KEY → Secret in prod.yaml\n /computed/apps/web/port → Computed by Nix module\n (example: \"/dev/DATABASE_URL\")", "type": "string" }, "value": { - "description": "The value - either a literal string or a vals reference.\n \n Literals:\n \"postgresql://localhost:5432/dev\"\n \"3000\"\n \n Vals references:\n \"ref+sops://.stack/secrets/dev.yaml#/DATABASE_URL\"\n \"ref+awsssm://prod/api-key\"\n \"ref+exec://echo $RANDOM\"", + "description": "The value - either a literal string or a vals reference.\n \n Literals:\n \"postgresql://localhost:5432/dev\"\n \"3000\"\n \n Vals references:\n \"ref+sops://.stack/secrets/dev.yaml#/DATABASE_URL\"\n \"ref+awsssm://prod/api-key\"\n \"ref+exec://echo $RANDOM\"\n (example: \"ref+sops://.stack/secrets/dev.yaml#/DATABASE_URL\")", "type": "string" } }, diff --git a/packages/proto/gen/json/stackpanel.db.Variable.schema.bundle.json b/packages/proto/gen/json/stackpanel.db.Variable.schema.bundle.json index 772cc039..7b2e5805 100644 --- a/packages/proto/gen/json/stackpanel.db.Variable.schema.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.Variable.schema.bundle.json @@ -6,12 +6,12 @@ "description": "A workspace variable (secret, literal, or vals reference)", "properties": { "id": { - "description": "Path-based identifier. Format: /\u003ckeygroup\u003e/\u003cVARNAME\u003e\n \n Examples:\n /dev/DATABASE_URL → Secret in dev.yaml\n /prod/API_KEY → Secret in prod.yaml\n /computed/apps/web/port → Computed by Nix module", + "description": "Path-based identifier. Format: /\u003ckeygroup\u003e/\u003cVARNAME\u003e\n \n Examples:\n /dev/DATABASE_URL → Secret in dev.yaml\n /prod/API_KEY → Secret in prod.yaml\n /computed/apps/web/port → Computed by Nix module\n (example: \"/dev/DATABASE_URL\")", "type": "string" }, "value": { "default": "", - "description": "The value - either a literal string or a vals reference.\n \n Literals:\n \"postgresql://localhost:5432/dev\"\n \"3000\"\n \n Vals references:\n \"ref+sops://.stack/secrets/dev.yaml#/DATABASE_URL\"\n \"ref+awsssm://prod/api-key\"\n \"ref+exec://echo $RANDOM\"", + "description": "The value - either a literal string or a vals reference.\n \n Literals:\n \"postgresql://localhost:5432/dev\"\n \"3000\"\n \n Vals references:\n \"ref+sops://.stack/secrets/dev.yaml#/DATABASE_URL\"\n \"ref+awsssm://prod/api-key\"\n \"ref+exec://echo $RANDOM\"\n (example: \"ref+sops://.stack/secrets/dev.yaml#/DATABASE_URL\")", "type": "string" } }, diff --git a/packages/proto/gen/json/stackpanel.db.Variable.schema.json b/packages/proto/gen/json/stackpanel.db.Variable.schema.json index 15388e4f..ab8cab33 100644 --- a/packages/proto/gen/json/stackpanel.db.Variable.schema.json +++ b/packages/proto/gen/json/stackpanel.db.Variable.schema.json @@ -5,12 +5,12 @@ "description": "A workspace variable (secret, literal, or vals reference)", "properties": { "id": { - "description": "Path-based identifier. Format: /\u003ckeygroup\u003e/\u003cVARNAME\u003e\n \n Examples:\n /dev/DATABASE_URL → Secret in dev.yaml\n /prod/API_KEY → Secret in prod.yaml\n /computed/apps/web/port → Computed by Nix module", + "description": "Path-based identifier. Format: /\u003ckeygroup\u003e/\u003cVARNAME\u003e\n \n Examples:\n /dev/DATABASE_URL → Secret in dev.yaml\n /prod/API_KEY → Secret in prod.yaml\n /computed/apps/web/port → Computed by Nix module\n (example: \"/dev/DATABASE_URL\")", "type": "string" }, "value": { "default": "", - "description": "The value - either a literal string or a vals reference.\n \n Literals:\n \"postgresql://localhost:5432/dev\"\n \"3000\"\n \n Vals references:\n \"ref+sops://.stack/secrets/dev.yaml#/DATABASE_URL\"\n \"ref+awsssm://prod/api-key\"\n \"ref+exec://echo $RANDOM\"", + "description": "The value - either a literal string or a vals reference.\n \n Literals:\n \"postgresql://localhost:5432/dev\"\n \"3000\"\n \n Vals references:\n \"ref+sops://.stack/secrets/dev.yaml#/DATABASE_URL\"\n \"ref+awsssm://prod/api-key\"\n \"ref+exec://echo $RANDOM\"\n (example: \"ref+sops://.stack/secrets/dev.yaml#/DATABASE_URL\")", "type": "string" } }, diff --git a/packages/proto/gen/json/stackpanel.db.Variable.schema.strict.bundle.json b/packages/proto/gen/json/stackpanel.db.Variable.schema.strict.bundle.json index 1cfb42ab..3dbc7290 100644 --- a/packages/proto/gen/json/stackpanel.db.Variable.schema.strict.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.Variable.schema.strict.bundle.json @@ -6,11 +6,11 @@ "description": "A workspace variable (secret, literal, or vals reference)", "properties": { "id": { - "description": "Path-based identifier. Format: /\u003ckeygroup\u003e/\u003cVARNAME\u003e\n \n Examples:\n /dev/DATABASE_URL → Secret in dev.yaml\n /prod/API_KEY → Secret in prod.yaml\n /computed/apps/web/port → Computed by Nix module", + "description": "Path-based identifier. Format: /\u003ckeygroup\u003e/\u003cVARNAME\u003e\n \n Examples:\n /dev/DATABASE_URL → Secret in dev.yaml\n /prod/API_KEY → Secret in prod.yaml\n /computed/apps/web/port → Computed by Nix module\n (example: \"/dev/DATABASE_URL\")", "type": "string" }, "value": { - "description": "The value - either a literal string or a vals reference.\n \n Literals:\n \"postgresql://localhost:5432/dev\"\n \"3000\"\n \n Vals references:\n \"ref+sops://.stack/secrets/dev.yaml#/DATABASE_URL\"\n \"ref+awsssm://prod/api-key\"\n \"ref+exec://echo $RANDOM\"", + "description": "The value - either a literal string or a vals reference.\n \n Literals:\n \"postgresql://localhost:5432/dev\"\n \"3000\"\n \n Vals references:\n \"ref+sops://.stack/secrets/dev.yaml#/DATABASE_URL\"\n \"ref+awsssm://prod/api-key\"\n \"ref+exec://echo $RANDOM\"\n (example: \"ref+sops://.stack/secrets/dev.yaml#/DATABASE_URL\")", "type": "string" } }, diff --git a/packages/proto/gen/json/stackpanel.db.Variable.schema.strict.json b/packages/proto/gen/json/stackpanel.db.Variable.schema.strict.json index 81894cda..ea577b53 100644 --- a/packages/proto/gen/json/stackpanel.db.Variable.schema.strict.json +++ b/packages/proto/gen/json/stackpanel.db.Variable.schema.strict.json @@ -5,11 +5,11 @@ "description": "A workspace variable (secret, literal, or vals reference)", "properties": { "id": { - "description": "Path-based identifier. Format: /\u003ckeygroup\u003e/\u003cVARNAME\u003e\n \n Examples:\n /dev/DATABASE_URL → Secret in dev.yaml\n /prod/API_KEY → Secret in prod.yaml\n /computed/apps/web/port → Computed by Nix module", + "description": "Path-based identifier. Format: /\u003ckeygroup\u003e/\u003cVARNAME\u003e\n \n Examples:\n /dev/DATABASE_URL → Secret in dev.yaml\n /prod/API_KEY → Secret in prod.yaml\n /computed/apps/web/port → Computed by Nix module\n (example: \"/dev/DATABASE_URL\")", "type": "string" }, "value": { - "description": "The value - either a literal string or a vals reference.\n \n Literals:\n \"postgresql://localhost:5432/dev\"\n \"3000\"\n \n Vals references:\n \"ref+sops://.stack/secrets/dev.yaml#/DATABASE_URL\"\n \"ref+awsssm://prod/api-key\"\n \"ref+exec://echo $RANDOM\"", + "description": "The value - either a literal string or a vals reference.\n \n Literals:\n \"postgresql://localhost:5432/dev\"\n \"3000\"\n \n Vals references:\n \"ref+sops://.stack/secrets/dev.yaml#/DATABASE_URL\"\n \"ref+awsssm://prod/api-key\"\n \"ref+exec://echo $RANDOM\"\n (example: \"ref+sops://.stack/secrets/dev.yaml#/DATABASE_URL\")", "type": "string" } }, diff --git a/packages/proto/gen/json/stackpanel.db.Variables.jsonschema.bundle.json b/packages/proto/gen/json/stackpanel.db.Variables.jsonschema.bundle.json index 3b2c5563..698aa853 100644 --- a/packages/proto/gen/json/stackpanel.db.Variables.jsonschema.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.Variables.jsonschema.bundle.json @@ -6,12 +6,12 @@ "description": "A workspace variable (secret, literal, or vals reference)", "properties": { "id": { - "description": "Path-based identifier. Format: /\u003ckeygroup\u003e/\u003cVARNAME\u003e\n \n Examples:\n /dev/DATABASE_URL → Secret in dev.yaml\n /prod/API_KEY → Secret in prod.yaml\n /computed/apps/web/port → Computed by Nix module", + "description": "Path-based identifier. Format: /\u003ckeygroup\u003e/\u003cVARNAME\u003e\n \n Examples:\n /dev/DATABASE_URL → Secret in dev.yaml\n /prod/API_KEY → Secret in prod.yaml\n /computed/apps/web/port → Computed by Nix module\n (example: \"/dev/DATABASE_URL\")", "type": "string" }, "value": { "default": "", - "description": "The value - either a literal string or a vals reference.\n \n Literals:\n \"postgresql://localhost:5432/dev\"\n \"3000\"\n \n Vals references:\n \"ref+sops://.stack/secrets/dev.yaml#/DATABASE_URL\"\n \"ref+awsssm://prod/api-key\"\n \"ref+exec://echo $RANDOM\"", + "description": "The value - either a literal string or a vals reference.\n \n Literals:\n \"postgresql://localhost:5432/dev\"\n \"3000\"\n \n Vals references:\n \"ref+sops://.stack/secrets/dev.yaml#/DATABASE_URL\"\n \"ref+awsssm://prod/api-key\"\n \"ref+exec://echo $RANDOM\"\n (example: \"ref+sops://.stack/secrets/dev.yaml#/DATABASE_URL\")", "type": "string" } }, diff --git a/packages/proto/gen/json/stackpanel.db.Variables.jsonschema.strict.bundle.json b/packages/proto/gen/json/stackpanel.db.Variables.jsonschema.strict.bundle.json index dee22ca5..e1caa08a 100644 --- a/packages/proto/gen/json/stackpanel.db.Variables.jsonschema.strict.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.Variables.jsonschema.strict.bundle.json @@ -6,11 +6,11 @@ "description": "A workspace variable (secret, literal, or vals reference)", "properties": { "id": { - "description": "Path-based identifier. Format: /\u003ckeygroup\u003e/\u003cVARNAME\u003e\n \n Examples:\n /dev/DATABASE_URL → Secret in dev.yaml\n /prod/API_KEY → Secret in prod.yaml\n /computed/apps/web/port → Computed by Nix module", + "description": "Path-based identifier. Format: /\u003ckeygroup\u003e/\u003cVARNAME\u003e\n \n Examples:\n /dev/DATABASE_URL → Secret in dev.yaml\n /prod/API_KEY → Secret in prod.yaml\n /computed/apps/web/port → Computed by Nix module\n (example: \"/dev/DATABASE_URL\")", "type": "string" }, "value": { - "description": "The value - either a literal string or a vals reference.\n \n Literals:\n \"postgresql://localhost:5432/dev\"\n \"3000\"\n \n Vals references:\n \"ref+sops://.stack/secrets/dev.yaml#/DATABASE_URL\"\n \"ref+awsssm://prod/api-key\"\n \"ref+exec://echo $RANDOM\"", + "description": "The value - either a literal string or a vals reference.\n \n Literals:\n \"postgresql://localhost:5432/dev\"\n \"3000\"\n \n Vals references:\n \"ref+sops://.stack/secrets/dev.yaml#/DATABASE_URL\"\n \"ref+awsssm://prod/api-key\"\n \"ref+exec://echo $RANDOM\"\n (example: \"ref+sops://.stack/secrets/dev.yaml#/DATABASE_URL\")", "type": "string" } }, diff --git a/packages/proto/gen/json/stackpanel.db.Variables.schema.bundle.json b/packages/proto/gen/json/stackpanel.db.Variables.schema.bundle.json index 9278a958..490cb64f 100644 --- a/packages/proto/gen/json/stackpanel.db.Variables.schema.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.Variables.schema.bundle.json @@ -6,12 +6,12 @@ "description": "A workspace variable (secret, literal, or vals reference)", "properties": { "id": { - "description": "Path-based identifier. Format: /\u003ckeygroup\u003e/\u003cVARNAME\u003e\n \n Examples:\n /dev/DATABASE_URL → Secret in dev.yaml\n /prod/API_KEY → Secret in prod.yaml\n /computed/apps/web/port → Computed by Nix module", + "description": "Path-based identifier. Format: /\u003ckeygroup\u003e/\u003cVARNAME\u003e\n \n Examples:\n /dev/DATABASE_URL → Secret in dev.yaml\n /prod/API_KEY → Secret in prod.yaml\n /computed/apps/web/port → Computed by Nix module\n (example: \"/dev/DATABASE_URL\")", "type": "string" }, "value": { "default": "", - "description": "The value - either a literal string or a vals reference.\n \n Literals:\n \"postgresql://localhost:5432/dev\"\n \"3000\"\n \n Vals references:\n \"ref+sops://.stack/secrets/dev.yaml#/DATABASE_URL\"\n \"ref+awsssm://prod/api-key\"\n \"ref+exec://echo $RANDOM\"", + "description": "The value - either a literal string or a vals reference.\n \n Literals:\n \"postgresql://localhost:5432/dev\"\n \"3000\"\n \n Vals references:\n \"ref+sops://.stack/secrets/dev.yaml#/DATABASE_URL\"\n \"ref+awsssm://prod/api-key\"\n \"ref+exec://echo $RANDOM\"\n (example: \"ref+sops://.stack/secrets/dev.yaml#/DATABASE_URL\")", "type": "string" } }, diff --git a/packages/proto/gen/json/stackpanel.db.Variables.schema.strict.bundle.json b/packages/proto/gen/json/stackpanel.db.Variables.schema.strict.bundle.json index ad5ede93..e658de66 100644 --- a/packages/proto/gen/json/stackpanel.db.Variables.schema.strict.bundle.json +++ b/packages/proto/gen/json/stackpanel.db.Variables.schema.strict.bundle.json @@ -6,11 +6,11 @@ "description": "A workspace variable (secret, literal, or vals reference)", "properties": { "id": { - "description": "Path-based identifier. Format: /\u003ckeygroup\u003e/\u003cVARNAME\u003e\n \n Examples:\n /dev/DATABASE_URL → Secret in dev.yaml\n /prod/API_KEY → Secret in prod.yaml\n /computed/apps/web/port → Computed by Nix module", + "description": "Path-based identifier. Format: /\u003ckeygroup\u003e/\u003cVARNAME\u003e\n \n Examples:\n /dev/DATABASE_URL → Secret in dev.yaml\n /prod/API_KEY → Secret in prod.yaml\n /computed/apps/web/port → Computed by Nix module\n (example: \"/dev/DATABASE_URL\")", "type": "string" }, "value": { - "description": "The value - either a literal string or a vals reference.\n \n Literals:\n \"postgresql://localhost:5432/dev\"\n \"3000\"\n \n Vals references:\n \"ref+sops://.stack/secrets/dev.yaml#/DATABASE_URL\"\n \"ref+awsssm://prod/api-key\"\n \"ref+exec://echo $RANDOM\"", + "description": "The value - either a literal string or a vals reference.\n \n Literals:\n \"postgresql://localhost:5432/dev\"\n \"3000\"\n \n Vals references:\n \"ref+sops://.stack/secrets/dev.yaml#/DATABASE_URL\"\n \"ref+awsssm://prod/api-key\"\n \"ref+exec://echo $RANDOM\"\n (example: \"ref+sops://.stack/secrets/dev.yaml#/DATABASE_URL\")", "type": "string" } }, diff --git a/packages/proto/gen/ts/app_build.ts b/packages/proto/gen/ts/app_build.ts index a738af58..3f839f92 100644 --- a/packages/proto/gen/ts/app_build.ts +++ b/packages/proto/gen/ts/app_build.ts @@ -31,7 +31,7 @@ export interface AppBuildConfig { /** * @generated from protobuf field: repeated string src_include = 4 */ - src_include: string[]; // Glob patterns for source filter + src_include: string[]; // Glob patterns for source filter (example: ["src/**", "package.json"]) /** * @generated from protobuf field: optional string deps_lockfile = 5 */ diff --git a/packages/proto/gen/ts/app_build_pb.d.ts b/packages/proto/gen/ts/app_build_pb.d.ts index 74515ce8..96804620 100644 --- a/packages/proto/gen/ts/app_build_pb.d.ts +++ b/packages/proto/gen/ts/app_build_pb.d.ts @@ -38,7 +38,7 @@ export declare type AppBuildConfig = Message<"stackpanel.modules.AppBuildConfig" srcLayout?: string; /** - * Glob patterns for source filter + * Glob patterns for source filter (example: ["src/**", "package.json"]) * * @generated from field: repeated string src_include = 4; */ diff --git a/packages/proto/gen/ts/apps.ts b/packages/proto/gen/ts/apps.ts index 29d06d2c..f5125c6b 100644 --- a/packages/proto/gen/ts/apps.ts +++ b/packages/proto/gen/ts/apps.ts @@ -19,27 +19,27 @@ export interface App { /** * @generated from protobuf field: string name = 1 */ - name: string; // Display name of the app + name: string; // Display name of the app (example: "Web App") /** * @generated from protobuf field: optional string description = 2 */ - description?: string; // Description of the app + description?: string; // Description of the app (example: "Frontend web application") /** * @generated from protobuf field: string path = 3 */ - path: string; // Relative path to the app directory + path: string; // Relative path to the app directory (example: "apps/web") /** * @generated from protobuf field: optional string type = 4 */ - type?: string; // App type/runtime (bun, go, python, rust, etc.) + type?: string; // App type/runtime (bun, go, python, rust, etc.) (example: "bun") /** * @generated from protobuf field: optional int32 port = 5 */ - port?: number; // Development server port + port?: number; // Development server port (example: 3000) /** * @generated from protobuf field: optional string domain = 6 */ - domain?: string; // Local development domain + domain?: string; // Local development domain (example: "web.localhost") /** * * deprecated: use env instead @@ -64,7 +64,7 @@ export interface App { /** * * Environment IDs for this app. Defaults to "dev", "prod", "staging", "test". - * + * (example: "dev") * * @generated from protobuf field: repeated string environmentIds = 10 */ @@ -79,27 +79,27 @@ export interface AppDeploy { /** * @generated from protobuf field: bool enable = 1 */ - enable: boolean; // Enable deployment mapping for this app + enable: boolean; // Enable deployment mapping for this app (example: true) /** * @generated from protobuf field: repeated string targets = 2 */ - targets: string[]; // Target machine ids or tag selectors + targets: string[]; // Target machine ids or tag selectors (example: "prod-web-01") /** * @generated from protobuf field: optional string role = 3 */ - role?: string; // Deployment role label for this app + role?: string; // Deployment role label for this app (example: "web") /** * @generated from protobuf field: repeated string nixos_modules = 4 */ - nixos_modules: string[]; // Extra NixOS modules to import for this app + nixos_modules: string[]; // Extra NixOS modules to import for this app (example: "./modules/nginx.nix") /** * @generated from protobuf field: optional string system = 5 */ - system?: string; // Target system/architecture (e.g., x86_64-linux) + system?: string; // Target system/architecture (e.g., x86_64-linux) (example: "x86_64-linux") /** * @generated from protobuf field: repeated string secrets = 6 */ - secrets: string[]; // Secret references required by this app during deploy + secrets: string[]; // Secret references required by this app during deploy (example: "DATABASE_URL") } /** * Environment configuration (e.g., dev, staging, production) @@ -110,11 +110,11 @@ export interface AppEnvironment { /** * @generated from protobuf field: string name = 1 */ - name: string; // Name of the environment + name: string; // Name of the environment (example: "dev") /** * @generated from protobuf field: optional string description = 2 */ - description?: string; // (optional) Description of the environment + description?: string; // (optional) Description of the environment (example: "Local development environment") /** * * Environment variables for this environment. @@ -130,13 +130,13 @@ export interface AppEnvironment { /** * @generated from protobuf field: repeated string extends = 4 */ - extends: string[]; // Inherit these environments - useful for sharing environment variables between environments. + extends: string[]; // Inherit these environments - useful for sharing environment variables between environments. (example: "common") /** * * Env var names in this environment that contain sensitive values. * Used to auto-derive deployment.secrets — these are wrapped with * alchemy.secret() at deploy time. - * + * (example: "DATABASE_URL") * * @generated from protobuf field: repeated string secrets = 5 */ @@ -164,27 +164,38 @@ export interface EnvironmentVariable { /** * @generated from protobuf field: string key = 1 */ - key: string; // ID of the environment variable - defaults to key used in the attribute path. KEY will be read from $KEY in the environment + key: string; // ID of the environment variable - defaults to key used in the attribute path. KEY will be read from $KEY in the environment (example: "DATABASE_URL") /** * @generated from protobuf field: bool required = 2 */ - required: boolean; // Whether the environment variable is required + required: boolean; // Whether the environment variable is required (example: true) /** * @generated from protobuf field: bool secret = 3 */ - secret: boolean; // Whether the environment variable is sensitive + secret: boolean; // Whether the environment variable is sensitive (example: false) /** * @generated from protobuf field: optional string value = 4 */ - value?: string; // Value of the environment variable + value?: string; // Value of the environment variable (example: "postgres://localhost:5432/app") /** * @generated from protobuf field: optional string sops = 5 */ - sops?: string; // Path to the SOPS file for this variable's group + sops?: string; // Path to the SOPS file for this variable's group (example: ".stack/secrets/dev.yaml") /** * @generated from protobuf field: optional string defaultValue = 6 */ - defaultValue?: string; // Default value of the environment variable + defaultValue?: string; // Default value of the environment variable (example: "postgres://localhost:5432/app") + /** + * + * Human-readable description of what this variable is for and where to + * obtain it. Surfaced in the studio Variables UI and in the actionable + * error message thrown by `loadAppEnv(..., { validate: true })` when + * the variable is missing. + * (example: "Postgres connection string used by the API server") + * + * @generated from protobuf field: optional string description = 7 + */ + description?: string; } // @generated message type with reflection information, may provide speed optimized methods class App$Type extends MessageType { @@ -595,7 +606,8 @@ class EnvironmentVariable$Type extends MessageType { { no: 3, name: "secret", kind: "scalar", T: 8 /*ScalarType.BOOL*/ }, { no: 4, name: "value", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }, { no: 5, name: "sops", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }, - { no: 6, name: "defaultValue", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ } + { no: 6, name: "defaultValue", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }, + { no: 7, name: "description", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ } ]); } create(value?: PartialMessage): EnvironmentVariable { @@ -630,6 +642,9 @@ class EnvironmentVariable$Type extends MessageType { case /* optional string defaultValue */ 6: message.defaultValue = reader.string(); break; + case /* optional string description */ 7: + message.description = reader.string(); + break; default: let u = options.readUnknownField; if (u === "throw") @@ -660,6 +675,9 @@ class EnvironmentVariable$Type extends MessageType { /* optional string defaultValue = 6; */ if (message.defaultValue !== undefined) writer.tag(6, WireType.LengthDelimited).string(message.defaultValue); + /* optional string description = 7; */ + if (message.description !== undefined) + writer.tag(7, WireType.LengthDelimited).string(message.description); let u = options.writeUnknownFields; if (u !== false) (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); diff --git a/packages/proto/gen/ts/apps_pb.d.ts b/packages/proto/gen/ts/apps_pb.d.ts index 0ccea81f..946ed8c9 100644 --- a/packages/proto/gen/ts/apps_pb.d.ts +++ b/packages/proto/gen/ts/apps_pb.d.ts @@ -17,42 +17,42 @@ export declare const file_apps: GenFile; */ export declare type App = Message<"stackpanel.db.App"> & { /** - * Display name of the app + * Display name of the app (example: "Web App") * * @generated from field: string name = 1; */ name: string; /** - * Description of the app + * Description of the app (example: "Frontend web application") * * @generated from field: optional string description = 2; */ description?: string; /** - * Relative path to the app directory + * Relative path to the app directory (example: "apps/web") * * @generated from field: string path = 3; */ path: string; /** - * App type/runtime (bun, go, python, rust, etc.) + * App type/runtime (bun, go, python, rust, etc.) (example: "bun") * * @generated from field: optional string type = 4; */ type?: string; /** - * Development server port + * Development server port (example: 3000) * * @generated from field: optional int32 port = 5; */ port?: number; /** - * Local development domain + * Local development domain (example: "web.localhost") * * @generated from field: optional string domain = 6; */ @@ -85,7 +85,7 @@ export declare type App = Message<"stackpanel.db.App"> & { /** * * Environment IDs for this app. Defaults to "dev", "prod", "staging", "test". - * + * (example: "dev") * * @generated from field: repeated string environmentIds = 10; */ @@ -105,42 +105,42 @@ export declare const AppSchema: GenMessage; */ export declare type AppDeploy = Message<"stackpanel.db.AppDeploy"> & { /** - * Enable deployment mapping for this app + * Enable deployment mapping for this app (example: true) * * @generated from field: bool enable = 1; */ enable: boolean; /** - * Target machine ids or tag selectors + * Target machine ids or tag selectors (example: "prod-web-01") * * @generated from field: repeated string targets = 2; */ targets: string[]; /** - * Deployment role label for this app + * Deployment role label for this app (example: "web") * * @generated from field: optional string role = 3; */ role?: string; /** - * Extra NixOS modules to import for this app + * Extra NixOS modules to import for this app (example: "./modules/nginx.nix") * * @generated from field: repeated string nixos_modules = 4; */ nixosModules: string[]; /** - * Target system/architecture (e.g., x86_64-linux) + * Target system/architecture (e.g., x86_64-linux) (example: "x86_64-linux") * * @generated from field: optional string system = 5; */ system?: string; /** - * Secret references required by this app during deploy + * Secret references required by this app during deploy (example: "DATABASE_URL") * * @generated from field: repeated string secrets = 6; */ @@ -160,14 +160,14 @@ export declare const AppDeploySchema: GenMessage; */ export declare type AppEnvironment = Message<"stackpanel.db.AppEnvironment"> & { /** - * Name of the environment + * Name of the environment (example: "dev") * * @generated from field: string name = 1; */ name: string; /** - * (optional) Description of the environment + * (optional) Description of the environment (example: "Local development environment") * * @generated from field: optional string description = 2; */ @@ -185,7 +185,7 @@ export declare type AppEnvironment = Message<"stackpanel.db.AppEnvironment"> & { env: { [key: string]: string }; /** - * Inherit these environments - useful for sharing environment variables between environments. + * Inherit these environments - useful for sharing environment variables between environments. (example: "common") * * @generated from field: repeated string extends = 4; */ @@ -196,7 +196,7 @@ export declare type AppEnvironment = Message<"stackpanel.db.AppEnvironment"> & { * Env var names in this environment that contain sensitive values. * Used to auto-derive deployment.secrets — these are wrapped with * alchemy.secret() at deploy time. - * + * (example: "DATABASE_URL") * * @generated from field: repeated string secrets = 5; */ @@ -236,46 +236,58 @@ export declare const AppsSchema: GenMessage; */ export declare type EnvironmentVariable = Message<"stackpanel.db.EnvironmentVariable"> & { /** - * ID of the environment variable - defaults to key used in the attribute path. KEY will be read from $KEY in the environment + * ID of the environment variable - defaults to key used in the attribute path. KEY will be read from $KEY in the environment (example: "DATABASE_URL") * * @generated from field: string key = 1; */ key: string; /** - * Whether the environment variable is required + * Whether the environment variable is required (example: true) * * @generated from field: bool required = 2; */ required: boolean; /** - * Whether the environment variable is sensitive + * Whether the environment variable is sensitive (example: false) * * @generated from field: bool secret = 3; */ secret: boolean; /** - * Value of the environment variable + * Value of the environment variable (example: "postgres://localhost:5432/app") * * @generated from field: optional string value = 4; */ value?: string; /** - * Path to the SOPS file for this variable's group + * Path to the SOPS file for this variable's group (example: ".stack/secrets/dev.yaml") * * @generated from field: optional string sops = 5; */ sops?: string; /** - * Default value of the environment variable + * Default value of the environment variable (example: "postgres://localhost:5432/app") * * @generated from field: optional string defaultValue = 6; */ defaultValue?: string; + + /** + * + * Human-readable description of what this variable is for and where to + * obtain it. Surfaced in the studio Variables UI and in the actionable + * error message thrown by `loadAppEnv(..., { validate: true })` when + * the variable is missing. + * (example: "Postgres connection string used by the API server") + * + * @generated from field: optional string description = 7; + */ + description?: string; }; /** diff --git a/packages/proto/gen/ts/apps_pb.js b/packages/proto/gen/ts/apps_pb.js index f7ef035f..4c27e947 100644 --- a/packages/proto/gen/ts/apps_pb.js +++ b/packages/proto/gen/ts/apps_pb.js @@ -8,7 +8,7 @@ import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2"; * Describes the file apps.proto. */ export const file_apps = /*@__PURE__*/ - fileDesc("CgphcHBzLnByb3RvEg1zdGFja3BhbmVsLmRiIu8DCgNBcHASDAoEbmFtZRgBIAEoCRIYCgtkZXNjcmlwdGlvbhgCIAEoCUgAiAEBEgwKBHBhdGgYAyABKAkSEQoEdHlwZRgEIAEoCUgBiAEBEhEKBHBvcnQYBSABKAVIAogBARITCgZkb21haW4YBiABKAlIA4gBARI6CgxlbnZpcm9ubWVudHMYByADKAsyJC5zdGFja3BhbmVsLmRiLkFwcC5FbnZpcm9ubWVudHNFbnRyeRIoCgZkZXBsb3kYCCABKAsyGC5zdGFja3BhbmVsLmRiLkFwcERlcGxveRIoCgNlbnYYCSADKAsyGy5zdGFja3BhbmVsLmRiLkFwcC5FbnZFbnRyeRIWCg5lbnZpcm9ubWVudElkcxgKIAMoCRpSChFFbnZpcm9ubWVudHNFbnRyeRILCgNrZXkYASABKAkSLAoFdmFsdWUYAiABKAsyHS5zdGFja3BhbmVsLmRiLkFwcEVudmlyb25tZW50OgI4ARpOCghFbnZFbnRyeRILCgNrZXkYASABKAkSMQoFdmFsdWUYAiABKAsyIi5zdGFja3BhbmVsLmRiLkVudmlyb25tZW50VmFyaWFibGU6AjgBQg4KDF9kZXNjcmlwdGlvbkIHCgVfdHlwZUIHCgVfcG9ydEIJCgdfZG9tYWluIpABCglBcHBEZXBsb3kSDgoGZW5hYmxlGAEgASgIEg8KB3RhcmdldHMYAiADKAkSEQoEcm9sZRgDIAEoCUgAiAEBEhUKDW5peG9zX21vZHVsZXMYBCADKAkSEwoGc3lzdGVtGAUgASgJSAGIAQESDwoHc2VjcmV0cxgGIAMoCUIHCgVfcm9sZUIJCgdfc3lzdGVtIssBCg5BcHBFbnZpcm9ubWVudBIMCgRuYW1lGAEgASgJEhgKC2Rlc2NyaXB0aW9uGAIgASgJSACIAQESMwoDZW52GAMgAygLMiYuc3RhY2twYW5lbC5kYi5BcHBFbnZpcm9ubWVudC5FbnZFbnRyeRIPCgdleHRlbmRzGAQgAygJEg8KB3NlY3JldHMYBSADKAkaKgoIRW52RW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4AUIOCgxfZGVzY3JpcHRpb24idAoEQXBwcxIrCgRhcHBzGAEgAygLMh0uc3RhY2twYW5lbC5kYi5BcHBzLkFwcHNFbnRyeRo/CglBcHBzRW50cnkSCwoDa2V5GAEgASgJEiEKBXZhbHVlGAIgASgLMhIuc3RhY2twYW5lbC5kYi5BcHA6AjgBIqoBChNFbnZpcm9ubWVudFZhcmlhYmxlEgsKA2tleRgBIAEoCRIQCghyZXF1aXJlZBgCIAEoCBIOCgZzZWNyZXQYAyABKAgSEgoFdmFsdWUYBCABKAlIAIgBARIRCgRzb3BzGAUgASgJSAGIAQESGQoMZGVmYXVsdFZhbHVlGAYgASgJSAKIAQFCCAoGX3ZhbHVlQgcKBV9zb3BzQg8KDV9kZWZhdWx0VmFsdWVCOlo4Z2l0aHViLmNvbS9kYXJrbWF0dGVyL3N0YWNrcGFuZWwvcGFja2FnZXMvcHJvdG8vZ2VuL2dvcGJiBnByb3RvMw"); + fileDesc("CgphcHBzLnByb3RvEg1zdGFja3BhbmVsLmRiIu8DCgNBcHASDAoEbmFtZRgBIAEoCRIYCgtkZXNjcmlwdGlvbhgCIAEoCUgAiAEBEgwKBHBhdGgYAyABKAkSEQoEdHlwZRgEIAEoCUgBiAEBEhEKBHBvcnQYBSABKAVIAogBARITCgZkb21haW4YBiABKAlIA4gBARI6CgxlbnZpcm9ubWVudHMYByADKAsyJC5zdGFja3BhbmVsLmRiLkFwcC5FbnZpcm9ubWVudHNFbnRyeRIoCgZkZXBsb3kYCCABKAsyGC5zdGFja3BhbmVsLmRiLkFwcERlcGxveRIoCgNlbnYYCSADKAsyGy5zdGFja3BhbmVsLmRiLkFwcC5FbnZFbnRyeRIWCg5lbnZpcm9ubWVudElkcxgKIAMoCRpSChFFbnZpcm9ubWVudHNFbnRyeRILCgNrZXkYASABKAkSLAoFdmFsdWUYAiABKAsyHS5zdGFja3BhbmVsLmRiLkFwcEVudmlyb25tZW50OgI4ARpOCghFbnZFbnRyeRILCgNrZXkYASABKAkSMQoFdmFsdWUYAiABKAsyIi5zdGFja3BhbmVsLmRiLkVudmlyb25tZW50VmFyaWFibGU6AjgBQg4KDF9kZXNjcmlwdGlvbkIHCgVfdHlwZUIHCgVfcG9ydEIJCgdfZG9tYWluIpABCglBcHBEZXBsb3kSDgoGZW5hYmxlGAEgASgIEg8KB3RhcmdldHMYAiADKAkSEQoEcm9sZRgDIAEoCUgAiAEBEhUKDW5peG9zX21vZHVsZXMYBCADKAkSEwoGc3lzdGVtGAUgASgJSAGIAQESDwoHc2VjcmV0cxgGIAMoCUIHCgVfcm9sZUIJCgdfc3lzdGVtIssBCg5BcHBFbnZpcm9ubWVudBIMCgRuYW1lGAEgASgJEhgKC2Rlc2NyaXB0aW9uGAIgASgJSACIAQESMwoDZW52GAMgAygLMiYuc3RhY2twYW5lbC5kYi5BcHBFbnZpcm9ubWVudC5FbnZFbnRyeRIPCgdleHRlbmRzGAQgAygJEg8KB3NlY3JldHMYBSADKAkaKgoIRW52RW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4AUIOCgxfZGVzY3JpcHRpb24idAoEQXBwcxIrCgRhcHBzGAEgAygLMh0uc3RhY2twYW5lbC5kYi5BcHBzLkFwcHNFbnRyeRo/CglBcHBzRW50cnkSCwoDa2V5GAEgASgJEiEKBXZhbHVlGAIgASgLMhIuc3RhY2twYW5lbC5kYi5BcHA6AjgBItQBChNFbnZpcm9ubWVudFZhcmlhYmxlEgsKA2tleRgBIAEoCRIQCghyZXF1aXJlZBgCIAEoCBIOCgZzZWNyZXQYAyABKAgSEgoFdmFsdWUYBCABKAlIAIgBARIRCgRzb3BzGAUgASgJSAGIAQESGQoMZGVmYXVsdFZhbHVlGAYgASgJSAKIAQESGAoLZGVzY3JpcHRpb24YByABKAlIA4gBAUIICgZfdmFsdWVCBwoFX3NvcHNCDwoNX2RlZmF1bHRWYWx1ZUIOCgxfZGVzY3JpcHRpb25COlo4Z2l0aHViLmNvbS9kYXJrbWF0dGVyL3N0YWNrcGFuZWwvcGFja2FnZXMvcHJvdG8vZ2VuL2dvcGJiBnByb3RvMw"); /** * Describes the message stackpanel.db.App. diff --git a/packages/proto/gen/ts/aws.ts b/packages/proto/gen/ts/aws.ts index 17cae761..295457a2 100644 --- a/packages/proto/gen/ts/aws.ts +++ b/packages/proto/gen/ts/aws.ts @@ -23,11 +23,11 @@ export interface Aws { /** * @generated from protobuf field: string default_profile = 2 */ - default_profile: string; // AWS profile name to use as default (default: 'default') + default_profile: string; // AWS profile name to use as default (default: 'default') (example: "default") /** * @generated from protobuf field: string extra_config = 3 */ - extra_config: string; // Additional AWS config to append (raw INI format) + extra_config: string; // Additional AWS config to append (raw INI format) (example: "[profile dev]\nregion = us-east-1") } /** * AWS Roles Anywhere configuration for certificate-based authentication @@ -38,35 +38,35 @@ export interface RolesAnywhere { /** * @generated from protobuf field: bool enable = 1 */ - enable: boolean; // Enable AWS Roles Anywhere cert auth + enable: boolean; // Enable AWS Roles Anywhere cert auth (example: true) /** * @generated from protobuf field: string region = 2 */ - region: string; // AWS region + region: string; // AWS region (example: "us-east-1") /** * @generated from protobuf field: string account_id = 3 */ - account_id: string; // AWS account ID + account_id: string; // AWS account ID (example: "123456789012") /** * @generated from protobuf field: string role_name = 4 */ - role_name: string; // IAM role name to assume + role_name: string; // IAM role name to assume (example: "DeveloperRole") /** * @generated from protobuf field: string trust_anchor_arn = 5 */ - trust_anchor_arn: string; // AWS Roles Anywhere trust anchor ARN + trust_anchor_arn: string; // AWS Roles Anywhere trust anchor ARN (example: "arn:aws:rolesanywhere:us-east-1:123456789012:trust-anchor/abcd1234") /** * @generated from protobuf field: string profile_arn = 6 */ - profile_arn: string; // AWS Roles Anywhere profile ARN + profile_arn: string; // AWS Roles Anywhere profile ARN (example: "arn:aws:rolesanywhere:us-east-1:123456789012:profile/efgh5678") /** * @generated from protobuf field: string cache_buffer_seconds = 7 */ - cache_buffer_seconds: string; // Seconds before expiry to refresh cached credentials + cache_buffer_seconds: string; // Seconds before expiry to refresh cached credentials (example: "300") /** * @generated from protobuf field: bool prompt_on_shell = 8 */ - prompt_on_shell: boolean; // Prompt for AWS cert-auth setup on shell entry if not configured + prompt_on_shell: boolean; // Prompt for AWS cert-auth setup on shell entry if not configured (example: true) } // @generated message type with reflection information, may provide speed optimized methods class Aws$Type extends MessageType { diff --git a/packages/proto/gen/ts/aws_pb.d.ts b/packages/proto/gen/ts/aws_pb.d.ts index 9e408d9b..fec53f3e 100644 --- a/packages/proto/gen/ts/aws_pb.d.ts +++ b/packages/proto/gen/ts/aws_pb.d.ts @@ -24,14 +24,14 @@ export declare type Aws = Message<"stackpanel.db.Aws"> & { rolesAnywhere?: RolesAnywhere; /** - * AWS profile name to use as default (default: 'default') + * AWS profile name to use as default (default: 'default') (example: "default") * * @generated from field: string default_profile = 2; */ defaultProfile: string; /** - * Additional AWS config to append (raw INI format) + * Additional AWS config to append (raw INI format) (example: "[profile dev]\nregion = us-east-1") * * @generated from field: string extra_config = 3; */ @@ -51,56 +51,56 @@ export declare const AwsSchema: GenMessage; */ export declare type RolesAnywhere = Message<"stackpanel.db.RolesAnywhere"> & { /** - * Enable AWS Roles Anywhere cert auth + * Enable AWS Roles Anywhere cert auth (example: true) * * @generated from field: bool enable = 1; */ enable: boolean; /** - * AWS region + * AWS region (example: "us-east-1") * * @generated from field: string region = 2; */ region: string; /** - * AWS account ID + * AWS account ID (example: "123456789012") * * @generated from field: string account_id = 3; */ accountId: string; /** - * IAM role name to assume + * IAM role name to assume (example: "DeveloperRole") * * @generated from field: string role_name = 4; */ roleName: string; /** - * AWS Roles Anywhere trust anchor ARN + * AWS Roles Anywhere trust anchor ARN (example: "arn:aws:rolesanywhere:us-east-1:123456789012:trust-anchor/abcd1234") * * @generated from field: string trust_anchor_arn = 5; */ trustAnchorArn: string; /** - * AWS Roles Anywhere profile ARN + * AWS Roles Anywhere profile ARN (example: "arn:aws:rolesanywhere:us-east-1:123456789012:profile/efgh5678") * * @generated from field: string profile_arn = 6; */ profileArn: string; /** - * Seconds before expiry to refresh cached credentials + * Seconds before expiry to refresh cached credentials (example: "300") * * @generated from field: string cache_buffer_seconds = 7; */ cacheBufferSeconds: string; /** - * Prompt for AWS cert-auth setup on shell entry if not configured + * Prompt for AWS cert-auth setup on shell entry if not configured (example: true) * * @generated from field: bool prompt_on_shell = 8; */ diff --git a/packages/proto/gen/ts/bun_app.ts b/packages/proto/gen/ts/bun_app.ts index 9edc4670..5cdace34 100644 --- a/packages/proto/gen/ts/bun_app.ts +++ b/packages/proto/gen/ts/bun_app.ts @@ -23,7 +23,7 @@ export interface BunAppConfig { /** * @generated from protobuf field: string main_package = 2 */ - main_package: string; // Main entry point for bun run + main_package: string; // Main entry point for bun run (example: "src/index.ts") /** * @generated from protobuf field: string version = 3 */ @@ -31,7 +31,7 @@ export interface BunAppConfig { /** * @generated from protobuf field: optional string binary_name = 4 */ - binary_name?: string; // Binary name (if different from app name) + binary_name?: string; // Binary name (if different from app name) (example: "my-app") /** * @generated from protobuf field: string build_phase = 5 */ @@ -45,7 +45,7 @@ export interface BunAppConfig { */ runtime_env: { [key: string]: string; - }; // Runtime environment variables + }; // Runtime environment variables (example: {"NODE_ENV":"production"}) /** * @generated from protobuf field: bool inherit_path = 8 */ @@ -61,7 +61,7 @@ export interface BunAppConfig { /** * @generated from protobuf field: string output_dir = 11 */ - output_dir: string; // Build output directory copied into the packaged artifact + output_dir: string; // Build output directory copied into the packaged artifact (example: "dist") } // @generated message type with reflection information, may provide speed optimized methods class BunAppConfig$Type extends MessageType { diff --git a/packages/proto/gen/ts/bun_app_pb.d.ts b/packages/proto/gen/ts/bun_app_pb.d.ts index 6edbc412..4b133a03 100644 --- a/packages/proto/gen/ts/bun_app_pb.d.ts +++ b/packages/proto/gen/ts/bun_app_pb.d.ts @@ -24,7 +24,7 @@ export declare type BunAppConfig = Message<"stackpanel.modules.BunAppConfig"> & enable: boolean; /** - * Main entry point for bun run + * Main entry point for bun run (example: "src/index.ts") * * @generated from field: string main_package = 2; */ @@ -38,7 +38,7 @@ export declare type BunAppConfig = Message<"stackpanel.modules.BunAppConfig"> & version: string; /** - * Binary name (if different from app name) + * Binary name (if different from app name) (example: "my-app") * * @generated from field: optional string binary_name = 4; */ @@ -59,7 +59,7 @@ export declare type BunAppConfig = Message<"stackpanel.modules.BunAppConfig"> & startScript: string; /** - * Runtime environment variables + * Runtime environment variables (example: {"NODE_ENV":"production"}) * * @generated from field: map runtime_env = 7; */ @@ -87,7 +87,7 @@ export declare type BunAppConfig = Message<"stackpanel.modules.BunAppConfig"> & description: string; /** - * Build output directory copied into the packaged artifact + * Build output directory copied into the packaged artifact (example: "dist") * * @generated from field: string output_dir = 11; */ diff --git a/packages/proto/gen/ts/config.ts b/packages/proto/gen/ts/config.ts index 8a6928fe..11a47bb0 100644 --- a/packages/proto/gen/ts/config.ts +++ b/packages/proto/gen/ts/config.ts @@ -19,19 +19,19 @@ export interface Config { /** * @generated from protobuf field: bool enable = 1 */ - enable: boolean; // Enable stackpanel for this project + enable: boolean; // Enable stackpanel for this project (example: true) /** * @generated from protobuf field: string name = 2 */ - name: string; // Project name + name: string; // Project name (example: "stackpanel-demo") /** * @generated from protobuf field: string github = 3 */ - github: string; // GitHub repository (owner/repo format) + github: string; // GitHub repository (owner/repo format) (example: "darkmatter/stackpanel") /** * @generated from protobuf field: bool debug = 4 */ - debug: boolean; // Enable debug output + debug: boolean; // Enable debug output (example: false) } // @generated message type with reflection information, may provide speed optimized methods class Config$Type extends MessageType { diff --git a/packages/proto/gen/ts/config_pb.d.ts b/packages/proto/gen/ts/config_pb.d.ts index 1d4050c7..9fad5be1 100644 --- a/packages/proto/gen/ts/config_pb.d.ts +++ b/packages/proto/gen/ts/config_pb.d.ts @@ -17,28 +17,28 @@ export declare const file_config: GenFile; */ export declare type Config = Message<"stackpanel.db.Config"> & { /** - * Enable stackpanel for this project + * Enable stackpanel for this project (example: true) * * @generated from field: bool enable = 1; */ enable: boolean; /** - * Project name + * Project name (example: "stackpanel-demo") * * @generated from field: string name = 2; */ name: string; /** - * GitHub repository (owner/repo format) + * GitHub repository (owner/repo format) (example: "darkmatter/stackpanel") * * @generated from field: string github = 3; */ github: string; /** - * Enable debug output + * Enable debug output (example: false) * * @generated from field: bool debug = 4; */ diff --git a/packages/proto/gen/ts/databases.ts b/packages/proto/gen/ts/databases.ts index c1462463..db4b4f19 100644 --- a/packages/proto/gen/ts/databases.ts +++ b/packages/proto/gen/ts/databases.ts @@ -19,27 +19,27 @@ export interface Connection { /** * @generated from protobuf field: string host = 1 */ - host: string; // Database host + host: string; // Database host (example: "localhost") /** * @generated from protobuf field: int32 port = 2 */ - port: number; // Database port + port: number; // Database port (example: 5432) /** * @generated from protobuf field: string database = 3 */ - database: string; // Database name + database: string; // Database name (example: "stackpanel") /** * @generated from protobuf field: string username = 4 */ - username: string; // Database username + username: string; // Database username (example: "postgres") /** * @generated from protobuf field: optional string password_env = 5 */ - password_env?: string; // Environment variable containing the password + password_env?: string; // Environment variable containing the password (example: "DATABASE_PASSWORD") /** * @generated from protobuf field: bool ssl = 6 */ - ssl: boolean; // Enable SSL/TLS connection + ssl: boolean; // Enable SSL/TLS connection (example: false) /** * @generated from protobuf field: stackpanel.db.SSLMode ssl_mode = 7 */ @@ -66,15 +66,15 @@ export interface DatabaseInstance { /** * @generated from protobuf field: string migrations_path = 4 */ - migrations_path: string; // Path to migrations directory + migrations_path: string; // Path to migrations directory (example: "./apps/server/migrations") /** * @generated from protobuf field: optional string seeds_path = 5 */ - seeds_path?: string; // Path to seed data directory + seeds_path?: string; // Path to seed data directory (example: "./apps/server/seeds") /** * @generated from protobuf field: bool auto_migrate = 6 */ - auto_migrate: boolean; // Run migrations on startup + auto_migrate: boolean; // Run migrations on startup (example: true) } /** * Database connection and configuration settings @@ -85,7 +85,7 @@ export interface Databases { /** * @generated from protobuf field: string default = 1 */ - default: string; // Default database configuration to use + default: string; // Default database configuration to use (example: "primary") /** * @generated from protobuf field: map databases = 2 */ @@ -102,19 +102,19 @@ export interface Pool { /** * @generated from protobuf field: int32 min = 1 */ - min: number; // Minimum connections in pool + min: number; // Minimum connections in pool (example: 2) /** * @generated from protobuf field: int32 max = 2 */ - max: number; // Maximum connections in pool + max: number; // Maximum connections in pool (example: 10) /** * @generated from protobuf field: int32 idle_timeout = 3 */ - idle_timeout: number; // Idle connection timeout in seconds + idle_timeout: number; // Idle connection timeout in seconds (example: 30) /** * @generated from protobuf field: int32 connection_timeout = 4 */ - connection_timeout: number; // Connection timeout in seconds + connection_timeout: number; // Connection timeout in seconds (example: 5) } /** * Supported database types diff --git a/packages/proto/gen/ts/databases_pb.d.ts b/packages/proto/gen/ts/databases_pb.d.ts index fa89b7ec..d47f63cc 100644 --- a/packages/proto/gen/ts/databases_pb.d.ts +++ b/packages/proto/gen/ts/databases_pb.d.ts @@ -17,42 +17,42 @@ export declare const file_databases: GenFile; */ export declare type Connection = Message<"stackpanel.db.Connection"> & { /** - * Database host + * Database host (example: "localhost") * * @generated from field: string host = 1; */ host: string; /** - * Database port + * Database port (example: 5432) * * @generated from field: int32 port = 2; */ port: number; /** - * Database name + * Database name (example: "stackpanel") * * @generated from field: string database = 3; */ database: string; /** - * Database username + * Database username (example: "postgres") * * @generated from field: string username = 4; */ username: string; /** - * Environment variable containing the password + * Environment variable containing the password (example: "DATABASE_PASSWORD") * * @generated from field: optional string password_env = 5; */ passwordEnv?: string; /** - * Enable SSL/TLS connection + * Enable SSL/TLS connection (example: false) * * @generated from field: bool ssl = 6; */ @@ -100,21 +100,21 @@ export declare type DatabaseInstance = Message<"stackpanel.db.DatabaseInstance"> pool?: Pool; /** - * Path to migrations directory + * Path to migrations directory (example: "./apps/server/migrations") * * @generated from field: string migrations_path = 4; */ migrationsPath: string; /** - * Path to seed data directory + * Path to seed data directory (example: "./apps/server/seeds") * * @generated from field: optional string seeds_path = 5; */ seedsPath?: string; /** - * Run migrations on startup + * Run migrations on startup (example: true) * * @generated from field: bool auto_migrate = 6; */ @@ -134,7 +134,7 @@ export declare const DatabaseInstanceSchema: GenMessage; */ export declare type Databases = Message<"stackpanel.db.Databases"> & { /** - * Default database configuration to use + * Default database configuration to use (example: "primary") * * @generated from field: string default = 1; */ @@ -161,28 +161,28 @@ export declare const DatabasesSchema: GenMessage; */ export declare type Pool = Message<"stackpanel.db.Pool"> & { /** - * Minimum connections in pool + * Minimum connections in pool (example: 2) * * @generated from field: int32 min = 1; */ min: number; /** - * Maximum connections in pool + * Maximum connections in pool (example: 10) * * @generated from field: int32 max = 2; */ max: number; /** - * Idle connection timeout in seconds + * Idle connection timeout in seconds (example: 30) * * @generated from field: int32 idle_timeout = 3; */ idleTimeout: number; /** - * Connection timeout in seconds + * Connection timeout in seconds (example: 5) * * @generated from field: int32 connection_timeout = 4; */ diff --git a/packages/proto/gen/ts/deployment.ts b/packages/proto/gen/ts/deployment.ts index 0d52f87d..8c902ea0 100644 --- a/packages/proto/gen/ts/deployment.ts +++ b/packages/proto/gen/ts/deployment.ts @@ -19,7 +19,7 @@ export interface AppDeployment { /** * @generated from protobuf field: bool enable = 1 */ - enable: boolean; // Enable deployment for this app + enable: boolean; // Enable deployment for this app (example: true) /** * @generated from protobuf field: stackpanel.db.DeploymentProvider provider = 2 */ @@ -42,7 +42,7 @@ export interface CloudflareAppConfig { /** * @generated from protobuf field: string worker_name = 1 */ - worker_name: string; // Worker name + worker_name: string; // Worker name (example: "stackpanel-web") /** * @generated from protobuf field: stackpanel.db.CloudflareWorkerType type = 2 */ @@ -50,11 +50,11 @@ export interface CloudflareAppConfig { /** * @generated from protobuf field: optional string route = 3 */ - route?: string; // Custom domain route pattern + route?: string; // Custom domain route pattern (example: "stackpanel.com/*") /** * @generated from protobuf field: string compatibility = 4 */ - compatibility: string; // Compatibility mode (node/browser) + compatibility: string; // Compatibility mode (node/browser) (example: "node") /** * @generated from protobuf field: map bindings = 5 */ @@ -64,19 +64,19 @@ export interface CloudflareAppConfig { /** * @generated from protobuf field: repeated string secrets = 6 */ - secrets: string[]; // Secret names to inject + secrets: string[]; // Secret names to inject (example: "API_KEY") /** * @generated from protobuf field: repeated string kv_namespaces = 7 */ - kv_namespaces: string[]; // KV namespace bindings + kv_namespaces: string[]; // KV namespace bindings (example: "SESSIONS") /** * @generated from protobuf field: repeated string d1_databases = 8 */ - d1_databases: string[]; // D1 database bindings + d1_databases: string[]; // D1 database bindings (example: "DB") /** * @generated from protobuf field: repeated string r2_buckets = 9 */ - r2_buckets: string[]; // R2 bucket bindings + r2_buckets: string[]; // R2 bucket bindings (example: "ASSETS") } /** * Cloudflare global settings @@ -87,15 +87,15 @@ export interface CloudflareGlobalConfig { /** * @generated from protobuf field: optional string account_id = 1 */ - account_id?: string; // Cloudflare account ID + account_id?: string; // Cloudflare account ID (example: "abcd1234abcd1234abcd1234abcd1234") /** * @generated from protobuf field: string compatibility_date = 2 */ - compatibility_date: string; // Workers compatibility date + compatibility_date: string; // Workers compatibility date (example: "2026-04-01") /** * @generated from protobuf field: optional string default_route = 3 */ - default_route?: string; // Default custom domain route pattern + default_route?: string; // Default custom domain route pattern (example: "*.stackpanel.com/*") } /** * Global deployment configuration @@ -136,11 +136,11 @@ export interface DeploymentRecord { /** * @generated from protobuf field: string id = 1 */ - id: string; // Unique deployment ID + id: string; // Unique deployment ID (example: "deploy-2026-04-30-001") /** * @generated from protobuf field: string app_name = 2 */ - app_name: string; // App that was deployed + app_name: string; // App that was deployed (example: "web") /** * @generated from protobuf field: stackpanel.db.DeploymentProvider provider = 3 */ @@ -152,31 +152,31 @@ export interface DeploymentRecord { /** * @generated from protobuf field: string version = 5 */ - version: string; // Version/tag deployed + version: string; // Version/tag deployed (example: "v1.4.2") /** * @generated from protobuf field: string started_at = 6 */ - started_at: string; // ISO timestamp of deployment start + started_at: string; // ISO timestamp of deployment start (example: "2026-04-30T18:21:04Z") /** * @generated from protobuf field: optional string completed_at = 7 */ - completed_at?: string; // ISO timestamp of completion + completed_at?: string; // ISO timestamp of completion (example: "2026-04-30T18:23:51Z") /** * @generated from protobuf field: optional string error = 8 */ - error?: string; // Error message if failed + error?: string; // Error message if failed (example: "build failed: missing DATABASE_URL") /** * @generated from protobuf field: optional string url = 9 */ - url?: string; // Deployed URL + url?: string; // Deployed URL (example: "https://stackpanel.com") /** * @generated from protobuf field: optional string commit_sha = 10 */ - commit_sha?: string; // Git commit SHA + commit_sha?: string; // Git commit SHA (example: "ba6e3d245") /** * @generated from protobuf field: optional string triggered_by = 11 */ - triggered_by?: string; // User or system that triggered + triggered_by?: string; // User or system that triggered (example: "cooper@darkmatter.io") } /** * Fly.io per-app deployment configuration @@ -187,15 +187,15 @@ export interface FlyAppConfig { /** * @generated from protobuf field: string app_name = 1 */ - app_name: string; // Fly.io app name + app_name: string; // Fly.io app name (example: "stackpanel-web") /** * @generated from protobuf field: string region = 2 */ - region: string; // Primary deployment region + region: string; // Primary deployment region (example: "iad") /** * @generated from protobuf field: string memory = 3 */ - memory: string; // Memory allocation (e.g., '512mb', '1gb') + memory: string; // Memory allocation (e.g., '512mb', '1gb') (example: "512mb") /** * @generated from protobuf field: stackpanel.db.FlyMachineCpuKind cpu_kind = 4 */ @@ -203,7 +203,7 @@ export interface FlyAppConfig { /** * @generated from protobuf field: int32 cpus = 5 */ - cpus: number; // Number of CPUs + cpus: number; // Number of CPUs (example: 1) /** * @generated from protobuf field: stackpanel.db.FlyAutoStop auto_stop = 6 */ @@ -211,15 +211,15 @@ export interface FlyAppConfig { /** * @generated from protobuf field: bool auto_start = 7 */ - auto_start: boolean; // Auto-start on request + auto_start: boolean; // Auto-start on request (example: true) /** * @generated from protobuf field: int32 min_machines = 8 */ - min_machines: number; // Minimum machines to keep running + min_machines: number; // Minimum machines to keep running (example: 0) /** * @generated from protobuf field: bool force_https = 9 */ - force_https: boolean; // Force HTTPS for all requests + force_https: boolean; // Force HTTPS for all requests (example: true) /** * @generated from protobuf field: map env = 10 */ @@ -229,15 +229,15 @@ export interface FlyAppConfig { /** * @generated from protobuf field: repeated string secrets = 11 */ - secrets: string[]; // Secret names to inject + secrets: string[]; // Secret names to inject (example: "DATABASE_URL") /** * @generated from protobuf field: optional string health_check_path = 12 */ - health_check_path?: string; // Health check endpoint path + health_check_path?: string; // Health check endpoint path (example: "/health") /** * @generated from protobuf field: optional string health_check_interval = 13 */ - health_check_interval?: string; // Health check interval + health_check_interval?: string; // Health check interval (example: "30s") } /** * Fly.io global settings @@ -248,15 +248,15 @@ export interface FlyGlobalConfig { /** * @generated from protobuf field: optional string organization = 1 */ - organization?: string; // Fly.io organization name + organization?: string; // Fly.io organization name (example: "darkmatter-io") /** * @generated from protobuf field: string default_region = 2 */ - default_region: string; // Default region for new apps + default_region: string; // Default region for new apps (example: "iad") /** * @generated from protobuf field: string registry_prefix = 3 */ - registry_prefix: string; // Container registry prefix + registry_prefix: string; // Container registry prefix (example: "registry.fly.io/darkmatter") } /** * Type of Cloudflare Worker deployment diff --git a/packages/proto/gen/ts/deployment_pb.d.ts b/packages/proto/gen/ts/deployment_pb.d.ts index 96b7ec65..603a6e04 100644 --- a/packages/proto/gen/ts/deployment_pb.d.ts +++ b/packages/proto/gen/ts/deployment_pb.d.ts @@ -17,7 +17,7 @@ export declare const file_deployment: GenFile; */ export declare type AppDeployment = Message<"stackpanel.db.AppDeployment"> & { /** - * Enable deployment for this app + * Enable deployment for this app (example: true) * * @generated from field: bool enable = 1; */ @@ -58,7 +58,7 @@ export declare const AppDeploymentSchema: GenMessage; */ export declare type CloudflareAppConfig = Message<"stackpanel.db.CloudflareAppConfig"> & { /** - * Worker name + * Worker name (example: "stackpanel-web") * * @generated from field: string worker_name = 1; */ @@ -72,14 +72,14 @@ export declare type CloudflareAppConfig = Message<"stackpanel.db.CloudflareAppCo type: CloudflareWorkerType; /** - * Custom domain route pattern + * Custom domain route pattern (example: "stackpanel.com/*") * * @generated from field: optional string route = 3; */ route?: string; /** - * Compatibility mode (node/browser) + * Compatibility mode (node/browser) (example: "node") * * @generated from field: string compatibility = 4; */ @@ -93,28 +93,28 @@ export declare type CloudflareAppConfig = Message<"stackpanel.db.CloudflareAppCo bindings: { [key: string]: string }; /** - * Secret names to inject + * Secret names to inject (example: "API_KEY") * * @generated from field: repeated string secrets = 6; */ secrets: string[]; /** - * KV namespace bindings + * KV namespace bindings (example: "SESSIONS") * * @generated from field: repeated string kv_namespaces = 7; */ kvNamespaces: string[]; /** - * D1 database bindings + * D1 database bindings (example: "DB") * * @generated from field: repeated string d1_databases = 8; */ d1Databases: string[]; /** - * R2 bucket bindings + * R2 bucket bindings (example: "ASSETS") * * @generated from field: repeated string r2_buckets = 9; */ @@ -134,21 +134,21 @@ export declare const CloudflareAppConfigSchema: GenMessage; */ export declare type CloudflareGlobalConfig = Message<"stackpanel.db.CloudflareGlobalConfig"> & { /** - * Cloudflare account ID + * Cloudflare account ID (example: "abcd1234abcd1234abcd1234abcd1234") * * @generated from field: optional string account_id = 1; */ accountId?: string; /** - * Workers compatibility date + * Workers compatibility date (example: "2026-04-01") * * @generated from field: string compatibility_date = 2; */ compatibilityDate: string; /** - * Default custom domain route pattern + * Default custom domain route pattern (example: "*.stackpanel.com/*") * * @generated from field: optional string default_route = 3; */ @@ -222,14 +222,14 @@ export declare const DeploymentHistorySchema: GenMessage; */ export declare type DeploymentRecord = Message<"stackpanel.db.DeploymentRecord"> & { /** - * Unique deployment ID + * Unique deployment ID (example: "deploy-2026-04-30-001") * * @generated from field: string id = 1; */ id: string; /** - * App that was deployed + * App that was deployed (example: "web") * * @generated from field: string app_name = 2; */ @@ -250,49 +250,49 @@ export declare type DeploymentRecord = Message<"stackpanel.db.DeploymentRecord"> status: DeploymentStatus; /** - * Version/tag deployed + * Version/tag deployed (example: "v1.4.2") * * @generated from field: string version = 5; */ version: string; /** - * ISO timestamp of deployment start + * ISO timestamp of deployment start (example: "2026-04-30T18:21:04Z") * * @generated from field: string started_at = 6; */ startedAt: string; /** - * ISO timestamp of completion + * ISO timestamp of completion (example: "2026-04-30T18:23:51Z") * * @generated from field: optional string completed_at = 7; */ completedAt?: string; /** - * Error message if failed + * Error message if failed (example: "build failed: missing DATABASE_URL") * * @generated from field: optional string error = 8; */ error?: string; /** - * Deployed URL + * Deployed URL (example: "https://stackpanel.com") * * @generated from field: optional string url = 9; */ url?: string; /** - * Git commit SHA + * Git commit SHA (example: "ba6e3d245") * * @generated from field: optional string commit_sha = 10; */ commitSha?: string; /** - * User or system that triggered + * User or system that triggered (example: "cooper@darkmatter.io") * * @generated from field: optional string triggered_by = 11; */ @@ -312,21 +312,21 @@ export declare const DeploymentRecordSchema: GenMessage; */ export declare type FlyAppConfig = Message<"stackpanel.db.FlyAppConfig"> & { /** - * Fly.io app name + * Fly.io app name (example: "stackpanel-web") * * @generated from field: string app_name = 1; */ appName: string; /** - * Primary deployment region + * Primary deployment region (example: "iad") * * @generated from field: string region = 2; */ region: string; /** - * Memory allocation (e.g., '512mb', '1gb') + * Memory allocation (e.g., '512mb', '1gb') (example: "512mb") * * @generated from field: string memory = 3; */ @@ -340,7 +340,7 @@ export declare type FlyAppConfig = Message<"stackpanel.db.FlyAppConfig"> & { cpuKind: FlyMachineCpuKind; /** - * Number of CPUs + * Number of CPUs (example: 1) * * @generated from field: int32 cpus = 5; */ @@ -354,21 +354,21 @@ export declare type FlyAppConfig = Message<"stackpanel.db.FlyAppConfig"> & { autoStop: FlyAutoStop; /** - * Auto-start on request + * Auto-start on request (example: true) * * @generated from field: bool auto_start = 7; */ autoStart: boolean; /** - * Minimum machines to keep running + * Minimum machines to keep running (example: 0) * * @generated from field: int32 min_machines = 8; */ minMachines: number; /** - * Force HTTPS for all requests + * Force HTTPS for all requests (example: true) * * @generated from field: bool force_https = 9; */ @@ -382,21 +382,21 @@ export declare type FlyAppConfig = Message<"stackpanel.db.FlyAppConfig"> & { env: { [key: string]: string }; /** - * Secret names to inject + * Secret names to inject (example: "DATABASE_URL") * * @generated from field: repeated string secrets = 11; */ secrets: string[]; /** - * Health check endpoint path + * Health check endpoint path (example: "/health") * * @generated from field: optional string health_check_path = 12; */ healthCheckPath?: string; /** - * Health check interval + * Health check interval (example: "30s") * * @generated from field: optional string health_check_interval = 13; */ @@ -416,21 +416,21 @@ export declare const FlyAppConfigSchema: GenMessage; */ export declare type FlyGlobalConfig = Message<"stackpanel.db.FlyGlobalConfig"> & { /** - * Fly.io organization name + * Fly.io organization name (example: "darkmatter-io") * * @generated from field: optional string organization = 1; */ organization?: string; /** - * Default region for new apps + * Default region for new apps (example: "iad") * * @generated from field: string default_region = 2; */ defaultRegion: string; /** - * Container registry prefix + * Container registry prefix (example: "registry.fly.io/darkmatter") * * @generated from field: string registry_prefix = 3; */ diff --git a/packages/proto/gen/ts/extensions.ts b/packages/proto/gen/ts/extensions.ts index 676836be..11c1e5c4 100644 --- a/packages/proto/gen/ts/extensions.ts +++ b/packages/proto/gen/ts/extensions.ts @@ -19,19 +19,19 @@ export interface Extension { /** * @generated from protobuf field: string name = 1 */ - name: string; // Display name of the extension + name: string; // Display name of the extension (example: "SST") /** * @generated from protobuf field: optional string description = 2 */ - description?: string; // Human-readable description of what the extension does + description?: string; // Human-readable description of what the extension does (example: "Serverless Stack infrastructure-as-code integration") /** * @generated from protobuf field: bool enabled = 3 */ - enabled: boolean; // Whether this extension is enabled + enabled: boolean; // Whether this extension is enabled (example: true) /** * @generated from protobuf field: bool builtin = 4 */ - builtin: boolean; // Whether this is a built-in extension shipped with stackpanel + builtin: boolean; // Whether this is a built-in extension shipped with stackpanel (example: true) /** * @generated from protobuf field: stackpanel.db.ExtensionSource source = 5 */ @@ -39,7 +39,7 @@ export interface Extension { /** * @generated from protobuf field: optional string version = 6 */ - version?: string; // Version constraint (e.g., '^1.0.0', '~2.3', 'latest') + version?: string; // Version constraint (e.g., '^1.0.0', '~2.3', 'latest') (example: "^1.0.0") /** * @generated from protobuf field: stackpanel.db.ExtensionCategory category = 7 */ @@ -47,15 +47,15 @@ export interface Extension { /** * @generated from protobuf field: int32 priority = 8 */ - priority: number; // Load order priority (lower = earlier) + priority: number; // Load order priority (lower = earlier) (example: 100) /** * @generated from protobuf field: repeated string tags = 9 */ - tags: string[]; // Tags for filtering extensions + tags: string[]; // Tags for filtering extensions (example: "infra") /** * @generated from protobuf field: repeated string dependencies = 10 */ - dependencies: string[]; // Other extensions this depends on + dependencies: string[]; // Other extensions this depends on (example: "secrets") /** * @generated from protobuf field: repeated stackpanel.db.ExtensionPanel panels = 11 */ @@ -80,7 +80,7 @@ export interface ExtensionAppData { /** * @generated from protobuf field: bool enabled = 1 */ - enabled: boolean; // Whether extension is enabled for this app + enabled: boolean; // Whether extension is enabled for this app (example: true) /** * @generated from protobuf field: map config = 2 */ @@ -97,35 +97,35 @@ export interface ExtensionFeatures { /** * @generated from protobuf field: bool files = 1 */ - files: boolean; // Extension generates files via stackpanel.files + files: boolean; // Extension generates files via stackpanel.files (example: true) /** * @generated from protobuf field: bool scripts = 2 */ - scripts: boolean; // Extension provides shell scripts/commands + scripts: boolean; // Extension provides shell scripts/commands (example: true) /** * @generated from protobuf field: bool tasks = 3 */ - tasks: boolean; // Extension defines tasks + tasks: boolean; // Extension defines tasks (example: false) /** * @generated from protobuf field: bool secrets = 4 */ - secrets: boolean; // Extension manages secrets/variables + secrets: boolean; // Extension manages secrets/variables (example: false) /** * @generated from protobuf field: bool shell_hooks = 5 */ - shell_hooks: boolean; // Extension adds shell hooks + shell_hooks: boolean; // Extension adds shell hooks (example: true) /** * @generated from protobuf field: bool packages = 6 */ - packages: boolean; // Extension adds devshell packages + packages: boolean; // Extension adds devshell packages (example: true) /** * @generated from protobuf field: bool services = 7 */ - services: boolean; // Extension configures services/processes + services: boolean; // Extension configures services/processes (example: false) /** * @generated from protobuf field: bool checks = 8 */ - checks: boolean; // Extension defines checks/validations + checks: boolean; // Extension defines checks/validations (example: false) } /** * UI panel configuration for the web interface @@ -136,15 +136,15 @@ export interface ExtensionPanel { /** * @generated from protobuf field: string id = 1 */ - id: string; // Unique panel identifier + id: string; // Unique panel identifier (example: "sst-status") /** * @generated from protobuf field: string title = 2 */ - title: string; // Display title + title: string; // Display title (example: "SST Deployment Status") /** * @generated from protobuf field: optional string description = 3 */ - description?: string; // Panel description + description?: string; // Panel description (example: "Live status of SST stacks across environments") /** * @generated from protobuf field: stackpanel.db.PanelType type = 4 */ @@ -152,7 +152,7 @@ export interface ExtensionPanel { /** * @generated from protobuf field: int32 order = 5 */ - order: number; // Display order (lower = first) + order: number; // Display order (lower = first) (example: 10) /** * @generated from protobuf field: repeated stackpanel.db.PanelField fields = 6 */ @@ -171,27 +171,27 @@ export interface ExtensionSource { /** * @generated from protobuf field: optional string repo = 2 */ - repo?: string; // GitHub repository (owner/repo) for github source type + repo?: string; // GitHub repository (owner/repo) for github source type (example: "darkmatter/stackpanel-sst") /** * @generated from protobuf field: optional string package = 3 */ - package?: string; // NPM package name for npm source type + package?: string; // NPM package name for npm source type (example: "@stackpanel/extension-sst") /** * @generated from protobuf field: optional string path = 4 */ - path?: string; // Local path for local source type + path?: string; // Local path for local source type (example: "./extensions/sst") /** * @generated from protobuf field: optional string url = 5 */ - url?: string; // URL for url source type + url?: string; // URL for url source type (example: "https://example.com/sst.tar.gz") /** * @generated from protobuf field: optional string ref = 6 */ - ref?: string; // Git ref (branch, tag, commit) for github source type + ref?: string; // Git ref (branch, tag, commit) for github source type (example: "main") /** * @generated from protobuf field: optional string module_path = 7 */ - module_path?: string; // Path to the Nix module within the source + module_path?: string; // Path to the Nix module within the source (example: "./module.nix") } /** * Extensions and plugins configuration @@ -202,15 +202,15 @@ export interface Extensions { /** * @generated from protobuf field: bool enabled = 1 */ - enabled: boolean; // Enable extensions system + enabled: boolean; // Enable extensions system (example: true) /** * @generated from protobuf field: bool auto_update = 2 */ - auto_update: boolean; // Automatically check for extension updates + auto_update: boolean; // Automatically check for extension updates (example: false) /** * @generated from protobuf field: optional string registry = 3 */ - registry?: string; // Default extension registry URL + registry?: string; // Default extension registry URL (example: "https://registry.stackpanel.dev") /** * @generated from protobuf field: map extensions = 4 */ @@ -227,7 +227,7 @@ export interface PanelField { /** * @generated from protobuf field: string name = 1 */ - name: string; // Field name (maps to component prop) + name: string; // Field name (maps to component prop) (example: "stage") /** * @generated from protobuf field: stackpanel.db.FieldType type = 2 */ @@ -235,11 +235,11 @@ export interface PanelField { /** * @generated from protobuf field: string value = 3 */ - value: string; // Field value (JSON-encoded for complex types) + value: string; // Field value (JSON-encoded for complex types) (example: "production") /** * @generated from protobuf field: repeated string options = 4 */ - options: string[]; // Options for select fields + options: string[]; // Options for select fields (example: "production") } /** * Category of extension for grouping in UI diff --git a/packages/proto/gen/ts/extensions_pb.d.ts b/packages/proto/gen/ts/extensions_pb.d.ts index 92c52188..ba332068 100644 --- a/packages/proto/gen/ts/extensions_pb.d.ts +++ b/packages/proto/gen/ts/extensions_pb.d.ts @@ -17,28 +17,28 @@ export declare const file_extensions: GenFile; */ export declare type Extension = Message<"stackpanel.db.Extension"> & { /** - * Display name of the extension + * Display name of the extension (example: "SST") * * @generated from field: string name = 1; */ name: string; /** - * Human-readable description of what the extension does + * Human-readable description of what the extension does (example: "Serverless Stack infrastructure-as-code integration") * * @generated from field: optional string description = 2; */ description?: string; /** - * Whether this extension is enabled + * Whether this extension is enabled (example: true) * * @generated from field: bool enabled = 3; */ enabled: boolean; /** - * Whether this is a built-in extension shipped with stackpanel + * Whether this is a built-in extension shipped with stackpanel (example: true) * * @generated from field: bool builtin = 4; */ @@ -52,7 +52,7 @@ export declare type Extension = Message<"stackpanel.db.Extension"> & { source?: ExtensionSource; /** - * Version constraint (e.g., '^1.0.0', '~2.3', 'latest') + * Version constraint (e.g., '^1.0.0', '~2.3', 'latest') (example: "^1.0.0") * * @generated from field: optional string version = 6; */ @@ -66,21 +66,21 @@ export declare type Extension = Message<"stackpanel.db.Extension"> & { category: ExtensionCategory; /** - * Load order priority (lower = earlier) + * Load order priority (lower = earlier) (example: 100) * * @generated from field: int32 priority = 8; */ priority: number; /** - * Tags for filtering extensions + * Tags for filtering extensions (example: "infra") * * @generated from field: repeated string tags = 9; */ tags: string[]; /** - * Other extensions this depends on + * Other extensions this depends on (example: "secrets") * * @generated from field: repeated string dependencies = 10; */ @@ -121,7 +121,7 @@ export declare const ExtensionSchema: GenMessage; */ export declare type ExtensionAppData = Message<"stackpanel.db.ExtensionAppData"> & { /** - * Whether extension is enabled for this app + * Whether extension is enabled for this app (example: true) * * @generated from field: bool enabled = 1; */ @@ -148,56 +148,56 @@ export declare const ExtensionAppDataSchema: GenMessage; */ export declare type ExtensionFeatures = Message<"stackpanel.db.ExtensionFeatures"> & { /** - * Extension generates files via stackpanel.files + * Extension generates files via stackpanel.files (example: true) * * @generated from field: bool files = 1; */ files: boolean; /** - * Extension provides shell scripts/commands + * Extension provides shell scripts/commands (example: true) * * @generated from field: bool scripts = 2; */ scripts: boolean; /** - * Extension defines tasks + * Extension defines tasks (example: false) * * @generated from field: bool tasks = 3; */ tasks: boolean; /** - * Extension manages secrets/variables + * Extension manages secrets/variables (example: false) * * @generated from field: bool secrets = 4; */ secrets: boolean; /** - * Extension adds shell hooks + * Extension adds shell hooks (example: true) * * @generated from field: bool shell_hooks = 5; */ shellHooks: boolean; /** - * Extension adds devshell packages + * Extension adds devshell packages (example: true) * * @generated from field: bool packages = 6; */ packages: boolean; /** - * Extension configures services/processes + * Extension configures services/processes (example: false) * * @generated from field: bool services = 7; */ services: boolean; /** - * Extension defines checks/validations + * Extension defines checks/validations (example: false) * * @generated from field: bool checks = 8; */ @@ -217,21 +217,21 @@ export declare const ExtensionFeaturesSchema: GenMessage; */ export declare type ExtensionPanel = Message<"stackpanel.db.ExtensionPanel"> & { /** - * Unique panel identifier + * Unique panel identifier (example: "sst-status") * * @generated from field: string id = 1; */ id: string; /** - * Display title + * Display title (example: "SST Deployment Status") * * @generated from field: string title = 2; */ title: string; /** - * Panel description + * Panel description (example: "Live status of SST stacks across environments") * * @generated from field: optional string description = 3; */ @@ -245,7 +245,7 @@ export declare type ExtensionPanel = Message<"stackpanel.db.ExtensionPanel"> & { type: PanelType; /** - * Display order (lower = first) + * Display order (lower = first) (example: 10) * * @generated from field: int32 order = 5; */ @@ -279,42 +279,42 @@ export declare type ExtensionSource = Message<"stackpanel.db.ExtensionSource"> & type: ExtensionSourceType; /** - * GitHub repository (owner/repo) for github source type + * GitHub repository (owner/repo) for github source type (example: "darkmatter/stackpanel-sst") * * @generated from field: optional string repo = 2; */ repo?: string; /** - * NPM package name for npm source type + * NPM package name for npm source type (example: "@stackpanel/extension-sst") * * @generated from field: optional string package = 3; */ package?: string; /** - * Local path for local source type + * Local path for local source type (example: "./extensions/sst") * * @generated from field: optional string path = 4; */ path?: string; /** - * URL for url source type + * URL for url source type (example: "https://example.com/sst.tar.gz") * * @generated from field: optional string url = 5; */ url?: string; /** - * Git ref (branch, tag, commit) for github source type + * Git ref (branch, tag, commit) for github source type (example: "main") * * @generated from field: optional string ref = 6; */ ref?: string; /** - * Path to the Nix module within the source + * Path to the Nix module within the source (example: "./module.nix") * * @generated from field: optional string module_path = 7; */ @@ -334,21 +334,21 @@ export declare const ExtensionSourceSchema: GenMessage; */ export declare type Extensions = Message<"stackpanel.db.Extensions"> & { /** - * Enable extensions system + * Enable extensions system (example: true) * * @generated from field: bool enabled = 1; */ enabled: boolean; /** - * Automatically check for extension updates + * Automatically check for extension updates (example: false) * * @generated from field: bool auto_update = 2; */ autoUpdate: boolean; /** - * Default extension registry URL + * Default extension registry URL (example: "https://registry.stackpanel.dev") * * @generated from field: optional string registry = 3; */ @@ -375,7 +375,7 @@ export declare const ExtensionsSchema: GenMessage; */ export declare type PanelField = Message<"stackpanel.db.PanelField"> & { /** - * Field name (maps to component prop) + * Field name (maps to component prop) (example: "stage") * * @generated from field: string name = 1; */ @@ -389,14 +389,14 @@ export declare type PanelField = Message<"stackpanel.db.PanelField"> & { type: FieldType; /** - * Field value (JSON-encoded for complex types) + * Field value (JSON-encoded for complex types) (example: "production") * * @generated from field: string value = 3; */ value: string; /** - * Options for select fields + * Options for select fields (example: "production") * * @generated from field: repeated string options = 4; */ diff --git a/packages/proto/gen/ts/files.ts b/packages/proto/gen/ts/files.ts index 81c02205..62f52288 100644 --- a/packages/proto/gen/ts/files.ts +++ b/packages/proto/gen/ts/files.ts @@ -19,7 +19,7 @@ export interface GeneratedFile { /** * @generated from protobuf field: string path = 1 */ - path: string; // Relative path from project root where file will be written + path: string; // Relative path from project root where file will be written (example: ".stack/gen/ide/vscode/settings.json") /** * @generated from protobuf field: stackpanel.db.FileType type = 2 */ @@ -27,27 +27,27 @@ export interface GeneratedFile { /** * @generated from protobuf field: bool enable = 3 */ - enable: boolean; // Whether this file should be generated + enable: boolean; // Whether this file should be generated (example: true) /** * @generated from protobuf field: optional string mode = 4 */ - mode?: string; // File permissions (e.g., '0755') + mode?: string; // File permissions (e.g., '0755') (example: "0644") /** * @generated from protobuf field: optional string source = 5 */ - source?: string; // Module or component that generated this file + source?: string; // Module or component that generated this file (example: "stackpanel.ide.vscode") /** * @generated from protobuf field: optional string description = 6 */ - description?: string; // Human-readable description of the file's purpose + description?: string; // Human-readable description of the file's purpose (example: "VS Code workspace settings generated by the IDE module") /** * @generated from protobuf field: optional string store_path = 7 */ - store_path?: string; // Nix store path containing the file content (for derivation type) + store_path?: string; // Nix store path containing the file content (for derivation type) (example: "/nix/store/abc123-vscode-settings/settings.json") /** * @generated from protobuf field: optional string text = 8 */ - text?: string; // Inline text content (for text type, may be truncated for large files) + text?: string; // Inline text content (for text type, may be truncated for large files) (example: "{\n \"editor.formatOnSave\": true\n}\n") } /** * Collection of all generated file entries @@ -58,7 +58,7 @@ export interface GeneratedFiles { /** * @generated from protobuf field: bool enable = 1 */ - enable: boolean; // Whether file generation is enabled globally + enable: boolean; // Whether file generation is enabled globally (example: true) /** * @generated from protobuf field: map entries = 2 */ diff --git a/packages/proto/gen/ts/files_pb.d.ts b/packages/proto/gen/ts/files_pb.d.ts index 4b3c62c6..3d5bd915 100644 --- a/packages/proto/gen/ts/files_pb.d.ts +++ b/packages/proto/gen/ts/files_pb.d.ts @@ -17,7 +17,7 @@ export declare const file_files: GenFile; */ export declare type GeneratedFile = Message<"stackpanel.db.GeneratedFile"> & { /** - * Relative path from project root where file will be written + * Relative path from project root where file will be written (example: ".stack/gen/ide/vscode/settings.json") * * @generated from field: string path = 1; */ @@ -31,42 +31,42 @@ export declare type GeneratedFile = Message<"stackpanel.db.GeneratedFile"> & { type: FileType; /** - * Whether this file should be generated + * Whether this file should be generated (example: true) * * @generated from field: bool enable = 3; */ enable: boolean; /** - * File permissions (e.g., '0755') + * File permissions (e.g., '0755') (example: "0644") * * @generated from field: optional string mode = 4; */ mode?: string; /** - * Module or component that generated this file + * Module or component that generated this file (example: "stackpanel.ide.vscode") * * @generated from field: optional string source = 5; */ source?: string; /** - * Human-readable description of the file's purpose + * Human-readable description of the file's purpose (example: "VS Code workspace settings generated by the IDE module") * * @generated from field: optional string description = 6; */ description?: string; /** - * Nix store path containing the file content (for derivation type) + * Nix store path containing the file content (for derivation type) (example: "/nix/store/abc123-vscode-settings/settings.json") * * @generated from field: optional string store_path = 7; */ storePath?: string; /** - * Inline text content (for text type, may be truncated for large files) + * Inline text content (for text type, may be truncated for large files) (example: "{\n \"editor.formatOnSave\": true\n}\n") * * @generated from field: optional string text = 8; */ @@ -86,7 +86,7 @@ export declare const GeneratedFileSchema: GenMessage; */ export declare type GeneratedFiles = Message<"stackpanel.db.GeneratedFiles"> & { /** - * Whether file generation is enabled globally + * Whether file generation is enabled globally (example: true) * * @generated from field: bool enable = 1; */ diff --git a/packages/proto/gen/ts/go_app.ts b/packages/proto/gen/ts/go_app.ts index 0fcb787d..5905a0df 100644 --- a/packages/proto/gen/ts/go_app.ts +++ b/packages/proto/gen/ts/go_app.ts @@ -23,7 +23,7 @@ export interface GoAppConfig { /** * @generated from protobuf field: string main_package = 2 */ - main_package: string; // Go main package path + main_package: string; // Go main package path (example: "./cmd/server") /** * @generated from protobuf field: string version = 3 */ @@ -35,7 +35,7 @@ export interface GoAppConfig { /** * @generated from protobuf field: repeated string ldflags = 5 */ - ldflags: string[]; // Go linker flags + ldflags: string[]; // Go linker flags (example: ["-X main.version=1.0.0"]) /** * @generated from protobuf field: repeated string watch_dirs = 6 */ @@ -43,11 +43,11 @@ export interface GoAppConfig { /** * @generated from protobuf field: repeated string dev_args = 7 */ - dev_args: string[]; // Arguments to pass to binary during development + dev_args: string[]; // Arguments to pass to binary during development (example: ["serve", "--port=3000"]) /** * @generated from protobuf field: repeated string tools = 8 */ - tools: string[]; // Additional Go tool dependencies + tools: string[]; // Additional Go tool dependencies (example: ["github.com/golangci/golangci-lint/cmd/golangci-lint"]) /** * @generated from protobuf field: bool generate_files = 9 */ diff --git a/packages/proto/gen/ts/go_app_pb.d.ts b/packages/proto/gen/ts/go_app_pb.d.ts index ace89ec0..d1d87300 100644 --- a/packages/proto/gen/ts/go_app_pb.d.ts +++ b/packages/proto/gen/ts/go_app_pb.d.ts @@ -24,7 +24,7 @@ export declare type GoAppConfig = Message<"stackpanel.modules.GoAppConfig"> & { enable: boolean; /** - * Go main package path + * Go main package path (example: "./cmd/server") * * @generated from field: string main_package = 2; */ @@ -45,7 +45,7 @@ export declare type GoAppConfig = Message<"stackpanel.modules.GoAppConfig"> & { binaryName?: string; /** - * Go linker flags + * Go linker flags (example: ["-X main.version=1.0.0"]) * * @generated from field: repeated string ldflags = 5; */ @@ -59,14 +59,14 @@ export declare type GoAppConfig = Message<"stackpanel.modules.GoAppConfig"> & { watchDirs: string[]; /** - * Arguments to pass to binary during development + * Arguments to pass to binary during development (example: ["serve", "--port=3000"]) * * @generated from field: repeated string dev_args = 7; */ devArgs: string[]; /** - * Additional Go tool dependencies + * Additional Go tool dependencies (example: ["github.com/golangci/golangci-lint/cmd/golangci-lint"]) * * @generated from field: repeated string tools = 8; */ diff --git a/packages/proto/gen/ts/google/protobuf/descriptor.ts b/packages/proto/gen/ts/google/protobuf/descriptor.ts index f0683d07..3fbfcf10 100644 --- a/packages/proto/gen/ts/google/protobuf/descriptor.ts +++ b/packages/proto/gen/ts/google/protobuf/descriptor.ts @@ -1149,11 +1149,9 @@ export interface FieldOptions { */ deprecated?: boolean; /** - * DEPRECATED. DO NOT USE! * For Google-internal migration only. Do not use. * - * @deprecated - * @generated from protobuf field: optional bool weak = 10 [default = false, deprecated = true] + * @generated from protobuf field: optional bool weak = 10 [default = false] */ weak?: boolean; /** @@ -2181,12 +2179,6 @@ export enum Edition { * @generated from protobuf enum value: EDITION_2024 = 1001; */ EDITION_2024 = 1001, - /** - * A placeholder edition for developing and testing unscheduled features. - * - * @generated from protobuf enum value: EDITION_UNSTABLE = 9999; - */ - EDITION_UNSTABLE = 9999, /** * Placeholder editions for testing feature resolution. These should not be * used or relied on outside of tests. @@ -3658,7 +3650,7 @@ class FieldOptions$Type extends MessageType { case /* optional bool deprecated = 3 [default = false] */ 3: message.deprecated = reader.bool(); break; - case /* optional bool weak = 10 [default = false, deprecated = true] */ 10: + case /* optional bool weak = 10 [default = false] */ 10: message.weak = reader.bool(); break; case /* optional bool debug_redact = 16 [default = false] */ 16: @@ -3713,7 +3705,7 @@ class FieldOptions$Type extends MessageType { /* optional google.protobuf.FieldOptions.JSType jstype = 6 [default = JS_NORMAL]; */ if (message.jstype !== undefined) writer.tag(6, WireType.Varint).int32(message.jstype); - /* optional bool weak = 10 [default = false, deprecated = true]; */ + /* optional bool weak = 10 [default = false]; */ if (message.weak !== undefined) writer.tag(10, WireType.Varint).bool(message.weak); /* optional bool unverified_lazy = 15 [default = false]; */ diff --git a/packages/proto/gen/ts/healthchecks.ts b/packages/proto/gen/ts/healthchecks.ts index 707f0917..8ded7b60 100644 --- a/packages/proto/gen/ts/healthchecks.ts +++ b/packages/proto/gen/ts/healthchecks.ts @@ -29,15 +29,15 @@ export interface HealthSummary { /** * @generated from protobuf field: int32 total_healthy = 3 */ - total_healthy: number; // Total healthy checks across all modules + total_healthy: number; // Total healthy checks across all modules (example: 12) /** * @generated from protobuf field: int32 total_checks = 4 */ - total_checks: number; // Total checks across all modules + total_checks: number; // Total checks across all modules (example: 14) /** * @generated from protobuf field: string last_updated = 5 */ - last_updated: string; // When summary was last computed (RFC3339) + last_updated: string; // When summary was last computed (RFC3339) (example: "2026-04-30T18:21:04Z") } /** * A healthcheck definition that can verify module functionality @@ -48,15 +48,15 @@ export interface Healthcheck { /** * @generated from protobuf field: string id = 1 */ - id: string; // Unique identifier for the healthcheck + id: string; // Unique identifier for the healthcheck (example: "postgres-port") /** * @generated from protobuf field: string name = 2 */ - name: string; // Display name for the healthcheck + name: string; // Display name for the healthcheck (example: "PostgreSQL listening") /** * @generated from protobuf field: optional string description = 3 */ - description?: string; // Description of what this check verifies + description?: string; // Description of what this check verifies (example: "Verifies the PostgreSQL service is accepting connections on its assigned port") /** * @generated from protobuf field: stackpanel.db.HealthcheckType type = 4 */ @@ -68,51 +68,51 @@ export interface Healthcheck { /** * @generated from protobuf field: optional string script_bin_path = 6 */ - script_bin_path?: string; // Path to script executable in Nix store + script_bin_path?: string; // Path to script executable in Nix store (example: "/nix/store/abc123-pg-check/bin/pg-check") /** * @generated from protobuf field: optional string script_source = 7 */ - script_source?: string; // Source type: inline, path, scriptRef, package + script_source?: string; // Source type: inline, path, scriptRef, package (example: "scriptRef") /** * @generated from protobuf field: optional string nix_expr = 8 */ - nix_expr?: string; // Nix expression to evaluate (for NIX type) + nix_expr?: string; // Nix expression to evaluate (for NIX type) (example: "config.services.postgres.enable") /** * @generated from protobuf field: optional string http_url = 9 */ - http_url?: string; // URL to check (for HTTP type) + http_url?: string; // URL to check (for HTTP type) (example: "http://localhost:6402/health") /** * @generated from protobuf field: optional string http_method = 10 */ - http_method?: string; // HTTP method (GET, POST, etc.) + http_method?: string; // HTTP method (GET, POST, etc.) (example: "GET") /** * @generated from protobuf field: optional int32 http_expected_status = 11 */ - http_expected_status?: number; // Expected HTTP status code + http_expected_status?: number; // Expected HTTP status code (example: 200) /** * @generated from protobuf field: optional string tcp_host = 12 */ - tcp_host?: string; // Host to connect to (for TCP type) + tcp_host?: string; // Host to connect to (for TCP type) (example: "localhost") /** * @generated from protobuf field: optional int32 tcp_port = 13 */ - tcp_port?: number; // Port to connect to (for TCP type) + tcp_port?: number; // Port to connect to (for TCP type) (example: 6410) /** * @generated from protobuf field: int32 timeout_seconds = 14 */ - timeout_seconds: number; // Timeout for the check in seconds + timeout_seconds: number; // Timeout for the check in seconds (example: 5) /** * @generated from protobuf field: optional int32 interval_seconds = 15 */ - interval_seconds?: number; // How often to run this check (optional) + interval_seconds?: number; // How often to run this check (optional) (example: 30) /** * @generated from protobuf field: string module = 16 */ - module: string; // Module that registered this healthcheck + module: string; // Module that registered this healthcheck (example: "postgres") /** * @generated from protobuf field: repeated string tags = 17 */ - tags: string[]; // Tags for filtering/grouping checks + tags: string[]; // Tags for filtering/grouping checks (example: "service") } /** * The result of executing a healthcheck @@ -123,7 +123,7 @@ export interface HealthcheckResult { /** * @generated from protobuf field: string check_id = 1 */ - check_id: string; // ID of the healthcheck that was run + check_id: string; // ID of the healthcheck that was run (example: "postgres-port") /** * @generated from protobuf field: stackpanel.db.HealthStatus status = 2 */ @@ -131,23 +131,23 @@ export interface HealthcheckResult { /** * @generated from protobuf field: optional string message = 3 */ - message?: string; // Human-readable result message + message?: string; // Human-readable result message (example: "PostgreSQL responded in 12ms") /** * @generated from protobuf field: optional string error = 4 */ - error?: string; // Error message if check failed to execute + error?: string; // Error message if check failed to execute (example: "connection refused") /** * @generated from protobuf field: optional string output = 5 */ - output?: string; // Raw output from script/command + output?: string; // Raw output from script/command (example: "psql: connected to localhost:6410") /** * @generated from protobuf field: int64 duration_ms = 6 */ - duration_ms: string; // How long the check took to run in milliseconds + duration_ms: string; // How long the check took to run in milliseconds (example: 12) /** * @generated from protobuf field: string timestamp = 7 */ - timestamp: string; // When the check was run (RFC3339) + timestamp: string; // When the check was run (RFC3339) (example: "2026-04-30T18:21:04Z") } /** * Aggregated health status for a module @@ -158,7 +158,7 @@ export interface ModuleHealth { /** * @generated from protobuf field: string module = 1 */ - module: string; // Module name + module: string; // Module name (example: "postgres") /** * @generated from protobuf field: stackpanel.db.HealthStatus status = 2 */ @@ -170,15 +170,15 @@ export interface ModuleHealth { /** * @generated from protobuf field: int32 healthy_count = 4 */ - healthy_count: number; // Number of passing checks + healthy_count: number; // Number of passing checks (example: 3) /** * @generated from protobuf field: int32 total_count = 5 */ - total_count: number; // Total number of checks + total_count: number; // Total number of checks (example: 3) /** * @generated from protobuf field: string last_updated = 6 */ - last_updated: string; // When health was last evaluated (RFC3339) + last_updated: string; // When health was last evaluated (RFC3339) (example: "2026-04-30T18:21:04Z") } /** * The current health status of a module or check diff --git a/packages/proto/gen/ts/healthchecks_pb.d.ts b/packages/proto/gen/ts/healthchecks_pb.d.ts index 25fb5bc4..9e1cdc74 100644 --- a/packages/proto/gen/ts/healthchecks_pb.d.ts +++ b/packages/proto/gen/ts/healthchecks_pb.d.ts @@ -31,21 +31,21 @@ export declare type HealthSummary = Message<"stackpanel.db.HealthSummary"> & { modules: { [key: string]: ModuleHealth }; /** - * Total healthy checks across all modules + * Total healthy checks across all modules (example: 12) * * @generated from field: int32 total_healthy = 3; */ totalHealthy: number; /** - * Total checks across all modules + * Total checks across all modules (example: 14) * * @generated from field: int32 total_checks = 4; */ totalChecks: number; /** - * When summary was last computed (RFC3339) + * When summary was last computed (RFC3339) (example: "2026-04-30T18:21:04Z") * * @generated from field: string last_updated = 5; */ @@ -65,21 +65,21 @@ export declare const HealthSummarySchema: GenMessage; */ export declare type Healthcheck = Message<"stackpanel.db.Healthcheck"> & { /** - * Unique identifier for the healthcheck + * Unique identifier for the healthcheck (example: "postgres-port") * * @generated from field: string id = 1; */ id: string; /** - * Display name for the healthcheck + * Display name for the healthcheck (example: "PostgreSQL listening") * * @generated from field: string name = 2; */ name: string; /** - * Description of what this check verifies + * Description of what this check verifies (example: "Verifies the PostgreSQL service is accepting connections on its assigned port") * * @generated from field: optional string description = 3; */ @@ -100,84 +100,84 @@ export declare type Healthcheck = Message<"stackpanel.db.Healthcheck"> & { severity: HealthcheckSeverity; /** - * Path to script executable in Nix store + * Path to script executable in Nix store (example: "/nix/store/abc123-pg-check/bin/pg-check") * * @generated from field: optional string script_bin_path = 6; */ scriptBinPath?: string; /** - * Source type: inline, path, scriptRef, package + * Source type: inline, path, scriptRef, package (example: "scriptRef") * * @generated from field: optional string script_source = 7; */ scriptSource?: string; /** - * Nix expression to evaluate (for NIX type) + * Nix expression to evaluate (for NIX type) (example: "config.services.postgres.enable") * * @generated from field: optional string nix_expr = 8; */ nixExpr?: string; /** - * URL to check (for HTTP type) + * URL to check (for HTTP type) (example: "http://localhost:6402/health") * * @generated from field: optional string http_url = 9; */ httpUrl?: string; /** - * HTTP method (GET, POST, etc.) + * HTTP method (GET, POST, etc.) (example: "GET") * * @generated from field: optional string http_method = 10; */ httpMethod?: string; /** - * Expected HTTP status code + * Expected HTTP status code (example: 200) * * @generated from field: optional int32 http_expected_status = 11; */ httpExpectedStatus?: number; /** - * Host to connect to (for TCP type) + * Host to connect to (for TCP type) (example: "localhost") * * @generated from field: optional string tcp_host = 12; */ tcpHost?: string; /** - * Port to connect to (for TCP type) + * Port to connect to (for TCP type) (example: 6410) * * @generated from field: optional int32 tcp_port = 13; */ tcpPort?: number; /** - * Timeout for the check in seconds + * Timeout for the check in seconds (example: 5) * * @generated from field: int32 timeout_seconds = 14; */ timeoutSeconds: number; /** - * How often to run this check (optional) + * How often to run this check (optional) (example: 30) * * @generated from field: optional int32 interval_seconds = 15; */ intervalSeconds?: number; /** - * Module that registered this healthcheck + * Module that registered this healthcheck (example: "postgres") * * @generated from field: string module = 16; */ module: string; /** - * Tags for filtering/grouping checks + * Tags for filtering/grouping checks (example: "service") * * @generated from field: repeated string tags = 17; */ @@ -197,7 +197,7 @@ export declare const HealthcheckSchema: GenMessage; */ export declare type HealthcheckResult = Message<"stackpanel.db.HealthcheckResult"> & { /** - * ID of the healthcheck that was run + * ID of the healthcheck that was run (example: "postgres-port") * * @generated from field: string check_id = 1; */ @@ -211,35 +211,35 @@ export declare type HealthcheckResult = Message<"stackpanel.db.HealthcheckResult status: HealthStatus; /** - * Human-readable result message + * Human-readable result message (example: "PostgreSQL responded in 12ms") * * @generated from field: optional string message = 3; */ message?: string; /** - * Error message if check failed to execute + * Error message if check failed to execute (example: "connection refused") * * @generated from field: optional string error = 4; */ error?: string; /** - * Raw output from script/command + * Raw output from script/command (example: "psql: connected to localhost:6410") * * @generated from field: optional string output = 5; */ output?: string; /** - * How long the check took to run in milliseconds + * How long the check took to run in milliseconds (example: 12) * * @generated from field: int64 duration_ms = 6; */ durationMs: bigint; /** - * When the check was run (RFC3339) + * When the check was run (RFC3339) (example: "2026-04-30T18:21:04Z") * * @generated from field: string timestamp = 7; */ @@ -259,7 +259,7 @@ export declare const HealthcheckResultSchema: GenMessage; */ export declare type ModuleHealth = Message<"stackpanel.db.ModuleHealth"> & { /** - * Module name + * Module name (example: "postgres") * * @generated from field: string module = 1; */ @@ -280,21 +280,21 @@ export declare type ModuleHealth = Message<"stackpanel.db.ModuleHealth"> & { checks: HealthcheckResult[]; /** - * Number of passing checks + * Number of passing checks (example: 3) * * @generated from field: int32 healthy_count = 4; */ healthyCount: number; /** - * Total number of checks + * Total number of checks (example: 3) * * @generated from field: int32 total_count = 5; */ totalCount: number; /** - * When health was last evaluated (RFC3339) + * When health was last evaluated (RFC3339) (example: "2026-04-30T18:21:04Z") * * @generated from field: string last_updated = 6; */ diff --git a/packages/proto/gen/ts/modules.ts b/packages/proto/gen/ts/modules.ts index 3093a81f..ebdc9563 100644 --- a/packages/proto/gen/ts/modules.ts +++ b/packages/proto/gen/ts/modules.ts @@ -19,7 +19,7 @@ export interface DisableModuleRequest { /** * @generated from protobuf field: string module_id = 1 */ - module_id: string; // Module identifier to disable + module_id: string; // Module identifier to disable (example: "postgres") } /** * Request to enable a module @@ -30,7 +30,7 @@ export interface EnableModuleRequest { /** * @generated from protobuf field: string module_id = 1 */ - module_id: string; // Module identifier to enable + module_id: string; // Module identifier to enable (example: "postgres") /** * @generated from protobuf field: map settings = 2 */ @@ -47,7 +47,7 @@ export interface GetModuleOutputsRequest { /** * @generated from protobuf field: string module_id = 1 */ - module_id: string; // Module identifier + module_id: string; // Module identifier (example: "postgres") } /** * Configuration for a stackpanel module @@ -58,11 +58,11 @@ export interface Module { /** * @generated from protobuf field: string id = 1 */ - id: string; // Module identifier (e.g., 'oxlint', 'postgres') + id: string; // Module identifier (e.g., 'oxlint', 'postgres') (example: "postgres") /** * @generated from protobuf field: bool enable = 2 */ - enable: boolean; // Whether the module is enabled + enable: boolean; // Whether the module is enabled (example: true) /** * @generated from protobuf field: stackpanel.db.ModuleMeta meta = 3 */ @@ -78,24 +78,24 @@ export interface Module { /** * @generated from protobuf field: repeated string requires = 6 */ - requires: string[]; // Required modules + requires: string[]; // Required modules (example: "process-compose") /** * @generated from protobuf field: repeated string conflicts = 7 */ - conflicts: string[]; // Conflicting modules + conflicts: string[]; // Conflicting modules (example: "mysql") /** * @generated from protobuf field: int32 priority = 8 */ - priority: number; // Load order priority (lower = earlier) + priority: number; // Load order priority (lower = earlier) (example: 50) /** * @generated from protobuf field: repeated string tags = 9 */ - tags: string[]; // Tags for filtering + tags: string[]; // Tags for filtering (example: "database") /** * * JSON Schema for generating configuration forms. * Describes the module's configurable options. - * + * (example: "{ \"type\": \"object\", \"properties\": { \"version\": { \"type\": \"string\" } } }") * * @generated from protobuf field: optional string config_schema = 10 */ @@ -124,7 +124,7 @@ export interface Module { /** * @generated from protobuf field: optional string healthcheck_module = 14 */ - healthcheck_module?: string; // Linked healthcheck module name + healthcheck_module?: string; // Linked healthcheck module name (example: "postgres") } /** * Module data for a specific app @@ -135,7 +135,7 @@ export interface ModuleAppData { /** * @generated from protobuf field: bool enabled = 1 */ - enabled: boolean; // Whether module is enabled for this app + enabled: boolean; // Whether module is enabled for this app (example: true) /** * @generated from protobuf field: map config = 2 */ @@ -152,35 +152,35 @@ export interface ModuleFeatures { /** * @generated from protobuf field: bool files = 1 */ - files: boolean; // Generates files via stackpanel.files + files: boolean; // Generates files via stackpanel.files (example: true) /** * @generated from protobuf field: bool scripts = 2 */ - scripts: boolean; // Provides shell scripts/commands + scripts: boolean; // Provides shell scripts/commands (example: true) /** * @generated from protobuf field: bool tasks = 3 */ - tasks: boolean; // Defines turborepo tasks + tasks: boolean; // Defines turborepo tasks (example: false) /** * @generated from protobuf field: bool healthchecks = 4 */ - healthchecks: boolean; // Defines health checks + healthchecks: boolean; // Defines health checks (example: true) /** * @generated from protobuf field: bool services = 5 */ - services: boolean; // Configures background services + services: boolean; // Configures background services (example: true) /** * @generated from protobuf field: bool secrets = 6 */ - secrets: boolean; // Manages secrets/variables + secrets: boolean; // Manages secrets/variables (example: false) /** * @generated from protobuf field: bool packages = 7 */ - packages: boolean; // Adds devshell packages + packages: boolean; // Adds devshell packages (example: true) /** * @generated from protobuf field: bool app_module = 8 */ - app_module: boolean; // Extends per-app configuration + app_module: boolean; // Extends per-app configuration (example: false) } /** * Display metadata for a module @@ -191,15 +191,15 @@ export interface ModuleMeta { /** * @generated from protobuf field: string name = 1 */ - name: string; // Display name of the module + name: string; // Display name of the module (example: "PostgreSQL") /** * @generated from protobuf field: optional string description = 2 */ - description?: string; // Human-readable description + description?: string; // Human-readable description (example: "Managed PostgreSQL service for local development") /** * @generated from protobuf field: optional string icon = 3 */ - icon?: string; // Lucide icon name (e.g., 'database', 'box') + icon?: string; // Lucide icon name (e.g., 'database', 'box') (example: "database") /** * @generated from protobuf field: stackpanel.db.ModuleCategory category = 4 */ @@ -207,15 +207,15 @@ export interface ModuleMeta { /** * @generated from protobuf field: optional string author = 5 */ - author?: string; // Author or maintainer + author?: string; // Author or maintainer (example: "Darkmatter") /** * @generated from protobuf field: optional string version = 6 */ - version?: string; // Module version + version?: string; // Module version (example: "1.2.0") /** * @generated from protobuf field: optional string homepage = 7 */ - homepage?: string; // URL to documentation or repository + homepage?: string; // URL to documentation or repository (example: "https://stackpanel.dev/docs/modules/postgres") } /** * A file generated by a module @@ -226,15 +226,15 @@ export interface ModuleOutputFile { /** * @generated from protobuf field: string path = 1 */ - path: string; // File path relative to project root + path: string; // File path relative to project root (example: ".stack/state/postgres.conf") /** * @generated from protobuf field: optional string description = 2 */ - description?: string; // Description of the file + description?: string; // Description of the file (example: "Generated PostgreSQL config") /** * @generated from protobuf field: string type = 3 */ - type: string; // File type: text, derivation, symlink + type: string; // File type: text, derivation, symlink (example: "text") } /** * A healthcheck defined by a module @@ -245,23 +245,23 @@ export interface ModuleOutputHealthcheck { /** * @generated from protobuf field: string id = 1 */ - id: string; // Healthcheck ID + id: string; // Healthcheck ID (example: "postgres-port") /** * @generated from protobuf field: string name = 2 */ - name: string; // Display name + name: string; // Display name (example: "PostgreSQL listening") /** * @generated from protobuf field: optional string description = 3 */ - description?: string; // Description of what it checks + description?: string; // Description of what it checks (example: "TCP probe against the assigned port") /** * @generated from protobuf field: string severity = 4 */ - severity: string; // Severity: critical, warning, info + severity: string; // Severity: critical, warning, info (example: "critical") /** * @generated from protobuf field: string type = 5 */ - type: string; // Check type: script, http, tcp, nix + type: string; // Check type: script, http, tcp, nix (example: "tcp") } /** * A package added by a module @@ -272,15 +272,15 @@ export interface ModuleOutputPackage { /** * @generated from protobuf field: string name = 1 */ - name: string; // Package name + name: string; // Package name (example: "postgresql_16") /** * @generated from protobuf field: optional string version = 2 */ - version?: string; // Package version + version?: string; // Package version (example: "16.4") /** * @generated from protobuf field: optional string description = 3 */ - description?: string; // Package description + description?: string; // Package description (example: "PostgreSQL 16 server and client") } /** * A script provided by a module @@ -291,11 +291,11 @@ export interface ModuleOutputScript { /** * @generated from protobuf field: string name = 1 */ - name: string; // Script name (command) + name: string; // Script name (command) (example: "pg-reset") /** * @generated from protobuf field: optional string description = 2 */ - description?: string; // Description of what the script does + description?: string; // Description of what the script does (example: "Drop and recreate the development database") } /** * Aggregated outputs of what a module creates @@ -306,7 +306,7 @@ export interface ModuleOutputs { /** * @generated from protobuf field: string module_id = 1 */ - module_id: string; // Module identifier + module_id: string; // Module identifier (example: "postgres") /** * @generated from protobuf field: repeated stackpanel.db.ModuleOutputFile files = 2 */ @@ -333,15 +333,15 @@ export interface ModulePanel { /** * @generated from protobuf field: string id = 1 */ - id: string; // Unique panel identifier + id: string; // Unique panel identifier (example: "postgres-status") /** * @generated from protobuf field: string title = 2 */ - title: string; // Display title + title: string; // Display title (example: "Postgres") /** * @generated from protobuf field: optional string description = 3 */ - description?: string; // Panel description + description?: string; // Panel description (example: "Process status, port, and connection string") /** * @generated from protobuf field: stackpanel.db.ModulePanelType type = 4 */ @@ -349,7 +349,7 @@ export interface ModulePanel { /** * @generated from protobuf field: int32 order = 5 */ - order: number; // Display order (lower = first) + order: number; // Display order (lower = first) (example: 20) /** * @generated from protobuf field: repeated stackpanel.db.ModulePanelField fields = 6 */ @@ -364,7 +364,7 @@ export interface ModulePanelField { /** * @generated from protobuf field: string name = 1 */ - name: string; // Field name (maps to component prop) + name: string; // Field name (maps to component prop) (example: "version") /** * @generated from protobuf field: stackpanel.db.ModuleFieldType type = 2 */ @@ -372,11 +372,11 @@ export interface ModulePanelField { /** * @generated from protobuf field: string value = 3 */ - value: string; // Field value (JSON-encoded for complex types) + value: string; // Field value (JSON-encoded for complex types) (example: "16") /** * @generated from protobuf field: repeated string options = 4 */ - options: string[]; // Options for select fields + options: string[]; // Options for select fields (example: "16") } /** * Response containing a single module @@ -391,11 +391,11 @@ export interface ModuleResponse { /** * @generated from protobuf field: bool success = 2 */ - success: boolean; // Whether the operation succeeded + success: boolean; // Whether the operation succeeded (example: true) /** * @generated from protobuf field: optional string message = 3 */ - message?: string; // Status message + message?: string; // Status message (example: "Module enabled") } /** * Where the module comes from @@ -410,19 +410,19 @@ export interface ModuleSource { /** * @generated from protobuf field: optional string flake_input = 2 */ - flake_input?: string; // Flake input name (for flake-input type) + flake_input?: string; // Flake input name (for flake-input type) (example: "stackpanel-postgres") /** * @generated from protobuf field: optional string path = 3 */ - path?: string; // Local path (for local type) + path?: string; // Local path (for local type) (example: "./modules/postgres") /** * @generated from protobuf field: optional string registry_id = 4 */ - registry_id?: string; // Registry ID (e.g., 'stackpanel/docker') + registry_id?: string; // Registry ID (e.g., 'stackpanel/docker') (example: "stackpanel/postgres") /** * @generated from protobuf field: optional string ref = 5 */ - ref?: string; // Git ref (branch, tag, commit) + ref?: string; // Git ref (branch, tag, commit) (example: "main") } /** * Map of module ID to module configuration @@ -446,7 +446,7 @@ export interface UpdateModuleSettingsRequest { /** * @generated from protobuf field: string module_id = 1 */ - module_id: string; // Module identifier + module_id: string; // Module identifier (example: "postgres") /** * @generated from protobuf field: map settings = 2 */ diff --git a/packages/proto/gen/ts/modules_pb.d.ts b/packages/proto/gen/ts/modules_pb.d.ts index a5e2a0b0..b0bb0c44 100644 --- a/packages/proto/gen/ts/modules_pb.d.ts +++ b/packages/proto/gen/ts/modules_pb.d.ts @@ -17,7 +17,7 @@ export declare const file_modules: GenFile; */ export declare type DisableModuleRequest = Message<"stackpanel.db.DisableModuleRequest"> & { /** - * Module identifier to disable + * Module identifier to disable (example: "postgres") * * @generated from field: string module_id = 1; */ @@ -37,7 +37,7 @@ export declare const DisableModuleRequestSchema: GenMessage & { /** - * Module identifier to enable + * Module identifier to enable (example: "postgres") * * @generated from field: string module_id = 1; */ @@ -64,7 +64,7 @@ export declare const EnableModuleRequestSchema: GenMessage; */ export declare type GetModuleOutputsRequest = Message<"stackpanel.db.GetModuleOutputsRequest"> & { /** - * Module identifier + * Module identifier (example: "postgres") * * @generated from field: string module_id = 1; */ @@ -84,14 +84,14 @@ export declare const GetModuleOutputsRequestSchema: GenMessage & { /** - * Module identifier (e.g., 'oxlint', 'postgres') + * Module identifier (e.g., 'oxlint', 'postgres') (example: "postgres") * * @generated from field: string id = 1; */ id: string; /** - * Whether the module is enabled + * Whether the module is enabled (example: true) * * @generated from field: bool enable = 2; */ @@ -119,28 +119,28 @@ export declare type Module = Message<"stackpanel.db.Module"> & { features?: ModuleFeatures; /** - * Required modules + * Required modules (example: "process-compose") * * @generated from field: repeated string requires = 6; */ requires: string[]; /** - * Conflicting modules + * Conflicting modules (example: "mysql") * * @generated from field: repeated string conflicts = 7; */ conflicts: string[]; /** - * Load order priority (lower = earlier) + * Load order priority (lower = earlier) (example: 50) * * @generated from field: int32 priority = 8; */ priority: number; /** - * Tags for filtering + * Tags for filtering (example: "database") * * @generated from field: repeated string tags = 9; */ @@ -150,7 +150,7 @@ export declare type Module = Message<"stackpanel.db.Module"> & { * * JSON Schema for generating configuration forms. * Describes the module's configurable options. - * + * (example: "{ \"type\": \"object\", \"properties\": { \"version\": { \"type\": \"string\" } } }") * * @generated from field: optional string config_schema = 10; */ @@ -181,7 +181,7 @@ export declare type Module = Message<"stackpanel.db.Module"> & { apps: { [key: string]: ModuleAppData }; /** - * Linked healthcheck module name + * Linked healthcheck module name (example: "postgres") * * @generated from field: optional string healthcheck_module = 14; */ @@ -201,7 +201,7 @@ export declare const ModuleSchema: GenMessage; */ export declare type ModuleAppData = Message<"stackpanel.db.ModuleAppData"> & { /** - * Whether module is enabled for this app + * Whether module is enabled for this app (example: true) * * @generated from field: bool enabled = 1; */ @@ -228,56 +228,56 @@ export declare const ModuleAppDataSchema: GenMessage; */ export declare type ModuleFeatures = Message<"stackpanel.db.ModuleFeatures"> & { /** - * Generates files via stackpanel.files + * Generates files via stackpanel.files (example: true) * * @generated from field: bool files = 1; */ files: boolean; /** - * Provides shell scripts/commands + * Provides shell scripts/commands (example: true) * * @generated from field: bool scripts = 2; */ scripts: boolean; /** - * Defines turborepo tasks + * Defines turborepo tasks (example: false) * * @generated from field: bool tasks = 3; */ tasks: boolean; /** - * Defines health checks + * Defines health checks (example: true) * * @generated from field: bool healthchecks = 4; */ healthchecks: boolean; /** - * Configures background services + * Configures background services (example: true) * * @generated from field: bool services = 5; */ services: boolean; /** - * Manages secrets/variables + * Manages secrets/variables (example: false) * * @generated from field: bool secrets = 6; */ secrets: boolean; /** - * Adds devshell packages + * Adds devshell packages (example: true) * * @generated from field: bool packages = 7; */ packages: boolean; /** - * Extends per-app configuration + * Extends per-app configuration (example: false) * * @generated from field: bool app_module = 8; */ @@ -297,21 +297,21 @@ export declare const ModuleFeaturesSchema: GenMessage; */ export declare type ModuleMeta = Message<"stackpanel.db.ModuleMeta"> & { /** - * Display name of the module + * Display name of the module (example: "PostgreSQL") * * @generated from field: string name = 1; */ name: string; /** - * Human-readable description + * Human-readable description (example: "Managed PostgreSQL service for local development") * * @generated from field: optional string description = 2; */ description?: string; /** - * Lucide icon name (e.g., 'database', 'box') + * Lucide icon name (e.g., 'database', 'box') (example: "database") * * @generated from field: optional string icon = 3; */ @@ -325,21 +325,21 @@ export declare type ModuleMeta = Message<"stackpanel.db.ModuleMeta"> & { category: ModuleCategory; /** - * Author or maintainer + * Author or maintainer (example: "Darkmatter") * * @generated from field: optional string author = 5; */ author?: string; /** - * Module version + * Module version (example: "1.2.0") * * @generated from field: optional string version = 6; */ version?: string; /** - * URL to documentation or repository + * URL to documentation or repository (example: "https://stackpanel.dev/docs/modules/postgres") * * @generated from field: optional string homepage = 7; */ @@ -359,21 +359,21 @@ export declare const ModuleMetaSchema: GenMessage; */ export declare type ModuleOutputFile = Message<"stackpanel.db.ModuleOutputFile"> & { /** - * File path relative to project root + * File path relative to project root (example: ".stack/state/postgres.conf") * * @generated from field: string path = 1; */ path: string; /** - * Description of the file + * Description of the file (example: "Generated PostgreSQL config") * * @generated from field: optional string description = 2; */ description?: string; /** - * File type: text, derivation, symlink + * File type: text, derivation, symlink (example: "text") * * @generated from field: string type = 3; */ @@ -393,35 +393,35 @@ export declare const ModuleOutputFileSchema: GenMessage; */ export declare type ModuleOutputHealthcheck = Message<"stackpanel.db.ModuleOutputHealthcheck"> & { /** - * Healthcheck ID + * Healthcheck ID (example: "postgres-port") * * @generated from field: string id = 1; */ id: string; /** - * Display name + * Display name (example: "PostgreSQL listening") * * @generated from field: string name = 2; */ name: string; /** - * Description of what it checks + * Description of what it checks (example: "TCP probe against the assigned port") * * @generated from field: optional string description = 3; */ description?: string; /** - * Severity: critical, warning, info + * Severity: critical, warning, info (example: "critical") * * @generated from field: string severity = 4; */ severity: string; /** - * Check type: script, http, tcp, nix + * Check type: script, http, tcp, nix (example: "tcp") * * @generated from field: string type = 5; */ @@ -441,21 +441,21 @@ export declare const ModuleOutputHealthcheckSchema: GenMessage & { /** - * Package name + * Package name (example: "postgresql_16") * * @generated from field: string name = 1; */ name: string; /** - * Package version + * Package version (example: "16.4") * * @generated from field: optional string version = 2; */ version?: string; /** - * Package description + * Package description (example: "PostgreSQL 16 server and client") * * @generated from field: optional string description = 3; */ @@ -475,14 +475,14 @@ export declare const ModuleOutputPackageSchema: GenMessage; */ export declare type ModuleOutputScript = Message<"stackpanel.db.ModuleOutputScript"> & { /** - * Script name (command) + * Script name (command) (example: "pg-reset") * * @generated from field: string name = 1; */ name: string; /** - * Description of what the script does + * Description of what the script does (example: "Drop and recreate the development database") * * @generated from field: optional string description = 2; */ @@ -502,7 +502,7 @@ export declare const ModuleOutputScriptSchema: GenMessage; */ export declare type ModuleOutputs = Message<"stackpanel.db.ModuleOutputs"> & { /** - * Module identifier + * Module identifier (example: "postgres") * * @generated from field: string module_id = 1; */ @@ -550,21 +550,21 @@ export declare const ModuleOutputsSchema: GenMessage; */ export declare type ModulePanel = Message<"stackpanel.db.ModulePanel"> & { /** - * Unique panel identifier + * Unique panel identifier (example: "postgres-status") * * @generated from field: string id = 1; */ id: string; /** - * Display title + * Display title (example: "Postgres") * * @generated from field: string title = 2; */ title: string; /** - * Panel description + * Panel description (example: "Process status, port, and connection string") * * @generated from field: optional string description = 3; */ @@ -578,7 +578,7 @@ export declare type ModulePanel = Message<"stackpanel.db.ModulePanel"> & { type: ModulePanelType; /** - * Display order (lower = first) + * Display order (lower = first) (example: 20) * * @generated from field: int32 order = 5; */ @@ -605,7 +605,7 @@ export declare const ModulePanelSchema: GenMessage; */ export declare type ModulePanelField = Message<"stackpanel.db.ModulePanelField"> & { /** - * Field name (maps to component prop) + * Field name (maps to component prop) (example: "version") * * @generated from field: string name = 1; */ @@ -619,14 +619,14 @@ export declare type ModulePanelField = Message<"stackpanel.db.ModulePanelField"> type: ModuleFieldType; /** - * Field value (JSON-encoded for complex types) + * Field value (JSON-encoded for complex types) (example: "16") * * @generated from field: string value = 3; */ value: string; /** - * Options for select fields + * Options for select fields (example: "16") * * @generated from field: repeated string options = 4; */ @@ -653,14 +653,14 @@ export declare type ModuleResponse = Message<"stackpanel.db.ModuleResponse"> & { module?: Module; /** - * Whether the operation succeeded + * Whether the operation succeeded (example: true) * * @generated from field: bool success = 2; */ success: boolean; /** - * Status message + * Status message (example: "Module enabled") * * @generated from field: optional string message = 3; */ @@ -687,28 +687,28 @@ export declare type ModuleSource = Message<"stackpanel.db.ModuleSource"> & { type: ModuleSourceType; /** - * Flake input name (for flake-input type) + * Flake input name (for flake-input type) (example: "stackpanel-postgres") * * @generated from field: optional string flake_input = 2; */ flakeInput?: string; /** - * Local path (for local type) + * Local path (for local type) (example: "./modules/postgres") * * @generated from field: optional string path = 3; */ path?: string; /** - * Registry ID (e.g., 'stackpanel/docker') + * Registry ID (e.g., 'stackpanel/docker') (example: "stackpanel/postgres") * * @generated from field: optional string registry_id = 4; */ registryId?: string; /** - * Git ref (branch, tag, commit) + * Git ref (branch, tag, commit) (example: "main") * * @generated from field: optional string ref = 5; */ @@ -748,7 +748,7 @@ export declare const ModulesSchema: GenMessage; */ export declare type UpdateModuleSettingsRequest = Message<"stackpanel.db.UpdateModuleSettingsRequest"> & { /** - * Module identifier + * Module identifier (example: "postgres") * * @generated from field: string module_id = 1; */ diff --git a/packages/proto/gen/ts/onboarding.ts b/packages/proto/gen/ts/onboarding.ts index 9ce5b616..86e36998 100644 --- a/packages/proto/gen/ts/onboarding.ts +++ b/packages/proto/gen/ts/onboarding.ts @@ -19,19 +19,19 @@ export interface Category { /** * @generated from protobuf field: string title = 1 */ - title: string; // Display title for the category + title: string; // Display title for the category (example: "Local services") /** * @generated from protobuf field: optional string description = 2 */ - description?: string; // Description of what this category covers + description?: string; // Description of what this category covers (example: "Configure databases and background services") /** * @generated from protobuf field: int32 order = 3 */ - order: number; // Order in which this category appears + order: number; // Order in which this category appears (example: 10) /** * @generated from protobuf field: optional string icon = 4 */ - icon?: string; // Icon for the category (emoji or Nerd Font icon) + icon?: string; // Icon for the category (emoji or Nerd Font icon) (example: "database") } /** * Onboarding configuration for new team members @@ -42,15 +42,15 @@ export interface Onboarding { /** * @generated from protobuf field: bool enable = 1 */ - enable: boolean; // Enable onboarding system + enable: boolean; // Enable onboarding system (example: true) /** * @generated from protobuf field: string welcome_message = 2 */ - welcome_message: string; // Welcome message shown to new team members + welcome_message: string; // Welcome message shown to new team members (example: "Welcome to Stackpanel — let's get you set up.") /** * @generated from protobuf field: string completion_message = 3 */ - completion_message: string; // Message shown when onboarding is complete + completion_message: string; // Message shown when onboarding is complete (example: "All set! Run `dev` to start your services.") /** * @generated from protobuf field: map categories = 4 */ @@ -66,15 +66,15 @@ export interface Onboarding { /** * @generated from protobuf field: bool auto_run = 6 */ - auto_run: boolean; // Automatically run onboarding on first shell entry + auto_run: boolean; // Automatically run onboarding on first shell entry (example: true) /** * @generated from protobuf field: bool persist_state = 7 */ - persist_state: boolean; // Persist completed steps across shell sessions + persist_state: boolean; // Persist completed steps across shell sessions (example: true) /** * @generated from protobuf field: string state_file = 8 */ - state_file: string; // Path to store onboarding state + state_file: string; // Path to store onboarding state (example: ".stack/state/onboarding.json") } /** * Onboarding step configuration @@ -85,15 +85,15 @@ export interface Step { /** * @generated from protobuf field: string id = 1 */ - id: string; // Unique identifier for this step + id: string; // Unique identifier for this step (example: "install-deps") /** * @generated from protobuf field: string title = 2 */ - title: string; // Display title for the step + title: string; // Display title for the step (example: "Install dependencies") /** * @generated from protobuf field: optional string description = 3 */ - description?: string; // Detailed description of what this step accomplishes + description?: string; // Detailed description of what this step accomplishes (example: "Run `bun install` from the repo root") /** * @generated from protobuf field: stackpanel.db.StepType type = 4 */ @@ -101,39 +101,39 @@ export interface Step { /** * @generated from protobuf field: optional string command = 5 */ - command?: string; // Command to run (for 'command' type steps) + command?: string; // Command to run (for 'command' type steps) (example: "bun install") /** * @generated from protobuf field: optional string check_command = 6 */ - check_command?: string; // Command to verify step completion (exit 0 = complete) + check_command?: string; // Command to verify step completion (exit 0 = complete) (example: "test -d node_modules") /** * @generated from protobuf field: optional string url = 7 */ - url?: string; // URL to open (for 'link' type steps) + url?: string; // URL to open (for 'link' type steps) (example: "https://stackpanel.dev/docs/getting-started") /** * @generated from protobuf field: bool required = 8 */ - required: boolean; // Whether this step is required + required: boolean; // Whether this step is required (example: true) /** * @generated from protobuf field: int32 order = 9 */ - order: number; // Order in which this step should be presented + order: number; // Order in which this step should be presented (example: 10) /** * @generated from protobuf field: string category = 10 */ - category: string; // Category/group for organizing steps + category: string; // Category/group for organizing steps (example: "setup") /** * @generated from protobuf field: repeated string depends_on = 11 */ - depends_on: string[]; // List of step IDs that must be completed before this step + depends_on: string[]; // List of step IDs that must be completed before this step (example: "install-deps") /** * @generated from protobuf field: repeated string env = 12 */ - env: string[]; // Environments where this step applies + env: string[]; // Environments where this step applies (example: "dev") /** * @generated from protobuf field: optional string skip_if = 13 */ - skip_if?: string; // Condition command - skip step if exits 0 + skip_if?: string; // Condition command - skip step if exits 0 (example: "test -f node_modules/.installed") } /** * Type of onboarding step diff --git a/packages/proto/gen/ts/onboarding_pb.d.ts b/packages/proto/gen/ts/onboarding_pb.d.ts index 5770f06a..28ba6143 100644 --- a/packages/proto/gen/ts/onboarding_pb.d.ts +++ b/packages/proto/gen/ts/onboarding_pb.d.ts @@ -17,28 +17,28 @@ export declare const file_onboarding: GenFile; */ export declare type Category = Message<"stackpanel.db.Category"> & { /** - * Display title for the category + * Display title for the category (example: "Local services") * * @generated from field: string title = 1; */ title: string; /** - * Description of what this category covers + * Description of what this category covers (example: "Configure databases and background services") * * @generated from field: optional string description = 2; */ description?: string; /** - * Order in which this category appears + * Order in which this category appears (example: 10) * * @generated from field: int32 order = 3; */ order: number; /** - * Icon for the category (emoji or Nerd Font icon) + * Icon for the category (emoji or Nerd Font icon) (example: "database") * * @generated from field: optional string icon = 4; */ @@ -58,21 +58,21 @@ export declare const CategorySchema: GenMessage; */ export declare type Onboarding = Message<"stackpanel.db.Onboarding"> & { /** - * Enable onboarding system + * Enable onboarding system (example: true) * * @generated from field: bool enable = 1; */ enable: boolean; /** - * Welcome message shown to new team members + * Welcome message shown to new team members (example: "Welcome to Stackpanel — let's get you set up.") * * @generated from field: string welcome_message = 2; */ welcomeMessage: string; /** - * Message shown when onboarding is complete + * Message shown when onboarding is complete (example: "All set! Run `dev` to start your services.") * * @generated from field: string completion_message = 3; */ @@ -93,21 +93,21 @@ export declare type Onboarding = Message<"stackpanel.db.Onboarding"> & { steps: { [key: string]: Step }; /** - * Automatically run onboarding on first shell entry + * Automatically run onboarding on first shell entry (example: true) * * @generated from field: bool auto_run = 6; */ autoRun: boolean; /** - * Persist completed steps across shell sessions + * Persist completed steps across shell sessions (example: true) * * @generated from field: bool persist_state = 7; */ persistState: boolean; /** - * Path to store onboarding state + * Path to store onboarding state (example: ".stack/state/onboarding.json") * * @generated from field: string state_file = 8; */ @@ -127,21 +127,21 @@ export declare const OnboardingSchema: GenMessage; */ export declare type Step = Message<"stackpanel.db.Step"> & { /** - * Unique identifier for this step + * Unique identifier for this step (example: "install-deps") * * @generated from field: string id = 1; */ id: string; /** - * Display title for the step + * Display title for the step (example: "Install dependencies") * * @generated from field: string title = 2; */ title: string; /** - * Detailed description of what this step accomplishes + * Detailed description of what this step accomplishes (example: "Run `bun install` from the repo root") * * @generated from field: optional string description = 3; */ @@ -155,63 +155,63 @@ export declare type Step = Message<"stackpanel.db.Step"> & { type: StepType; /** - * Command to run (for 'command' type steps) + * Command to run (for 'command' type steps) (example: "bun install") * * @generated from field: optional string command = 5; */ command?: string; /** - * Command to verify step completion (exit 0 = complete) + * Command to verify step completion (exit 0 = complete) (example: "test -d node_modules") * * @generated from field: optional string check_command = 6; */ checkCommand?: string; /** - * URL to open (for 'link' type steps) + * URL to open (for 'link' type steps) (example: "https://stackpanel.dev/docs/getting-started") * * @generated from field: optional string url = 7; */ url?: string; /** - * Whether this step is required + * Whether this step is required (example: true) * * @generated from field: bool required = 8; */ required: boolean; /** - * Order in which this step should be presented + * Order in which this step should be presented (example: 10) * * @generated from field: int32 order = 9; */ order: number; /** - * Category/group for organizing steps + * Category/group for organizing steps (example: "setup") * * @generated from field: string category = 10; */ category: string; /** - * List of step IDs that must be completed before this step + * List of step IDs that must be completed before this step (example: "install-deps") * * @generated from field: repeated string depends_on = 11; */ dependsOn: string[]; /** - * Environments where this step applies + * Environments where this step applies (example: "dev") * * @generated from field: repeated string env = 12; */ env: string[]; /** - * Condition command - skip step if exits 0 + * Condition command - skip step if exits 0 (example: "test -f node_modules/.installed") * * @generated from field: optional string skip_if = 13; */ diff --git a/packages/proto/gen/ts/oxlint_app.ts b/packages/proto/gen/ts/oxlint_app.ts index bb9c2fe8..a5a07362 100644 --- a/packages/proto/gen/ts/oxlint_app.ts +++ b/packages/proto/gen/ts/oxlint_app.ts @@ -23,11 +23,11 @@ export interface OxlintAppConfig { /** * @generated from protobuf field: optional string config_path = 2 */ - config_path?: string; // Path to oxlint config file relative to app root + config_path?: string; // Path to oxlint config file relative to app root (example: "oxlint.json") /** * @generated from protobuf field: repeated string plugins = 3 */ - plugins: string[]; // OxLint plugins to enable + plugins: string[]; // OxLint plugins to enable (example: ["react", "typescript", "import", "jsx-a11y"]) /** * @generated from protobuf field: map categories = 4 */ @@ -39,7 +39,7 @@ export interface OxlintAppConfig { */ rules: { [key: string]: string; - }; // Individual rule overrides. Values: off, warn, error + }; // Individual rule overrides. Values: off, warn, error (example: {"eqeqeq":"error","no-console":"warn","no-debugger":"error"}) /** * @generated from protobuf field: repeated string ignore_patterns = 6 */ diff --git a/packages/proto/gen/ts/oxlint_app_pb.d.ts b/packages/proto/gen/ts/oxlint_app_pb.d.ts index aa41bf7f..e367c03e 100644 --- a/packages/proto/gen/ts/oxlint_app_pb.d.ts +++ b/packages/proto/gen/ts/oxlint_app_pb.d.ts @@ -24,14 +24,14 @@ export declare type OxlintAppConfig = Message<"stackpanel.modules.OxlintAppConfi enable: boolean; /** - * Path to oxlint config file relative to app root + * Path to oxlint config file relative to app root (example: "oxlint.json") * * @generated from field: optional string config_path = 2; */ configPath?: string; /** - * OxLint plugins to enable + * OxLint plugins to enable (example: ["react", "typescript", "import", "jsx-a11y"]) * * @generated from field: repeated string plugins = 3; */ @@ -45,7 +45,7 @@ export declare type OxlintAppConfig = Message<"stackpanel.modules.OxlintAppConfi categories: { [key: string]: string }; /** - * Individual rule overrides. Values: off, warn, error + * Individual rule overrides. Values: off, warn, error (example: {"eqeqeq":"error","no-console":"warn","no-debugger":"error"}) * * @generated from field: map rules = 5; */ diff --git a/packages/proto/gen/ts/scripts.ts b/packages/proto/gen/ts/scripts.ts index 4a746bae..ec6247e3 100644 --- a/packages/proto/gen/ts/scripts.ts +++ b/packages/proto/gen/ts/scripts.ts @@ -29,11 +29,11 @@ export interface Script { /** * @generated from protobuf field: optional string exec = 1 */ - exec?: string; // Shell command to execute (mutually exclusive with path) + exec?: string; // Shell command to execute (mutually exclusive with path) (example: "bun run dev") /** * @generated from protobuf field: optional string description = 2 */ - description?: string; // Human-readable description of the script + description?: string; // Human-readable description of the script (example: "Start the API server") /** * @generated from protobuf field: map env = 3 */ @@ -43,11 +43,11 @@ export interface Script { /** * @generated from protobuf field: optional string bin_path = 4 */ - bin_path?: string; // Path to script executable in Nix store (computed) + bin_path?: string; // Path to script executable in Nix store (computed) (example: "/nix/store/abc123-scripts/bin/db-seed") /** * @generated from protobuf field: optional string source = 5 */ - source?: string; // Source type: inline or path (for debugging) + source?: string; // Source type: inline or path (for debugging) (example: "inline") /** * @generated from protobuf field: repeated stackpanel.db.ScriptArg args = 6 */ @@ -55,7 +55,7 @@ export interface Script { /** * @generated from protobuf field: optional int32 timeout = 7 */ - timeout?: number; // Maximum execution time in seconds (0 = no timeout, default: 300) + timeout?: number; // Maximum execution time in seconds (0 = no timeout, default: 300) (example: 300) } /** * @@ -72,19 +72,19 @@ export interface ScriptArg { /** * @generated from protobuf field: string name = 1 */ - name: string; // Argument name (e.g., 'file', '--output', '-v') + name: string; // Argument name (e.g., 'file', '--output', '-v') (example: "--dry-run") /** * @generated from protobuf field: optional string description = 2 */ - description?: string; // Human-readable description of the argument + description?: string; // Human-readable description of the argument (example: "Preview changes without applying") /** * @generated from protobuf field: optional bool required = 3 */ - required?: boolean; // Whether the argument is required (default: false) + required?: boolean; // Whether the argument is required (default: false) (example: false) /** * @generated from protobuf field: optional string default = 4 */ - default?: string; // Default value if not provided + default?: string; // Default value if not provided (example: "production") } /** * Collection of development shell scripts @@ -108,7 +108,7 @@ export interface ScriptsConfig { /** * @generated from protobuf field: bool enable = 1 */ - enable: boolean; // Whether to add the scripts package to the devshell + enable: boolean; // Whether to add the scripts package to the devshell (example: true) } // @generated message type with reflection information, may provide speed optimized methods class Script$Type extends MessageType