@stravica-ai/digital-operator-pa 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +170 -0
- package/bin/desk +9 -0
- package/bin/distill +2 -0
- package/bin/estate-sync +2 -0
- package/bin/launch +2 -0
- package/bin/memory-sync +2 -0
- package/bin/migrate-inspect +2 -0
- package/bin/pa +2 -0
- package/bin/pa-coordinator-hook +2 -0
- package/bin/pa-init +2 -0
- package/bin/research +2 -0
- package/bin/scheduler +2 -0
- package/bin/secrets +2 -0
- package/bin/slice +2 -0
- package/bin/smoke +9 -0
- package/bin/sync +2 -0
- package/dist/engineering-pa-cli/README.md +205 -0
- package/dist/engineering-pa-cli/bin/estate-sync +2 -0
- package/dist/engineering-pa-cli/bin/launch +2 -0
- package/dist/engineering-pa-cli/bin/pa +2 -0
- package/dist/engineering-pa-cli/bin/pa-coordinator-hook +12 -0
- package/dist/engineering-pa-cli/bin/research +2 -0
- package/dist/engineering-pa-cli/bin/scheduler +2 -0
- package/dist/engineering-pa-cli/bin/secrets +2 -0
- package/dist/engineering-pa-cli/bin/smoke +9 -0
- package/dist/engineering-pa-cli/bin/sync +2 -0
- package/dist/engineering-pa-cli/config/coordinator-allowlist.json +118 -0
- package/dist/engineering-pa-cli/docs/coordinator-hook.md +211 -0
- package/dist/engineering-pa-cli/docs/estate-sync.md +412 -0
- package/dist/engineering-pa-cli/docs/gsc.md +175 -0
- package/dist/engineering-pa-cli/docs/lint-linkedin.md +139 -0
- package/dist/engineering-pa-cli/docs/secrets.md +221 -0
- package/dist/engineering-pa-cli/docs/smoke.md +113 -0
- package/dist/engineering-pa-cli/docs/staging-alias.md +114 -0
- package/dist/engineering-pa-cli/index.mjs +17 -0
- package/dist/engineering-pa-cli/package.json +37 -0
- package/dist/engineering-pa-cli/src/autonomy/cli.mjs +329 -0
- package/dist/engineering-pa-cli/src/autonomy/envelope.mjs +301 -0
- package/dist/engineering-pa-cli/src/coordinator-hook/cli.mjs +140 -0
- package/dist/engineering-pa-cli/src/coordinator-hook/config.mjs +134 -0
- package/dist/engineering-pa-cli/src/coordinator-hook/message.mjs +47 -0
- package/dist/engineering-pa-cli/src/coordinator-hook/policy.mjs +211 -0
- package/dist/engineering-pa-cli/src/coordinator-hook/repo-root.mjs +44 -0
- package/dist/engineering-pa-cli/src/coordinator-hook/self.mjs +30 -0
- package/dist/engineering-pa-cli/src/environment/cli.mjs +287 -0
- package/dist/engineering-pa-cli/src/environment/probes.mjs +302 -0
- package/dist/engineering-pa-cli/src/gsc/auth.mjs +148 -0
- package/dist/engineering-pa-cli/src/gsc/cli.mjs +93 -0
- package/dist/engineering-pa-cli/src/gsc/cloudflare.mjs +318 -0
- package/dist/engineering-pa-cli/src/gsc/commands/add-property.mjs +70 -0
- package/dist/engineering-pa-cli/src/gsc/commands/list-properties.mjs +33 -0
- package/dist/engineering-pa-cli/src/gsc/commands/pull-analytics.mjs +130 -0
- package/dist/engineering-pa-cli/src/gsc/commands/submit-sitemap.mjs +41 -0
- package/dist/engineering-pa-cli/src/gsc/commands/verify-via-cf-dns.mjs +189 -0
- package/dist/engineering-pa-cli/src/knowledge/call-log.mjs +59 -0
- package/dist/engineering-pa-cli/src/knowledge/cli.mjs +242 -0
- package/dist/engineering-pa-cli/src/knowledge/eval.mjs +446 -0
- package/dist/engineering-pa-cli/src/knowledge/formatters.mjs +331 -0
- package/dist/engineering-pa-cli/src/knowledge/graph.mjs +710 -0
- package/dist/engineering-pa-cli/src/launch/README.md +214 -0
- package/dist/engineering-pa-cli/src/launch/cli.mjs +51 -0
- package/dist/engineering-pa-cli/src/launch/commands/launch.mjs +106 -0
- package/dist/engineering-pa-cli/src/launch/identity.mjs +43 -0
- package/dist/engineering-pa-cli/src/launch/planner.mjs +44 -0
- package/dist/engineering-pa-cli/src/launch/repo-root.mjs +53 -0
- package/dist/engineering-pa-cli/src/launch/runner.mjs +147 -0
- package/dist/engineering-pa-cli/src/launch/task-loader.mjs +85 -0
- package/dist/engineering-pa-cli/src/lint/cli.mjs +61 -0
- package/dist/engineering-pa-cli/src/lint/commands/linkedin.mjs +133 -0
- package/dist/engineering-pa-cli/src/lint/detectors.mjs +90 -0
- package/dist/engineering-pa-cli/src/lint/linter.mjs +69 -0
- package/dist/engineering-pa-cli/src/lint/reporter.mjs +32 -0
- package/dist/engineering-pa-cli/src/lint/rules.mjs +132 -0
- package/dist/engineering-pa-cli/src/pa/cli.mjs +369 -0
- package/dist/engineering-pa-cli/src/pa/doc-groups.mjs +164 -0
- package/dist/engineering-pa-cli/src/pa/io.mjs +80 -0
- package/dist/engineering-pa-cli/src/pa/project-cli.mjs +385 -0
- package/dist/engineering-pa-cli/src/pa/projects.mjs +352 -0
- package/dist/engineering-pa-cli/src/pa/repo-root.mjs +64 -0
- package/dist/engineering-pa-cli/src/pa/session.mjs +254 -0
- package/dist/engineering-pa-cli/src/pa/work-cli.mjs +164 -0
- package/dist/engineering-pa-cli/src/pa/work.mjs +196 -0
- package/dist/engineering-pa-cli/src/pa/workstreams.mjs +201 -0
- package/dist/engineering-pa-cli/src/research/README.md +360 -0
- package/dist/engineering-pa-cli/src/research/briefs/extractor.md +103 -0
- package/dist/engineering-pa-cli/src/research/briefs/searcher.md +113 -0
- package/dist/engineering-pa-cli/src/research/briefs/synthesizer.md +124 -0
- package/dist/engineering-pa-cli/src/research/briefs/verifier.md +86 -0
- package/dist/engineering-pa-cli/src/research/cli.mjs +141 -0
- package/dist/engineering-pa-cli/src/research/commands/gates.mjs +176 -0
- package/dist/engineering-pa-cli/src/research/commands/list.mjs +56 -0
- package/dist/engineering-pa-cli/src/research/commands/mark.mjs +97 -0
- package/dist/engineering-pa-cli/src/research/commands/paths.mjs +69 -0
- package/dist/engineering-pa-cli/src/research/commands/prune.mjs +86 -0
- package/dist/engineering-pa-cli/src/research/commands/run.mjs +94 -0
- package/dist/engineering-pa-cli/src/research/commands/show.mjs +43 -0
- package/dist/engineering-pa-cli/src/research/docs/operator-present-flow.md +120 -0
- package/dist/engineering-pa-cli/src/research/format.mjs +59 -0
- package/dist/engineering-pa-cli/src/research/promote.mjs +260 -0
- package/dist/engineering-pa-cli/src/research/schema/finding.schema.json +55 -0
- package/dist/engineering-pa-cli/src/research/schema/gates.schema.json +34 -0
- package/dist/engineering-pa-cli/src/research/schema/manifest.schema.json +59 -0
- package/dist/engineering-pa-cli/src/research/schema/plan.schema.json +41 -0
- package/dist/engineering-pa-cli/src/research/schema/sources.schema.json +31 -0
- package/dist/engineering-pa-cli/src/research/store/findings.mjs +61 -0
- package/dist/engineering-pa-cli/src/research/store/gates.mjs +73 -0
- package/dist/engineering-pa-cli/src/research/store/index.mjs +312 -0
- package/dist/engineering-pa-cli/src/research/store/manifest.mjs +56 -0
- package/dist/engineering-pa-cli/src/research/store/plan.mjs +59 -0
- package/dist/engineering-pa-cli/src/research/store/sources.mjs +44 -0
- package/dist/engineering-pa-cli/src/research/store/validate.mjs +92 -0
- package/dist/engineering-pa-cli/src/research/workflows/research-normal.js +573 -0
- package/dist/engineering-pa-cli/src/scheduler/cli.mjs +197 -0
- package/dist/engineering-pa-cli/src/secrets/cli.mjs +254 -0
- package/dist/engineering-pa-cli/src/secrets/commands/backup-template.mjs +67 -0
- package/dist/engineering-pa-cli/src/secrets/commands/backup.mjs +85 -0
- package/dist/engineering-pa-cli/src/secrets/commands/delete.mjs +58 -0
- package/dist/engineering-pa-cli/src/secrets/commands/find.mjs +36 -0
- package/dist/engineering-pa-cli/src/secrets/commands/get.mjs +49 -0
- package/dist/engineering-pa-cli/src/secrets/commands/init.mjs +69 -0
- package/dist/engineering-pa-cli/src/secrets/commands/list.mjs +37 -0
- package/dist/engineering-pa-cli/src/secrets/commands/rotate.mjs +46 -0
- package/dist/engineering-pa-cli/src/secrets/commands/set.mjs +123 -0
- package/dist/engineering-pa-cli/src/secrets/commands/status.mjs +146 -0
- package/dist/engineering-pa-cli/src/secrets/commands/vaults.mjs +57 -0
- package/dist/engineering-pa-cli/src/secrets/commands/verify.mjs +143 -0
- package/dist/engineering-pa-cli/src/secrets/vault.mjs +766 -0
- package/dist/engineering-pa-cli/src/smoke/checks.mjs +199 -0
- package/dist/engineering-pa-cli/src/smoke/cli.mjs +108 -0
- package/dist/engineering-pa-cli/src/smoke/commands/run.mjs +237 -0
- package/dist/engineering-pa-cli/src/smoke/runner.mjs +191 -0
- package/dist/engineering-pa-cli/src/staging-alias/cli.mjs +91 -0
- package/dist/engineering-pa-cli/src/staging-alias/cloudflare.mjs +380 -0
- package/dist/engineering-pa-cli/src/staging-alias/commands/list.mjs +36 -0
- package/dist/engineering-pa-cli/src/staging-alias/commands/set.mjs +188 -0
- package/dist/engineering-pa-cli/src/staging-alias/commands/status.mjs +113 -0
- package/dist/engineering-pa-cli/src/staging-alias/commands/unset.mjs +95 -0
- package/dist/engineering-pa-cli/src/staging-alias/sites.mjs +105 -0
- package/dist/engineering-pa-cli/src/sync/cli.mjs +151 -0
- package/dist/engineering-pa-cli/src/sync/git.mjs +149 -0
- package/dist/engineering-pa-cli/src/sync/lock.mjs +30 -0
- package/dist/engineering-pa-cli/src/sync/regenerated-artifacts.mjs +114 -0
- package/dist/engineering-pa-cli/src/sync/registry-scope.mjs +260 -0
- package/dist/engineering-pa-cli/src/sync/run.mjs +531 -0
- package/dist/engineering-pa-cli/src/sync/runner.mjs +62 -0
- package/dist/engineering-pa-cli/src/sync/runs-digest.mjs +138 -0
- package/dist/engineering-pa-core/README.md +60 -0
- package/dist/engineering-pa-core/bin/desk +9 -0
- package/dist/engineering-pa-core/bin/distill +2 -0
- package/dist/engineering-pa-core/bin/memory-sync +2 -0
- package/dist/engineering-pa-core/bin/slice +2 -0
- package/dist/engineering-pa-core/docs/autonomy-envelope-tracker.md +111 -0
- package/dist/engineering-pa-core/docs/blueprints/README.md +45 -0
- package/dist/engineering-pa-core/docs/blueprints/docker-services/blueprint.md +168 -0
- package/dist/engineering-pa-core/docs/blueprints/git-identity/blueprint.md +116 -0
- package/dist/engineering-pa-core/docs/blueprints/ideas/custom-workspace-views.md +9 -0
- package/dist/engineering-pa-core/docs/blueprints/ideas/knowledge-domain-patterns.md +15 -0
- package/dist/engineering-pa-core/docs/blueprints/ideas/office-integration.md +11 -0
- package/dist/engineering-pa-core/docs/blueprints/ideas/team-scaling.md +9 -0
- package/dist/engineering-pa-core/docs/blueprints/ideas/work-personal-separation.md +9 -0
- package/dist/engineering-pa-core/docs/blueprints/scheduled-distillation/blueprint.md +129 -0
- package/dist/engineering-pa-core/docs/blueprints/tool-integration/blueprint.md +110 -0
- package/dist/engineering-pa-core/docs/commands/init.md +159 -0
- package/dist/engineering-pa-core/docs/commands/schedule.md +98 -0
- package/dist/engineering-pa-core/docs/commands/upgrade.md +67 -0
- package/dist/engineering-pa-core/docs/entity-location-map.md +93 -0
- package/dist/engineering-pa-core/docs/knowledge-scaffold.md +121 -0
- package/dist/engineering-pa-core/docs/lock.md +155 -0
- package/dist/engineering-pa-core/docs/memory-sync.md +28 -0
- package/dist/engineering-pa-core/docs/pa-operating-model.md +457 -0
- package/dist/engineering-pa-core/docs/scheduling.md +35 -0
- package/dist/engineering-pa-core/docs/standards/README.md +24 -0
- package/dist/engineering-pa-core/docs/standards/briefing-contract.md +161 -0
- package/dist/engineering-pa-core/docs/standards/tooling.md +240 -0
- package/dist/engineering-pa-core/docs/tools/distill.md +230 -0
- package/dist/engineering-pa-core/docs/tools/memory-sync.md +98 -0
- package/dist/engineering-pa-core/docs/tools/scheduler.md +243 -0
- package/dist/engineering-pa-core/docs/tools/slice.md +150 -0
- package/dist/engineering-pa-core/docs/upstream-issue-filing.md +88 -0
- package/dist/engineering-pa-core/docs/working-directory.md +29 -0
- package/dist/engineering-pa-core/docs/workspace-operations.md +46 -0
- package/dist/engineering-pa-core/index.mjs +21 -0
- package/dist/engineering-pa-core/knowledge/README.md +53 -0
- package/dist/engineering-pa-core/knowledge/canonical/.gitkeep +0 -0
- package/dist/engineering-pa-core/knowledge/content-voice/README.md +64 -0
- package/dist/engineering-pa-core/knowledge/content-voice/banned-ai-tells-baseline.md +133 -0
- package/dist/engineering-pa-core/knowledge/content-voice/banned-ai-tells-shape.md +58 -0
- package/dist/engineering-pa-core/knowledge/content-voice/banned-ai-tells-taxonomy.md +33 -0
- package/dist/engineering-pa-core/knowledge/content-voice/content-pipeline-routing.md +58 -0
- package/dist/engineering-pa-core/knowledge/content-voice/new-tell-capture-procedure.md +40 -0
- package/dist/engineering-pa-core/knowledge/content-voice/voice-guide-shape.md +43 -0
- package/dist/engineering-pa-core/knowledge/delegation-dispatch/README.md +34 -0
- package/dist/engineering-pa-core/knowledge/delegation-dispatch/briefing-contract.md +77 -0
- package/dist/engineering-pa-core/knowledge/delegation-dispatch/delegation-modes.md +84 -0
- package/dist/engineering-pa-core/knowledge/delegation-dispatch/dispatch-envelope.md +238 -0
- package/dist/engineering-pa-core/knowledge/delegation-dispatch/task-groups-and-orchestrators.md +62 -0
- package/dist/engineering-pa-core/knowledge/delegation-dispatch/team-improvement-loop.md +48 -0
- package/dist/engineering-pa-core/knowledge/delegation-dispatch/tool-development-policy.md +48 -0
- package/dist/engineering-pa-core/knowledge/engineering-discipline/README.md +33 -0
- package/dist/engineering-pa-core/knowledge/engineering-discipline/blast-radius-and-safety.md +50 -0
- package/dist/engineering-pa-core/knowledge/engineering-discipline/investigate-root-causes.md +48 -0
- package/dist/engineering-pa-core/knowledge/engineering-discipline/role-ladder.md +57 -0
- package/dist/engineering-pa-core/knowledge/engineering-discipline/verify-runtime-behaviour.md +53 -0
- package/dist/engineering-pa-core/knowledge/engineering-discipline/worktree-isolation.md +50 -0
- package/dist/engineering-pa-core/knowledge/knowledge-memory/README.md +33 -0
- package/dist/engineering-pa-core/knowledge/knowledge-memory/claude-md-hygiene.md +47 -0
- package/dist/engineering-pa-core/knowledge/knowledge-memory/journal-and-self-improvement.md +53 -0
- package/dist/engineering-pa-core/knowledge/knowledge-memory/knowledge-retrieval-discipline.md +62 -0
- package/dist/engineering-pa-core/knowledge/knowledge-memory/librarian-synthesis-mandate.md +56 -0
- package/dist/engineering-pa-core/knowledge/knowledge-memory/staging-and-observations.md +58 -0
- package/dist/engineering-pa-core/knowledge/operator-interface/README.md +32 -0
- package/dist/engineering-pa-core/knowledge/operator-interface/communication-style.md +33 -0
- package/dist/engineering-pa-core/knowledge/operator-interface/escalation-and-correction.md +45 -0
- package/dist/engineering-pa-core/knowledge/operator-interface/push-back-discipline.md +42 -0
- package/dist/engineering-pa-core/knowledge/operator-interface/session-boot-and-end.md +56 -0
- package/dist/engineering-pa-core/knowledge/platform-tooling/README.md +37 -0
- package/dist/engineering-pa-core/knowledge/platform-tooling/desk-cli-reference.md +52 -0
- package/dist/engineering-pa-core/knowledge/platform-tooling/environment-awareness.md +91 -0
- package/dist/engineering-pa-core/knowledge/platform-tooling/mcp-servers-catalogue.md +52 -0
- package/dist/engineering-pa-core/knowledge/platform-tooling/pa-cli-reference.md +55 -0
- package/dist/engineering-pa-core/knowledge/platform-tooling/scheduling-and-launchd.md +56 -0
- package/dist/engineering-pa-core/knowledge/platform-tooling/tool-discovery-discipline.md +49 -0
- package/dist/engineering-pa-core/knowledge/platform-tooling/working-directory-vs-project-root.md +43 -0
- package/dist/engineering-pa-core/knowledge/platform-tooling/workspace-server.md +51 -0
- package/dist/engineering-pa-core/knowledge/raw/.gitkeep +0 -0
- package/dist/engineering-pa-core/knowledge/scaffold/domains.json +5 -0
- package/dist/engineering-pa-core/knowledge/schema/.gitkeep +0 -0
- package/dist/engineering-pa-core/knowledge/work-management/README.md +33 -0
- package/dist/engineering-pa-core/knowledge/work-management/desk-cli.md +84 -0
- package/dist/engineering-pa-core/knowledge/work-management/progress-md.md +48 -0
- package/dist/engineering-pa-core/knowledge/work-management/projects.md +64 -0
- package/dist/engineering-pa-core/knowledge/work-management/spawn-log.md +48 -0
- package/dist/engineering-pa-core/knowledge/work-management/work-items.md +67 -0
- package/dist/engineering-pa-core/package.json +26 -0
- package/dist/engineering-pa-core/roles/agent-ops/definition.md +79 -0
- package/dist/engineering-pa-core/roles/dispatch-briefer/definition.md +195 -0
- package/dist/engineering-pa-core/roles/librarian/definition.md +176 -0
- package/dist/engineering-pa-core/roles/pa/definition.md +93 -0
- package/dist/engineering-pa-core/roles/system-admin/definition.md +106 -0
- package/dist/engineering-pa-core/roles/tool-developer/definition.md +116 -0
- package/dist/engineering-pa-core/roles/writer/definition.md +130 -0
- package/dist/engineering-pa-core/schema/autonomy-envelope.schema.json +61 -0
- package/dist/engineering-pa-core/schema/project.json +114 -0
- package/dist/engineering-pa-core/schema/schedule.json +63 -0
- package/dist/engineering-pa-core/schema/work-item.json +92 -0
- package/dist/engineering-pa-core/src/config/pa-package-name.mjs +30 -0
- package/dist/engineering-pa-core/src/desk/cli.mjs +95 -0
- package/dist/engineering-pa-core/src/desk/commands.mjs +398 -0
- package/dist/engineering-pa-core/src/desk/format.mjs +84 -0
- package/dist/engineering-pa-core/src/desk/repo.mjs +172 -0
- package/dist/engineering-pa-core/src/desk/team-scope.mjs +142 -0
- package/dist/engineering-pa-core/src/distill/cli.mjs +112 -0
- package/dist/engineering-pa-core/src/distill/prereqs.mjs +171 -0
- package/dist/engineering-pa-core/src/distill/prompt.mjs +74 -0
- package/dist/engineering-pa-core/src/distill/run.mjs +230 -0
- package/dist/engineering-pa-core/src/distill/runner.mjs +86 -0
- package/dist/engineering-pa-core/src/distill/staging.mjs +59 -0
- package/dist/engineering-pa-core/src/knowledge/retrieval/backlink-indexer.mjs +154 -0
- package/dist/engineering-pa-core/src/knowledge/retrieval/graph-builder.mjs +186 -0
- package/dist/engineering-pa-core/src/knowledge/retrieval/index-builder.mjs +225 -0
- package/dist/engineering-pa-core/src/knowledge/retrieval/query.mjs +263 -0
- package/dist/engineering-pa-core/src/lock/lock.mjs +202 -0
- package/dist/engineering-pa-core/src/memory-sync/cli-support.mjs +12 -0
- package/dist/engineering-pa-core/src/memory-sync/cli.mjs +56 -0
- package/dist/engineering-pa-core/src/memory-sync/commands/pull.mjs +44 -0
- package/dist/engineering-pa-core/src/memory-sync/commands/push.mjs +46 -0
- package/dist/engineering-pa-core/src/memory-sync/mirror.mjs +114 -0
- package/dist/engineering-pa-core/src/memory-sync/repo.mjs +65 -0
- package/dist/engineering-pa-core/src/scheduler/detect.mjs +111 -0
- package/dist/engineering-pa-core/src/scheduler/host.mjs +38 -0
- package/dist/engineering-pa-core/src/scheduler/index.mjs +13 -0
- package/dist/engineering-pa-core/src/scheduler/install.mjs +854 -0
- package/dist/engineering-pa-core/src/scheduler/list.mjs +168 -0
- package/dist/engineering-pa-core/src/scheduler/remove.mjs +176 -0
- package/dist/engineering-pa-core/src/scheduler/verify.mjs +435 -0
- package/dist/engineering-pa-core/src/session-boot/autonomy-injection.mjs +84 -0
- package/dist/engineering-pa-core/src/slice/cli.mjs +139 -0
- package/dist/engineering-pa-core/src/slice/inputs.mjs +174 -0
- package/dist/engineering-pa-core/src/slice/prompt.mjs +94 -0
- package/dist/engineering-pa-core/src/slice/prompts/dave-boot.md +91 -0
- package/dist/engineering-pa-core/src/slice/run.mjs +334 -0
- package/dist/engineering-pa-core-extensions-atlassian/README.md +31 -0
- package/dist/engineering-pa-core-extensions-atlassian/index.mjs +9 -0
- package/dist/engineering-pa-core-extensions-atlassian/package.json +19 -0
- package/dist/engineering-pa-core-extensions-n8n/README.md +29 -0
- package/dist/engineering-pa-core-extensions-n8n/index.mjs +8 -0
- package/dist/engineering-pa-core-extensions-n8n/package.json +19 -0
- package/dist/engineering-pa-librarian/README.md +38 -0
- package/dist/engineering-pa-librarian/index.mjs +12 -0
- package/dist/engineering-pa-librarian/package.json +19 -0
- package/dist/engineering-pa-migrate-inspect/README.md +131 -0
- package/dist/engineering-pa-migrate-inspect/bin/migrate-inspect +2 -0
- package/dist/engineering-pa-migrate-inspect/package.json +21 -0
- package/dist/engineering-pa-migrate-inspect/src/age-key-migrate.mjs +83 -0
- package/dist/engineering-pa-migrate-inspect/src/cli.mjs +97 -0
- package/dist/engineering-pa-migrate-inspect/src/inspector.mjs +237 -0
- package/dist/engineering-pa-migrate-inspect/src/platforms/linux.mjs +87 -0
- package/dist/engineering-pa-migrate-inspect/src/platforms/macos.mjs +105 -0
- package/dist/engineering-pa-migrate-inspect/src/runner.mjs +87 -0
- package/dist/engineering-pa-runbook/README.md +103 -0
- package/dist/engineering-pa-runbook/package.json +18 -0
- package/dist/engineering-pa-runbook/reference/dex-template.runbook.json +66 -0
- package/dist/engineering-pa-runbook/reference/hq-dave.runbook.json +69 -0
- package/dist/engineering-pa-runbook/reference/smarthome01.runbook.json +92 -0
- package/dist/engineering-pa-runbook/schema/inspection.schema.json +113 -0
- package/dist/engineering-pa-runbook/schema/runbook.schema.json +67 -0
- package/dist/engineering-pa-runbook/src/validator.mjs +167 -0
- package/dist/engineering-pa-scaffold/README.md +164 -0
- package/dist/engineering-pa-scaffold/bin/pa-init +2 -0
- package/dist/engineering-pa-scaffold/index.mjs +42 -0
- package/dist/engineering-pa-scaffold/package.json +22 -0
- package/dist/engineering-pa-scaffold/src/cli.mjs +115 -0
- package/dist/engineering-pa-scaffold/src/commands/init.mjs +169 -0
- package/dist/engineering-pa-scaffold/src/generator.mjs +354 -0
- package/dist/engineering-pa-scaffold/src/prompts.mjs +125 -0
- package/dist/engineering-pa-scaffold/src/runner.mjs +142 -0
- package/dist/engineering-pa-scaffold/templates/CLAUDE.md.template +196 -0
- package/dist/engineering-pa-scaffold/templates/operator-README.md.template +44 -0
- package/dist/engineering-pa-types-engineering/README.md +35 -0
- package/dist/engineering-pa-types-engineering/docs/commands/product-build.md +120 -0
- package/dist/engineering-pa-types-engineering/index.mjs +9 -0
- package/dist/engineering-pa-types-engineering/package.json +19 -0
- package/dist/engineering-pa-types-engineering/roles/product-engineer/definition.md +650 -0
- package/dist/engineering-pa-types-engineering/roles/product-engineer/templates/build-spec.md +82 -0
- package/dist/engineering-pa-types-engineering/roles/product-engineer/templates/preflight-checklist.md +158 -0
- package/dist/engineering-pa-types-engineering/roles/product-engineer/templates/worker-brief.md +130 -0
- package/dist/engineering-pa-workspace/README.md +197 -0
- package/dist/engineering-pa-workspace/app/assets/md.js +187 -0
- package/dist/engineering-pa-workspace/app/assets/modal.js +120 -0
- package/dist/engineering-pa-workspace/app/assets/theme.css +132 -0
- package/dist/engineering-pa-workspace/app/assets/theme.js +159 -0
- package/dist/engineering-pa-workspace/app/banner.js +320 -0
- package/dist/engineering-pa-workspace/app/delegations.html +345 -0
- package/dist/engineering-pa-workspace/app/home.html +1060 -0
- package/dist/engineering-pa-workspace/app/index.html +361 -0
- package/dist/engineering-pa-workspace/app/knowledge-map.html +163 -0
- package/dist/engineering-pa-workspace/app/knowledge.html +304 -0
- package/dist/engineering-pa-workspace/app/nav.json +75 -0
- package/dist/engineering-pa-workspace/app/notes.html +199 -0
- package/dist/engineering-pa-workspace/app/onboarding.html +592 -0
- package/dist/engineering-pa-workspace/app/profile.html +243 -0
- package/dist/engineering-pa-workspace/app/project-detail.html +432 -0
- package/dist/engineering-pa-workspace/app/projects.html +297 -0
- package/dist/engineering-pa-workspace/app/repos.html +598 -0
- package/dist/engineering-pa-workspace/app/schedules.html +486 -0
- package/dist/engineering-pa-workspace/app/secrets.html +164 -0
- package/dist/engineering-pa-workspace/app/staging.html +319 -0
- package/dist/engineering-pa-workspace/app/tasks.html +465 -0
- package/dist/engineering-pa-workspace/app/vendor/chart.umd.min.js +21 -0
- package/dist/engineering-pa-workspace/app/viewer.html +116 -0
- package/dist/engineering-pa-workspace/docs/DAEMON.md +104 -0
- package/dist/engineering-pa-workspace/docs/page-blueprint.md +286 -0
- package/dist/engineering-pa-workspace/docs/status-mon.md +168 -0
- package/dist/engineering-pa-workspace/index.mjs +12 -0
- package/dist/engineering-pa-workspace/nav.json.example +8 -0
- package/dist/engineering-pa-workspace/package.json +27 -0
- package/dist/engineering-pa-workspace/src/api.mjs +2086 -0
- package/dist/engineering-pa-workspace/src/install-daemon.mjs +573 -0
- package/dist/engineering-pa-workspace/src/nav.mjs +190 -0
- package/dist/engineering-pa-workspace/src/secrets-api.mjs +175 -0
- package/dist/engineering-pa-workspace/src/server.mjs +516 -0
- package/dist/engineering-pa-workspace/src/status-mon/poll.mjs +220 -0
- package/dist/engineering-pa-workspace/src/status-mon/poller.mjs +113 -0
- package/dist/engineering-pa-workspace/src/status-mon/run.mjs +133 -0
- package/dist/engineering-pa-workspace/src/supervisor.mjs +264 -0
- package/dist/engineering-pa-workspace/src/ws.mjs +633 -0
- package/index.mjs +60 -0
- package/package.json +58 -0
- package/templates/banned-ai-tells.md +102 -0
- package/templates/purpose.md +105 -0
- package/templates/voice-guide.md +98 -0
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
// sync — digest the cron tools' runs.jsonl files.
|
|
2
|
+
//
|
|
3
|
+
// At commit time, sync composes a commit-message body that summarises
|
|
4
|
+
// what's being captured: which tools ran, with what status, how recently.
|
|
5
|
+
// The body is parsed from the last few records of each known tool's
|
|
6
|
+
// runs.jsonl file. This makes `git log` of sync commits self-describing —
|
|
7
|
+
// "this is what wsd-ingest produced at HH:MM:SS"-style.
|
|
8
|
+
//
|
|
9
|
+
// In v2 the operator repo no longer contains `core/tools/`. Platform-shipped
|
|
10
|
+
// tools (distill, memory-sync, etc.) write their audit logs under
|
|
11
|
+
// `<repoRoot>/.cache/<tool>/logs/runs.jsonl`. Operator-extension tools keep
|
|
12
|
+
// writing under `<repoRoot>/operator/extensions/tools/<tool>/logs/runs.jsonl`.
|
|
13
|
+
// Discovery walks both parents.
|
|
14
|
+
//
|
|
15
|
+
// Per the scheduled-tool audit-record contract (§15 of the tooling
|
|
16
|
+
// standard) every record carries `ts` (RFC-3339) and `status`. We tolerate
|
|
17
|
+
// missing fields gracefully — an old-format line still gets surfaced.
|
|
18
|
+
|
|
19
|
+
// Directory discovery is by explicit walk over known parents — node:fs's
|
|
20
|
+
// glob is recent and not yet supported across all Node LTSes we target,
|
|
21
|
+
// and `readdir` is well-known and portable.
|
|
22
|
+
import { readFile, readdir } from 'node:fs/promises';
|
|
23
|
+
import { join } from 'node:path';
|
|
24
|
+
|
|
25
|
+
// In v2 the KNOWN_PARENTS pair the package's audit-log convention
|
|
26
|
+
// (`.cache/<tool>/logs/runs.jsonl`) with operator-extension tooling
|
|
27
|
+
// (`operator/extensions/tools/<tool>/logs/runs.jsonl`). The v1 entry
|
|
28
|
+
// `core/tools` is dropped — that tree no longer exists in operator repos.
|
|
29
|
+
export const KNOWN_PARENTS = [
|
|
30
|
+
'.cache',
|
|
31
|
+
'operator/extensions/tools',
|
|
32
|
+
];
|
|
33
|
+
|
|
34
|
+
export async function discoverToolRunsLogs(repoRoot, { extraParents = [] } = {}) {
|
|
35
|
+
const out = [];
|
|
36
|
+
const parents = [...KNOWN_PARENTS, ...extraParents];
|
|
37
|
+
for (const parent of parents) {
|
|
38
|
+
const parentAbs = join(repoRoot, parent);
|
|
39
|
+
let entries;
|
|
40
|
+
try {
|
|
41
|
+
entries = await readdir(parentAbs, { withFileTypes: true });
|
|
42
|
+
} catch (err) {
|
|
43
|
+
if (err.code === 'ENOENT') continue;
|
|
44
|
+
throw err;
|
|
45
|
+
}
|
|
46
|
+
for (const entry of entries) {
|
|
47
|
+
if (!entry.isDirectory()) continue;
|
|
48
|
+
// Skip the sync tool itself — we don't want our own audit log
|
|
49
|
+
// showing up in the digest. Skip both the current cache dir name
|
|
50
|
+
// (estate-sync) and the pre-rename name (sync) — a host upgraded
|
|
51
|
+
// in place may still have an orphaned `.cache/sync/` directory.
|
|
52
|
+
if (entry.name === 'estate-sync' || entry.name === 'sync') continue;
|
|
53
|
+
const candidate = join(parentAbs, entry.name, 'logs', 'runs.jsonl');
|
|
54
|
+
try {
|
|
55
|
+
await readFile(candidate, 'utf8');
|
|
56
|
+
out.push({ tool: entry.name, parent, path: candidate });
|
|
57
|
+
} catch (err) {
|
|
58
|
+
// Tool exists but no logs/runs.jsonl yet — skip.
|
|
59
|
+
if (err.code !== 'ENOENT' && err.code !== 'EISDIR') throw err;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return out;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Read the last `n` non-empty lines of a file. The runs.jsonl files are
|
|
67
|
+
// small (KB, not MB) so reading the whole file is fine and simpler than
|
|
68
|
+
// reverse-seeking.
|
|
69
|
+
export async function tailJsonl(path, n) {
|
|
70
|
+
let content;
|
|
71
|
+
try {
|
|
72
|
+
content = await readFile(path, 'utf8');
|
|
73
|
+
} catch (err) {
|
|
74
|
+
if (err.code === 'ENOENT') return [];
|
|
75
|
+
throw err;
|
|
76
|
+
}
|
|
77
|
+
const lines = content.split('\n').filter((l) => l.trim().length > 0);
|
|
78
|
+
const tail = lines.slice(Math.max(0, lines.length - n));
|
|
79
|
+
return tail
|
|
80
|
+
.map((line) => {
|
|
81
|
+
try {
|
|
82
|
+
return JSON.parse(line);
|
|
83
|
+
} catch {
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
})
|
|
87
|
+
.filter((r) => r !== null);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// Compose a multi-line commit-message body summarising recent activity
|
|
91
|
+
// across the discovered tools. The body is intentionally terse — diffs in
|
|
92
|
+
// the commit carry the actual content; this is just a navigational hint
|
|
93
|
+
// for `git log` readers.
|
|
94
|
+
//
|
|
95
|
+
// Layout:
|
|
96
|
+
// <line 1: blank for paragraph break between subject and body>
|
|
97
|
+
// Captured runs (last <window> per tool):
|
|
98
|
+
// <tool-a>:
|
|
99
|
+
// <ts> <status> [<extra>]
|
|
100
|
+
// ...
|
|
101
|
+
// <tool-b>:
|
|
102
|
+
// <ts> <status> [<extra>]
|
|
103
|
+
//
|
|
104
|
+
// Tools surveyed: <comma-separated list>
|
|
105
|
+
export async function composeBody({ repoRoot, perToolWindow = 3, now = () => new Date(), extraParents = [] }) {
|
|
106
|
+
const tools = await discoverToolRunsLogs(repoRoot, { extraParents });
|
|
107
|
+
if (tools.length === 0) {
|
|
108
|
+
return '(no tool runs.jsonl found to summarise)';
|
|
109
|
+
}
|
|
110
|
+
const sections = [];
|
|
111
|
+
const summarised = [];
|
|
112
|
+
for (const t of tools) {
|
|
113
|
+
const records = await tailJsonl(t.path, perToolWindow);
|
|
114
|
+
if (records.length === 0) {
|
|
115
|
+
// Skip tools whose log exists but is empty.
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
summarised.push(t.tool);
|
|
119
|
+
const lines = [`${t.tool}:`];
|
|
120
|
+
for (const r of records) {
|
|
121
|
+
const ts = r.ts || '(no-ts)';
|
|
122
|
+
const status = r.status || `exit=${r.exitCode ?? '?'}`;
|
|
123
|
+
const extras = [];
|
|
124
|
+
if (typeof r.stagingCount === 'number') extras.push(`stagingCount=${r.stagingCount}`);
|
|
125
|
+
if (typeof r.files === 'number') extras.push(`files=${r.files}`);
|
|
126
|
+
if (typeof r.entriesTotal === 'number') extras.push(`entries=${r.entriesTotal}`);
|
|
127
|
+
const extraStr = extras.length ? ` (${extras.join(', ')})` : '';
|
|
128
|
+
lines.push(` ${ts} ${status}${extraStr}`);
|
|
129
|
+
}
|
|
130
|
+
sections.push(lines.join('\n'));
|
|
131
|
+
}
|
|
132
|
+
if (sections.length === 0) {
|
|
133
|
+
return '(no tool runs.jsonl entries to summarise)';
|
|
134
|
+
}
|
|
135
|
+
const header = `Captured runs (last ${perToolWindow} per tool):`;
|
|
136
|
+
const footer = `Tools surveyed: ${summarised.join(', ')}`;
|
|
137
|
+
return [header, '', sections.join('\n\n'), '', footer].join('\n');
|
|
138
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# @stravica-ai/engineering-pa-core
|
|
2
|
+
|
|
3
|
+
Identity: `@stravica-ai/engineering-pa-core` — the type-agnostic platform spine. PA-type-agnostic engine code that every PA type (engineering, future types) sits on top of.
|
|
4
|
+
|
|
5
|
+
## Status
|
|
6
|
+
|
|
7
|
+
**Skeleton — v0.1.0.** Workspace-internal, `"private": true`, not individually published. The single bundled publish is `@stravica-ai/digital-operator-pa`.
|
|
8
|
+
|
|
9
|
+
Phase 1 Task 4 ports the following from the predecessor `Stravica/dave` `core/` tree:
|
|
10
|
+
|
|
11
|
+
- `desk` CLI + work-item/project/spawn-log schemas
|
|
12
|
+
- Briefing-contract framework + standards docs
|
|
13
|
+
- Canonical roles (librarian, tool-developer, system-admin, agent-ops)
|
|
14
|
+
- Knowledge retrieval + distillation engine
|
|
15
|
+
- Scheduler primitives
|
|
16
|
+
- Memory-sync mechanism
|
|
17
|
+
- Identity framework + agent terminology docs
|
|
18
|
+
|
|
19
|
+
Some scope boundaries between `core/`, `cli/`, and `workspace/` are still under discussion (e.g. is the secrets CLI under `core/cli/` or top-level `cli/`?). Task 3 (core inventory) produces the per-file allocation map.
|
|
20
|
+
|
|
21
|
+
## Layout
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
packages/core/
|
|
25
|
+
index.mjs # placeholder export; populated in Task 4
|
|
26
|
+
package.json # name, version, scripts (no deps)
|
|
27
|
+
README.md # this file — the contract
|
|
28
|
+
knowledge/ # methodology-aligned slot for the team-library content
|
|
29
|
+
README.md # one-pager pointing at the knowledge-system standard
|
|
30
|
+
schema/ # librarian-config — distillation rules, taxonomy, weights
|
|
31
|
+
raw/ # intake — PA-writable observations (per-PA subfolders)
|
|
32
|
+
canonical/ # wiki — librarian-only writes (curated, conflict-annotated)
|
|
33
|
+
test/
|
|
34
|
+
index.test.mjs # node:test; trivial-but-real coverage
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Tests
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
pnpm --filter @stravica-ai/engineering-pa-core test
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Knowledge subtree
|
|
44
|
+
|
|
45
|
+
`knowledge/` follows the layer separation from [knowledge-system.md](https://github.com/Stravica/dave/blob/main/operator/knowledge/engineering/standards/knowledge-system.md):
|
|
46
|
+
|
|
47
|
+
- **`raw/`** — intake. PA-writable subfolders (`raw/{paName}/...`). Append-only.
|
|
48
|
+
- **`canonical/`** — wiki. Librarian-only write. Curated, deduplicated, conflict-annotated.
|
|
49
|
+
- **`schema/`** — librarian configuration. Distillation rules, taxonomy, retrieval weights, half-lives, importance tiers.
|
|
50
|
+
|
|
51
|
+
v0.1.0 ships the directory shape only. Phase 3 lands the actual team library and the deployed librarian service.
|
|
52
|
+
|
|
53
|
+
## Standards
|
|
54
|
+
|
|
55
|
+
This package follows the [tooling standard](../../CONTRIBUTING.md#standards):
|
|
56
|
+
|
|
57
|
+
- JS only — `.mjs`, `type: module`.
|
|
58
|
+
- Zero runtime npm dependencies.
|
|
59
|
+
- `node:test` for tests.
|
|
60
|
+
- camelCase JSON.
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# Autonomy envelope tracker
|
|
2
|
+
|
|
3
|
+
The per-agent per-task-type approval-state record. Referenced from every operator's CLAUDE.md framing block.
|
|
4
|
+
|
|
5
|
+
## The mechanism
|
|
6
|
+
|
|
7
|
+
Each PA agent maintains an autonomy envelope at `agents/<paName>/autonomy-envelope.md`. The file is a markdown document with a YAML frontmatter block carrying the machine-readable state and a body that renders the state for human consumption plus a per-task-type history log.
|
|
8
|
+
|
|
9
|
+
The envelope is the durable record of what the operator has approved the PA to do without asking, on a per-task-type basis. The PA's day-to-day judgement calibrates from operator reactions; the envelope is the persistent state you check when the reflex is unclear.
|
|
10
|
+
|
|
11
|
+
## The three states
|
|
12
|
+
|
|
13
|
+
| State | Meaning | PA behaviour |
|
|
14
|
+
|---|---|---|
|
|
15
|
+
| `fullyApproved` | Operator has said "just do this class of task; don't ask." | Act. Don't ask. If the reflex is to check, resist — the envelope is telling you not to. |
|
|
16
|
+
| `checkBeforeCommitting` | Operator wants sign-off on the durable action but not on the drafting. | Draft, get sign-off before commit / push / publish / ship. Read-only exploration is fine without asking. |
|
|
17
|
+
| `needsFullSupervision` | Operator hasn't approved this class yet, or has explicitly demoted it. | Do not act. Escalate every step. |
|
|
18
|
+
|
|
19
|
+
The envelope's authority is above the PA's own inclination. If the envelope says a category is `needsFullSupervision` but the PA thinks the operator would be fine with autonomous action, the PA does NOT act — the operator can promote the category via `pa autonomy set` when they're ready.
|
|
20
|
+
|
|
21
|
+
## Task-type taxonomy
|
|
22
|
+
|
|
23
|
+
**Core does not enforce a specific task-type taxonomy** — every operator's surface types are different. An example taxonomy the operator might seed with:
|
|
24
|
+
|
|
25
|
+
- `li-comment-draft` — drafting a LinkedIn comment reply.
|
|
26
|
+
- `li-post-draft` — drafting a full LinkedIn post.
|
|
27
|
+
- `article-draft` — drafting a long-form article.
|
|
28
|
+
- `code-dispatch` — dispatching a code implementer.
|
|
29
|
+
- `code-inline` — writing code in the main thread.
|
|
30
|
+
- `git-commit-push` — committing and pushing.
|
|
31
|
+
- `secret-access` — reading operator secrets from the vault.
|
|
32
|
+
- `contact-outreach` — reaching out to a contact on the operator's behalf.
|
|
33
|
+
|
|
34
|
+
The operator seeds their own taxonomy per their surface types. The schema (`packages/core/schema/autonomy-envelope.schema.json`) enforces field shape but not the specific set of `taskTypes.id` values.
|
|
35
|
+
|
|
36
|
+
## CLI
|
|
37
|
+
|
|
38
|
+
`pa autonomy` — four subcommands.
|
|
39
|
+
|
|
40
|
+
| Subcommand | Purpose |
|
|
41
|
+
|---|---|
|
|
42
|
+
| `pa autonomy init <agent>` | Create an empty envelope for a new agent. Idempotent — errors if envelope already exists. |
|
|
43
|
+
| `pa autonomy get <agent> [<task-type>]` | Print current state. Task-type optional (prints full table if omitted). |
|
|
44
|
+
| `pa autonomy set <agent> <task-type> <state> [--note <text>]` | Update state. Adds timestamped history entry to the body. Validates state against the enum. |
|
|
45
|
+
| `pa autonomy list [<agent>]` | List envelopes across all agents (or one), with staleness signals (envelope untouched for >30 days → warning). |
|
|
46
|
+
|
|
47
|
+
Exit codes:
|
|
48
|
+
- `0` ok
|
|
49
|
+
- `1` usage error
|
|
50
|
+
- `2` invalid state or unknown agent
|
|
51
|
+
- `3` IO error
|
|
52
|
+
|
|
53
|
+
## Session-boot integration
|
|
54
|
+
|
|
55
|
+
The PA reads the autonomy envelope on every session boot (per CLAUDE.md.template Startup routine). The envelope is one of the small set of files loaded before the first user response.
|
|
56
|
+
|
|
57
|
+
**Injection surface (per OQ-A1).** The core ships the read-side of the mechanism (schema + CLI + docs); the core does not ship a `SessionStart` hook. Operator-side hook infrastructure (e.g. an operator's `boot-context` tool) can invoke `pa autonomy get <agent> --format json` at session boot and inject the resulting summary into `additionalContext` alongside other live-state blocks.
|
|
58
|
+
|
|
59
|
+
The `pa autonomy get <agent> --format json` output is stable JSON that a boot-context tool can consume without parsing the markdown file directly.
|
|
60
|
+
|
|
61
|
+
## Difference from the three-zone role envelope standard
|
|
62
|
+
|
|
63
|
+
**Related but separate.** The three-zone ROLE envelope is a standard for how ROLES calibrate autonomy across their whole surface — informational, decision-support, decision-authority. That's a property of the role definition.
|
|
64
|
+
|
|
65
|
+
This tracker is a PER-AGENT, PER-TASK-TYPE record that the operator sets and demotes/promotes dynamically. Different granularity, different lifecycle. Both patterns coexist.
|
|
66
|
+
|
|
67
|
+
## File shape
|
|
68
|
+
|
|
69
|
+
Example `agents/<paName>/autonomy-envelope.md`:
|
|
70
|
+
|
|
71
|
+
```markdown
|
|
72
|
+
---
|
|
73
|
+
agent: dave
|
|
74
|
+
owner: barry
|
|
75
|
+
updated: 2026-07-05T14:30:00Z
|
|
76
|
+
taskTypes:
|
|
77
|
+
- id: li-comment-draft
|
|
78
|
+
label: LinkedIn comment draft
|
|
79
|
+
state: checkBeforeCommitting
|
|
80
|
+
stateSince: 2026-07-04T09:00:00Z
|
|
81
|
+
operatorNote: Voice restarts are cheap mid-draft; post-publication corrections are expensive.
|
|
82
|
+
- id: code-dispatch
|
|
83
|
+
label: Code implementation dispatch
|
|
84
|
+
state: fullyApproved
|
|
85
|
+
stateSince: 2026-07-05T14:30:00Z
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
# Autonomy envelope — dave
|
|
89
|
+
|
|
90
|
+
## Current state
|
|
91
|
+
|
|
92
|
+
| Task type | State | Since | Note |
|
|
93
|
+
|---|---|---|---|
|
|
94
|
+
| LinkedIn comment draft | checkBeforeCommitting | 2026-07-04 | Voice restarts are cheap mid-draft. |
|
|
95
|
+
| Code implementation dispatch | fullyApproved | 2026-07-05 | — |
|
|
96
|
+
|
|
97
|
+
## History
|
|
98
|
+
|
|
99
|
+
### 2026-07-05T14:30:00Z — code-dispatch promoted to fullyApproved
|
|
100
|
+
Operator note: none.
|
|
101
|
+
|
|
102
|
+
### 2026-07-04T09:00:00Z — li-comment-draft demoted to checkBeforeCommitting
|
|
103
|
+
Operator note: Voice restarts are cheap mid-draft; post-publication corrections are expensive.
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## Related
|
|
107
|
+
|
|
108
|
+
- `packages/core/schema/autonomy-envelope.schema.json` — canonical schema.
|
|
109
|
+
- CLAUDE.md.template framing block — the operator-facing pointer.
|
|
110
|
+
- `packages/core/knowledge/operator-interface/escalation-and-correction.md` — how the envelope interacts with escalation.
|
|
111
|
+
- `packages/cli/src/autonomy/` — CLI implementation.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Blueprints
|
|
2
|
+
|
|
3
|
+
Blueprints are step-by-step guides for extending Dave. They cover common setup tasks, integrations, and infrastructure patterns that your PA can follow to configure your environment.
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
## Two tiers
|
|
7
|
+
|
|
8
|
+
### Blueprints (in named directories)
|
|
9
|
+
|
|
10
|
+
Proven, tested, ready to follow. Each blueprint directory contains a `blueprint.md` with clear prerequisites, steps, and verification instructions.
|
|
11
|
+
|
|
12
|
+
- **scheduled-distillation** -- Set up automated knowledge distillation on a cron schedule
|
|
13
|
+
- **tool-integration** -- Connect external tools via MCP servers (GitHub, Slack, Jira, etc.)
|
|
14
|
+
- **git-identity** -- Give your PA its own SSH key and git identity for clean audit trails
|
|
15
|
+
- **docker-services** -- Run a local Docker services cluster (PostgreSQL, Redis, etc.)
|
|
16
|
+
|
|
17
|
+
### Ideas (in `ideas/`)
|
|
18
|
+
|
|
19
|
+
Concepts that have not been fleshed out into full blueprints yet. Each is a short description of the idea and what it would involve. If you want to turn an idea into a blueprint, start by creating a directory and writing a `blueprint.md`.
|
|
20
|
+
|
|
21
|
+
- **work-personal-separation** -- Separating work and personal knowledge domains
|
|
22
|
+
- **knowledge-domain-patterns** -- Common domain structures (recipes, project notes, meeting notes)
|
|
23
|
+
- **office-integration** -- Calendar, email, and document integrations
|
|
24
|
+
- **team-scaling** -- Running multiple PA instances for a team
|
|
25
|
+
- **custom-workspace-views** -- Building custom dashboard pages
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
## How to use
|
|
29
|
+
|
|
30
|
+
1. Browse the blueprints above or in the workspace UI
|
|
31
|
+
2. Read the `blueprint.md` in the directory you want
|
|
32
|
+
3. Follow the steps -- your PA can help execute them
|
|
33
|
+
4. Adapt the examples to your specific environment
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
## How to contribute
|
|
37
|
+
|
|
38
|
+
1. Create a new directory under `core/blueprints/`
|
|
39
|
+
2. Write a `blueprint.md` with clear sections: what it does, prerequisites, steps, verification
|
|
40
|
+
3. Keep steps concrete and copy-pasteable where possible
|
|
41
|
+
4. Test the steps on a clean setup before marking it as proven
|
|
42
|
+
|
|
43
|
+
Custom blueprints can also go in `operator/extensions/blueprints/`. The PA checks extension blueprints before core blueprints, so you can override or extend any core blueprint.
|
|
44
|
+
|
|
45
|
+
See `CONTRIBUTING.md` for guidelines on contributing blueprints back to the project.
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
# Docker Services
|
|
2
|
+
|
|
3
|
+
Set up a local Docker services cluster for your PA to use. Common services include PostgreSQL, Redis, and other infrastructure your projects depend on.
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
## What it does
|
|
7
|
+
|
|
8
|
+
Creates a Docker Compose configuration that runs local service containers, accessible to your PA and your applications. Services are isolated, reproducible, and easy to tear down.
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
## Prerequisites
|
|
12
|
+
|
|
13
|
+
- Docker Desktop (macOS/Windows) or Docker Engine (Linux)
|
|
14
|
+
- Docker Compose v2 (usually included with Docker Desktop)
|
|
15
|
+
- Sufficient disk space for container images
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
## Steps
|
|
19
|
+
|
|
20
|
+
### 1. Create the compose file
|
|
21
|
+
|
|
22
|
+
Create `docker/docker-compose.yml` in your repo root:
|
|
23
|
+
|
|
24
|
+
```yaml
|
|
25
|
+
version: "3.8"
|
|
26
|
+
|
|
27
|
+
services:
|
|
28
|
+
postgres:
|
|
29
|
+
image: postgres:16-alpine
|
|
30
|
+
container_name: dave-postgres
|
|
31
|
+
environment:
|
|
32
|
+
POSTGRES_USER: dave
|
|
33
|
+
POSTGRES_PASSWORD: localdev
|
|
34
|
+
POSTGRES_DB: dave
|
|
35
|
+
ports:
|
|
36
|
+
- "5432:5432"
|
|
37
|
+
volumes:
|
|
38
|
+
- pgdata:/var/lib/postgresql/data
|
|
39
|
+
healthcheck:
|
|
40
|
+
test: ["CMD-SHELL", "pg_isready -U dave"]
|
|
41
|
+
interval: 10s
|
|
42
|
+
timeout: 5s
|
|
43
|
+
retries: 5
|
|
44
|
+
|
|
45
|
+
redis:
|
|
46
|
+
image: redis:7-alpine
|
|
47
|
+
container_name: dave-redis
|
|
48
|
+
ports:
|
|
49
|
+
- "6379:6379"
|
|
50
|
+
volumes:
|
|
51
|
+
- redisdata:/data
|
|
52
|
+
healthcheck:
|
|
53
|
+
test: ["CMD", "redis-cli", "ping"]
|
|
54
|
+
interval: 10s
|
|
55
|
+
timeout: 5s
|
|
56
|
+
retries: 5
|
|
57
|
+
|
|
58
|
+
volumes:
|
|
59
|
+
pgdata:
|
|
60
|
+
redisdata:
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### 2. Start the services
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
cd docker
|
|
67
|
+
docker compose up -d
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Verify they are running:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
docker compose ps
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
You should see both containers with status "healthy".
|
|
77
|
+
|
|
78
|
+
### 3. Test connectivity
|
|
79
|
+
|
|
80
|
+
PostgreSQL:
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
docker exec -it dave-postgres psql -U dave -c "SELECT version();"
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Redis:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
docker exec -it dave-redis redis-cli ping
|
|
90
|
+
# Should output: PONG
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### 4. Store credentials in the vault
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
node core/tools/secrets/bin/secrets set POSTGRES_URL "postgresql://dave:localdev@localhost:5432/dave"
|
|
97
|
+
node core/tools/secrets/bin/secrets set REDIS_URL "redis://localhost:6379"
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### 5. Configure your PA to use the services
|
|
101
|
+
|
|
102
|
+
Your PA can now reference these services by their connection URLs. When your PA needs database access for a project, it will use the credentials from the vault.
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
## Managing services
|
|
106
|
+
|
|
107
|
+
Start all services:
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
cd docker && docker compose up -d
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Stop all services (preserves data):
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
cd docker && docker compose stop
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Remove all services and data:
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
cd docker && docker compose down -v
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
View logs:
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
cd docker && docker compose logs -f
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
## Adding more services
|
|
133
|
+
|
|
134
|
+
Add new service blocks to `docker-compose.yml`. Common additions:
|
|
135
|
+
|
|
136
|
+
**Elasticsearch:**
|
|
137
|
+
```yaml
|
|
138
|
+
elasticsearch:
|
|
139
|
+
image: elasticsearch:8.12.0
|
|
140
|
+
container_name: dave-elasticsearch
|
|
141
|
+
environment:
|
|
142
|
+
- discovery.type=single-node
|
|
143
|
+
- xpack.security.enabled=false
|
|
144
|
+
ports:
|
|
145
|
+
- "9200:9200"
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
**MinIO (S3-compatible storage):**
|
|
149
|
+
```yaml
|
|
150
|
+
minio:
|
|
151
|
+
image: minio/minio
|
|
152
|
+
container_name: dave-minio
|
|
153
|
+
command: server /data --console-address ":9001"
|
|
154
|
+
environment:
|
|
155
|
+
MINIO_ROOT_USER: minioadmin
|
|
156
|
+
MINIO_ROOT_PASSWORD: minioadmin
|
|
157
|
+
ports:
|
|
158
|
+
- "9000:9000"
|
|
159
|
+
- "9001:9001"
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
## Notes
|
|
164
|
+
|
|
165
|
+
- Default credentials are for local development only -- never use them in production
|
|
166
|
+
- Named volumes (`pgdata`, `redisdata`) persist data across container restarts
|
|
167
|
+
- Use `docker compose down -v` to completely reset all data
|
|
168
|
+
- Port conflicts: if a port is already in use, change the host port mapping (e.g. `5433:5432`)
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# Git Identity
|
|
2
|
+
|
|
3
|
+
Give your PA its own dedicated git identity with a separate SSH key and commit author. This creates a clear audit trail -- you can always tell which commits were made by you and which by your PA.
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
## What it does
|
|
7
|
+
|
|
8
|
+
Sets up:
|
|
9
|
+
- A dedicated SSH keypair for the PA
|
|
10
|
+
- Git author configuration (name and email)
|
|
11
|
+
- GitHub deploy key or user association
|
|
12
|
+
- Local `.gitconfig` scoping so the PA uses its own identity automatically
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
## Prerequisites
|
|
16
|
+
|
|
17
|
+
- Git installed
|
|
18
|
+
- SSH client installed
|
|
19
|
+
- A GitHub account (or other git hosting) where you want the PA to push
|
|
20
|
+
- Access to add SSH keys to your git hosting provider
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
## Steps
|
|
24
|
+
|
|
25
|
+
### 1. Generate an SSH keypair
|
|
26
|
+
|
|
27
|
+
Create a dedicated key for your PA. Replace `dave` with your PA's name:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
ssh-keygen -t ed25519 -C "dave-pa@yourdomain.com" -f ~/.ssh/dave_pa_ed25519 -N ""
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
This creates:
|
|
34
|
+
- `~/.ssh/dave_pa_ed25519` (private key)
|
|
35
|
+
- `~/.ssh/dave_pa_ed25519.pub` (public key)
|
|
36
|
+
|
|
37
|
+
### 2. Add the public key to GitHub
|
|
38
|
+
|
|
39
|
+
Copy the public key:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
cat ~/.ssh/dave_pa_ed25519.pub
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Then add it to GitHub:
|
|
46
|
+
- Go to GitHub Settings > SSH and GPG keys > New SSH key
|
|
47
|
+
- Title: "Dave PA" (or your PA's name)
|
|
48
|
+
- Key type: Authentication key
|
|
49
|
+
- Paste the public key
|
|
50
|
+
|
|
51
|
+
Alternatively, add it as a deploy key on specific repositories if you want to limit access.
|
|
52
|
+
|
|
53
|
+
### 3. Configure SSH to use the PA key
|
|
54
|
+
|
|
55
|
+
Add a host alias to `~/.ssh/config`:
|
|
56
|
+
|
|
57
|
+
```
|
|
58
|
+
Host github-pa
|
|
59
|
+
HostName github.com
|
|
60
|
+
User git
|
|
61
|
+
IdentityFile ~/.ssh/dave_pa_ed25519
|
|
62
|
+
IdentitiesOnly yes
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### 4. Configure git identity
|
|
66
|
+
|
|
67
|
+
Set up the PA's git identity in your repo. Create or edit `.gitconfig` in your repo root:
|
|
68
|
+
|
|
69
|
+
```ini
|
|
70
|
+
[user]
|
|
71
|
+
name = Dave (PA)
|
|
72
|
+
email = dave-pa@yourdomain.com
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Then tell git to use this config for this repo:
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
git config --local include.path ../.gitconfig
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Alternatively, set it directly:
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
git config --local user.name "Dave (PA)"
|
|
85
|
+
git config --local user.email "dave-pa@yourdomain.com"
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### 5. Update remote URL (optional)
|
|
89
|
+
|
|
90
|
+
If you want the PA to push using its own SSH key, update the remote to use the host alias:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
git remote set-url origin git@github-pa:yourusername/yourrepo.git
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### 6. Verify
|
|
97
|
+
|
|
98
|
+
Test that the PA's identity works:
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
ssh -T github-pa
|
|
102
|
+
# Should output: Hi yourusername! You've successfully authenticated...
|
|
103
|
+
|
|
104
|
+
git log --oneline -1
|
|
105
|
+
# Commits should show "Dave (PA)" as author
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
## Security notes
|
|
110
|
+
|
|
111
|
+
- The PA's SSH key should have the minimum required access -- prefer deploy keys over personal access
|
|
112
|
+
- Never share the private key or commit it to the repository
|
|
113
|
+
- Store the private key path in your secrets vault for reference
|
|
114
|
+
- If the PA only needs to push to specific repos, use per-repo deploy keys instead of a global SSH key
|
|
115
|
+
- Consider enabling signed commits for the PA identity for additional verification
|
|
116
|
+
- Periodically rotate the SSH key, especially if the PA operates on shared infrastructure
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Custom Workspace Views
|
|
2
|
+
|
|
3
|
+
Build custom dashboard pages for the workspace server that display project-specific or domain-specific information.
|
|
4
|
+
|
|
5
|
+
The workspace server already supports serving HTML from the app directory. Custom views would be additional HTML pages that fetch data from the API and present it in specialised formats -- a sprint board view, a knowledge graph visualisation, a timeline of decisions, or a metrics dashboard.
|
|
6
|
+
|
|
7
|
+
Implementation approach: create new HTML files in `core/tools/workspace/app/` or `operator/extensions/workspace/` that follow the same design system (dark theme, monospace font, inline CSS). The workspace shell would detect custom pages and add them to the navigation automatically.
|
|
8
|
+
|
|
9
|
+
Example views: a "sprint board" that groups work items into columns with drag-and-drop, a "knowledge map" showing domain connections as a graph, a "decision log" that aggregates ADRs across projects with search, or a "health check" page showing system status (git sync, scheduled tasks, vault status).
|