@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
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Stravica
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
# @stravica-ai/digital-operator-pa
|
|
2
|
+
|
|
3
|
+
The public, single-bundled npm surface of the engineering-PA platform.
|
|
4
|
+
|
|
5
|
+
One install gives operators every CLI bin and bundles the internal platform
|
|
6
|
+
code into a self-contained tarball.
|
|
7
|
+
|
|
8
|
+
## Install
|
|
9
|
+
|
|
10
|
+
```sh
|
|
11
|
+
pnpm add @stravica-ai/digital-operator-pa
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
Requires Node 24+. See [`../../docs/installing.md`](../../docs/installing.md)
|
|
15
|
+
for the GitHub Packages `~/.npmrc` setup (PAT with `read:packages` scope).
|
|
16
|
+
|
|
17
|
+
## Bins
|
|
18
|
+
|
|
19
|
+
The wrapper exposes the platform's operator-facing CLIs:
|
|
20
|
+
|
|
21
|
+
| Bin | What it does |
|
|
22
|
+
|-------------------|-------------------------------------------------------------|
|
|
23
|
+
| `pa` | Top-level operator CLI (`pa status`, `pa workspace`, …) |
|
|
24
|
+
| `desk` | Task + project queries |
|
|
25
|
+
| `launch` | Boot a scoped agent instance bound to an identity and task |
|
|
26
|
+
| `sync` | Per-host single-writer git sync |
|
|
27
|
+
| `secrets` | SOPS+age secrets vault management |
|
|
28
|
+
| `scheduler` | Scheduling primitives (cron / launchd install + verify) |
|
|
29
|
+
| `smoke` | Fresh-clone smoke suite |
|
|
30
|
+
| `distill` | Librarian distillation sweep |
|
|
31
|
+
| `memory-sync` | PA-memory cache mirror |
|
|
32
|
+
| `migrate-inspect` | Host inspection for migration planning |
|
|
33
|
+
| `pa-init` | Scaffolder for a new operator repo |
|
|
34
|
+
| `slice` | Operator profile slice generator (compact boot context) |
|
|
35
|
+
| `pa-coordinator-hook` | Claude Code `PreToolUse` hook — three-tier coordinator-mode tool policy |
|
|
36
|
+
|
|
37
|
+
Each bin runs `--help` and exits 0 to confirm the install is healthy.
|
|
38
|
+
|
|
39
|
+
`pa-coordinator-hook` is the exception to "operator-facing CLI" above — it's
|
|
40
|
+
a hook binary invoked by Claude Code itself, not run by hand. See
|
|
41
|
+
[`../cli/docs/coordinator-hook.md`](../cli/docs/coordinator-hook.md) for the
|
|
42
|
+
full contract, the settings.json wiring snippet, and the per-PA overlay
|
|
43
|
+
mechanism.
|
|
44
|
+
|
|
45
|
+
### Starting a PA session
|
|
46
|
+
|
|
47
|
+
After `pa-init` lays down an operator repo, kick off your PA with:
|
|
48
|
+
|
|
49
|
+
```sh
|
|
50
|
+
cd <operator-repo>
|
|
51
|
+
pa session
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
`pa session`:
|
|
55
|
+
|
|
56
|
+
1. Resolves the operator repo root (`$DAVE_REPO_ROOT` → `$PA_REPO_ROOT`
|
|
57
|
+
→ `.git`-walk → CWD).
|
|
58
|
+
2. Reads `operator/config/preferences.json` and pulls out `paName`.
|
|
59
|
+
3. Chdirs to `agents/<paName>/`.
|
|
60
|
+
4. Execs `claude --dangerously-skip-permissions`, inheriting stdio.
|
|
61
|
+
|
|
62
|
+
For muscle memory, alias it to your PA's name:
|
|
63
|
+
|
|
64
|
+
```sh
|
|
65
|
+
alias dave='pa session' # add to ~/.zshrc / ~/.bashrc
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Now `dave` alone boots a session. Errors (missing preferences, missing
|
|
69
|
+
agent directory, `claude` not on `PATH`) exit non-zero with a concrete
|
|
70
|
+
remediation message.
|
|
71
|
+
|
|
72
|
+
## Programmatic surface
|
|
73
|
+
|
|
74
|
+
```js
|
|
75
|
+
import { name, version, bins, bundled, describe } from '@stravica-ai/digital-operator-pa';
|
|
76
|
+
|
|
77
|
+
console.log(describe());
|
|
78
|
+
// → { name: '@stravica-ai/digital-operator-pa', version: '0.1.1', bins: [...], bundled: [...] }
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
For richer in-process composition (importing internal modules directly),
|
|
82
|
+
consumers can reach into the bundled `dist/` tree — but the bin shims are
|
|
83
|
+
the supported contract.
|
|
84
|
+
|
|
85
|
+
## Single-bundled-publish model (approach A2)
|
|
86
|
+
|
|
87
|
+
`@stravica-ai/digital-operator-pa` ships **one tarball** that contains:
|
|
88
|
+
|
|
89
|
+
```
|
|
90
|
+
package/
|
|
91
|
+
package.json # bin map, exports, publishConfig
|
|
92
|
+
index.mjs # public ESM surface
|
|
93
|
+
bin/ # bin shims — thin wrappers over dist/.../cli.mjs
|
|
94
|
+
dist/ # bundled internal packages (built by build.mjs)
|
|
95
|
+
engineering-pa-core/
|
|
96
|
+
engineering-pa-runbook/
|
|
97
|
+
engineering-pa-cli/
|
|
98
|
+
engineering-pa-migrate-inspect/
|
|
99
|
+
engineering-pa-workspace/
|
|
100
|
+
engineering-pa-scaffold/
|
|
101
|
+
engineering-pa-librarian/
|
|
102
|
+
engineering-pa-types-engineering/
|
|
103
|
+
engineering-pa-core-extensions-atlassian/
|
|
104
|
+
engineering-pa-core-extensions-n8n/
|
|
105
|
+
README.md
|
|
106
|
+
LICENSE
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
`build.mjs` is the pre-pack bundler. It:
|
|
110
|
+
|
|
111
|
+
1. Copies each internal workspace package's source into `dist/<short-name>/`,
|
|
112
|
+
skipping `test/`, `node_modules/`, `dist/`, IDE state.
|
|
113
|
+
2. Rewrites every `'@stravica-ai/engineering-pa-*'` string literal inside copied
|
|
114
|
+
`.mjs` files to a relative path within `dist/`, so cross-package imports
|
|
115
|
+
resolve without any runtime npm-name lookup.
|
|
116
|
+
|
|
117
|
+
Hooked via `prepack`, so `pnpm pack` and `pnpm publish` always run it first.
|
|
118
|
+
Also exposed as `pnpm --filter @stravica-ai/digital-operator-pa run build`.
|
|
119
|
+
|
|
120
|
+
### Bundled docs, knowledge, roles, and schemas
|
|
121
|
+
|
|
122
|
+
The `dist/` tree carries each internal package's non-code assets too — for
|
|
123
|
+
core that means `docs/`, `knowledge/` (bucket scaffolds), `roles/`, and
|
|
124
|
+
`schema/` all ship inside the tarball.
|
|
125
|
+
|
|
126
|
+
Platform documentation refers to these assets by **symbolic package path**
|
|
127
|
+
(e.g. `@stravica-ai/engineering-pa-core/docs/pa-operating-model.md`). The
|
|
128
|
+
internal packages are `private: true` and never installed under their own
|
|
129
|
+
names, so that path does not exist in `node_modules` verbatim. In an operator
|
|
130
|
+
install it resolves inside the wrapper's bundle:
|
|
131
|
+
|
|
132
|
+
```
|
|
133
|
+
@stravica-ai/engineering-pa-<pkg>/<subpath>
|
|
134
|
+
→ node_modules/@stravica-ai/digital-operator-pa/dist/engineering-pa-<pkg>/<subpath>
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
For example, `@stravica-ai/engineering-pa-core/knowledge/content-voice/` lives at
|
|
138
|
+
`node_modules/@stravica-ai/digital-operator-pa/dist/engineering-pa-core/knowledge/content-voice/`
|
|
139
|
+
relative to the operator repo root.
|
|
140
|
+
|
|
141
|
+
**Why A2 over A1.** A1 publishes each internal package separately and the
|
|
142
|
+
wrapper depends on them via the registry. That requires every internal to be
|
|
143
|
+
public (or at least published with auth-token coverage), multiplies the
|
|
144
|
+
operator-side auth surface, and creates N-tarballs-per-release coordination.
|
|
145
|
+
A2 keeps internals `private: true`, ships one auditable artefact, and matches
|
|
146
|
+
the v0.1 brief explicitly. Split to A1 later only if multi-version internal
|
|
147
|
+
publishing becomes a real need.
|
|
148
|
+
|
|
149
|
+
## Scripts
|
|
150
|
+
|
|
151
|
+
```sh
|
|
152
|
+
pnpm --filter @stravica-ai/digital-operator-pa run build # populate dist/
|
|
153
|
+
pnpm --filter @stravica-ai/digital-operator-pa run test # wrapper-level tests
|
|
154
|
+
pnpm --filter @stravica-ai/digital-operator-pa run dry-publish # build + dry-publish
|
|
155
|
+
pnpm --filter @stravica-ai/digital-operator-pa pack # produce a real tarball
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
## Publish target
|
|
159
|
+
|
|
160
|
+
`publishConfig.registry` points at `https://npm.pkg.github.com`. Publishes
|
|
161
|
+
happen via `.github/workflows/publish.yml` on `v*.*.*` tag push or manual
|
|
162
|
+
dispatch. See the root README for the release flow.
|
|
163
|
+
|
|
164
|
+
## Standards
|
|
165
|
+
|
|
166
|
+
- JS only — `.mjs`, `type: module`.
|
|
167
|
+
- Zero runtime npm dependencies.
|
|
168
|
+
- `node:test` for tests.
|
|
169
|
+
- camelCase JSON.
|
|
170
|
+
- MIT licensed.
|
package/bin/desk
ADDED
package/bin/distill
ADDED
package/bin/estate-sync
ADDED
package/bin/launch
ADDED
package/bin/memory-sync
ADDED
package/bin/pa
ADDED
package/bin/pa-init
ADDED
package/bin/research
ADDED
package/bin/scheduler
ADDED
package/bin/secrets
ADDED
package/bin/slice
ADDED
package/bin/smoke
ADDED
package/bin/sync
ADDED
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
# @stravica-ai/engineering-pa-cli
|
|
2
|
+
|
|
3
|
+
Identity: `@stravica-ai/engineering-pa-cli` — operator-facing CLIs.
|
|
4
|
+
|
|
5
|
+
## Status
|
|
6
|
+
|
|
7
|
+
**Skeleton — v0.1.0.** Workspace-internal, `"private": true`, not individually published.
|
|
8
|
+
|
|
9
|
+
Six bin entries are declared and ship as placeholders that print "not yet implemented" and exit 0. Phase 1 Task 4 ports the real implementations from the predecessor `Stravica/dave` `core/tools/` tree.
|
|
10
|
+
|
|
11
|
+
| Bin | Source | Lands in |
|
|
12
|
+
|---|---|---|
|
|
13
|
+
| `pa` | new (PA-instance control plane) | Task 4 |
|
|
14
|
+
| `desk` | `core/tools/desk/` | Task 4 |
|
|
15
|
+
| `secrets` | `core/tools/secrets/` | Task 4 |
|
|
16
|
+
| `scheduler` | `core/tools/scheduler/` (or equivalent) | Task 4 |
|
|
17
|
+
| `sync` | `core/tools/sync/` | Task 4 |
|
|
18
|
+
| `memory-sync` | `core/tools/memory-sync/` | Task 4 |
|
|
19
|
+
|
|
20
|
+
`pa-init` is intentionally NOT in this package — it lives under `packages/scaffold/bin/pa-init` per the brief's "scaffold/ = pa-init + onboarding flows" mapping.
|
|
21
|
+
|
|
22
|
+
## Layout
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
packages/cli/
|
|
26
|
+
index.mjs # shared placeholder entrypoint with runPlaceholder()
|
|
27
|
+
package.json # name, version, bin entries (6), scripts
|
|
28
|
+
README.md # this file
|
|
29
|
+
bin/
|
|
30
|
+
pa
|
|
31
|
+
desk
|
|
32
|
+
secrets
|
|
33
|
+
scheduler
|
|
34
|
+
sync
|
|
35
|
+
memory-sync
|
|
36
|
+
test/
|
|
37
|
+
index.test.mjs
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Each bin shim is a one-line Node script that calls `runPlaceholder(toolName, argv)` from `index.mjs`. When Task 4 lands real CLIs, the shims become standard tooling-spec shims pointing at `src/<tool>/cli.mjs` modules and the chokepoint pattern (`src/<tool>/runner.mjs`) per the tooling standard §7.
|
|
41
|
+
|
|
42
|
+
## Commands
|
|
43
|
+
|
|
44
|
+
In v0.1.0, every bin behaves identically:
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
<tool> --help # prints usage, exits 0
|
|
48
|
+
<tool> # prints "not yet implemented", exits 0
|
|
49
|
+
<tool> anything # prints "unknown verb" to stderr, exits 1
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### `pa project` — project state writes
|
|
53
|
+
|
|
54
|
+
Write-side complement to `desk projects`. Source of truth is
|
|
55
|
+
`projects/<id>/project.json`; the CLI rewrites manifests in place,
|
|
56
|
+
preserving the operator-repo 2-space indent and trailing newline.
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
pa project create <id> --name "..." --category <c> # scaffold projects/<id>/{project.json, README.md}
|
|
60
|
+
[--priority 0|1|2|3] [--owner ...] [--assignee ...] [--summary "..."]
|
|
61
|
+
|
|
62
|
+
pa project status <id> <draft|planned|in-progress|blocked|done|archived>
|
|
63
|
+
# set status; stamps `shipped` on done
|
|
64
|
+
|
|
65
|
+
pa project doc add <id> --label "..." --path "..." [--group "..."]
|
|
66
|
+
# append a doc to a group (default: "Documents")
|
|
67
|
+
pa project doc rm <id> --path "..." # remove the entry whose path matches
|
|
68
|
+
|
|
69
|
+
pa project list [--status ...] [--category ...] [--all] [--json]
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
`docs` is a **grouped object** keyed by group name → array of `{label, path}`:
|
|
73
|
+
|
|
74
|
+
```json
|
|
75
|
+
{
|
|
76
|
+
"docs": {
|
|
77
|
+
"Documents": [ { "label": "README", "path": "projects/foo/README.md" } ],
|
|
78
|
+
"Plans": [ { "label": "Brief", "path": "projects/foo/brief.md" } ]
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Legacy flat-array manifests are accepted on read and migrated to the
|
|
84
|
+
grouped shape transparently on the first `pa project doc add` write.
|
|
85
|
+
The workspace project-detail page renders both shapes.
|
|
86
|
+
|
|
87
|
+
### `pa work` — work-item state writes
|
|
88
|
+
|
|
89
|
+
Write-side complement to `desk work`. Items live at
|
|
90
|
+
`work/w-YYYY-MM-DD-NNN.json`; the CLI auto-numbers `NNN` against today's
|
|
91
|
+
existing items.
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
pa work create [--project <id>] --title "..." --category <c>
|
|
95
|
+
[--priority 0|1|2|3] [--summary "..."] [--owner ...] [--assignee ...]
|
|
96
|
+
|
|
97
|
+
pa work status <id> <draft|planned|in-progress|blocked|done|archived>
|
|
98
|
+
# set status; stamps `completedAt` on done
|
|
99
|
+
|
|
100
|
+
pa work list [--project <id>] [--status ...] [--category ...]
|
|
101
|
+
[--mine] [--theirs] [--all] [--json]
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
`--mine` resolves the PA name from `operator/config/preferences.json`
|
|
105
|
+
(`paName` / `agentName`), defaulting to `"pa"`.
|
|
106
|
+
|
|
107
|
+
### `pa knowledge` — query the operator's knowledge graph
|
|
108
|
+
|
|
109
|
+
Reads `<repo-root>/operator/knowledge/.graph.json` and exposes five verbs
|
|
110
|
+
for querying the operator's knowledge system. Feeds the third leg of the
|
|
111
|
+
PA operating model — knowledge retrieval discipline — so agents can
|
|
112
|
+
extract the right snippet at the right size instead of reading whole
|
|
113
|
+
files.
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
pa knowledge related <slug> [--in|--out] # 1-hop neighbourhood
|
|
117
|
+
pa knowledge search <term> [--full] # find docs matching a term
|
|
118
|
+
pa knowledge domain <name> # all docs in a domain + internal edges
|
|
119
|
+
pa knowledge orphans [--exclude-stubs] # docs with no inbound edges
|
|
120
|
+
pa knowledge path <a> <b> # shortest path between two docs
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Global flag: `--format <table|json|mermaid>` (default: `table`). The
|
|
124
|
+
`json` shape is stable-by-convention — `{ "verb": "<name>", ... }` —
|
|
125
|
+
so downstream roles (e.g. `dispatch-briefer`) can pipe query output
|
|
126
|
+
into their own tooling.
|
|
127
|
+
|
|
128
|
+
Slug resolution accepts exact ids, path-suffix filenames
|
|
129
|
+
(`voice-guide.md` matches `operator/knowledge/writing/voice-guide.md`),
|
|
130
|
+
or title-substring matches. Ambiguous matches exit `2` with the
|
|
131
|
+
candidate list.
|
|
132
|
+
|
|
133
|
+
`search` defaults to a title-only scan for speed. `--full` walks the
|
|
134
|
+
doc body under `<repo-root>/operator/knowledge/`, but returns the same
|
|
135
|
+
ranking (title exact > title substring > body match, tie-break on
|
|
136
|
+
edge count). Zero-result queries exit `0` — empty is a valid answer.
|
|
137
|
+
|
|
138
|
+
**Exit codes**: `0` ok, `1` usage, `2` unknown/ambiguous slug or
|
|
139
|
+
unknown domain, `3` IO (graph missing / unreadable).
|
|
140
|
+
|
|
141
|
+
### `pa staging-alias` — canonical staging.<site> alias for CF Workers sites
|
|
142
|
+
|
|
143
|
+
Wires a `staging.<hostname>` subdomain to a chosen branch's preview
|
|
144
|
+
deployment on the operator's CF-hosted Workers sites. Built around a
|
|
145
|
+
small router-worker that proxies to the chosen workers.dev preview URL,
|
|
146
|
+
because CF Custom Domains can only target prod deployments and CF
|
|
147
|
+
Preview URLs can only run on `*.workers.dev` (per CF docs 2026-05-21).
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
pa staging-alias set --site <hostname> --branch <branch> [--version <id>]
|
|
151
|
+
pa staging-alias unset --site <hostname> [--keep-worker]
|
|
152
|
+
pa staging-alias status --site <hostname>
|
|
153
|
+
pa staging-alias list
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
Registered sites are data-driven (`src/staging-alias/sites.mjs`): one
|
|
157
|
+
entry per site, naming the source worker, the router worker, the vault
|
|
158
|
+
key suffix, and the expected CF account-name. Adding a fourth site is
|
|
159
|
+
one entry + a vault-key pair.
|
|
160
|
+
|
|
161
|
+
Every write runs the 6-step CF multi-account drill: load the
|
|
162
|
+
site-specific vault keys, `GET /accounts/{id}`, assert
|
|
163
|
+
`result.name == expectedAccountName`, ABORT on mismatch. The drill
|
|
164
|
+
output is echoed on stdout so the operator sees which account a write
|
|
165
|
+
landed on. Full design + trade-offs: [`docs/staging-alias.md`](./docs/staging-alias.md).
|
|
166
|
+
|
|
167
|
+
### `pa lint linkedin` — voice-rule linter
|
|
168
|
+
|
|
169
|
+
Lints operator-authored text against a JSON voice-rule corpus and reports
|
|
170
|
+
violations in **alter-format** (`swap → X`, `cut`, `rename`) with rationale and
|
|
171
|
+
source pointer. Deterministic rules (em-dash, banned vocab, reused reaction
|
|
172
|
+
phrases, repeated openers) move out of the writer's prompt and into a validator.
|
|
173
|
+
|
|
174
|
+
```bash
|
|
175
|
+
pa lint linkedin <input-file> [--rules <path>] [--format <text|json>] \
|
|
176
|
+
[--severity <error|warning|info>] [--surface <name>]
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
Default corpus resolves to `operator/knowledge/writing/linkedin-rules.json`
|
|
180
|
+
under the repo root. Three detector types (`literal-phrase`, `regex`, `count`)
|
|
181
|
+
and three alter kinds (`swap`, `cut`, `rename`). Full schema + examples:
|
|
182
|
+
[`docs/lint-linkedin.md`](./docs/lint-linkedin.md).
|
|
183
|
+
|
|
184
|
+
This verb uses **lint-semantic exit codes** (ESLint-style) that intentionally
|
|
185
|
+
deviate from §6 below — `0` clean, `1` errors found, `2` warnings only, `3`
|
|
186
|
+
usage/IO/config error. Rationale and full table in the doc.
|
|
187
|
+
|
|
188
|
+
## Exit codes (tooling standard §6)
|
|
189
|
+
|
|
190
|
+
| Code | Meaning |
|
|
191
|
+
|---|---|
|
|
192
|
+
| 0 | OK (placeholder ran; no work done) |
|
|
193
|
+
| 1 | Usage error (bad flag, unknown verb) |
|
|
194
|
+
| 2 | Logical / operational failure (unused in skeleton) |
|
|
195
|
+
| 3 | Transport / IO failure (unused in skeleton) |
|
|
196
|
+
|
|
197
|
+
## Tests
|
|
198
|
+
|
|
199
|
+
```bash
|
|
200
|
+
pnpm --filter @stravica-ai/engineering-pa-cli test
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
## Standards
|
|
204
|
+
|
|
205
|
+
Follows the [tooling standard](../../CONTRIBUTING.md#standards): JS only, zero npm deps, `node:test`, `node:util.parseArgs` with `strict: true`, camelCase JSON.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// main() itself fails closed (exit 2) on any config-load or decision-logic
|
|
3
|
+
// error — see cli.mjs. This top-level .catch() is one more layer below
|
|
4
|
+
// that: it only fires on something even main() can't catch (e.g. the
|
|
5
|
+
// dynamic import() itself failing on a corrupted/partial install). Same
|
|
6
|
+
// posture either way — a security-relevant gate fails closed, not open.
|
|
7
|
+
import('../src/coordinator-hook/cli.mjs')
|
|
8
|
+
.then(async (m) => process.exit(await m.main(process.argv.slice(2))))
|
|
9
|
+
.catch((err) => {
|
|
10
|
+
process.stderr.write(`pa-coordinator-hook: fatal error loading hook (${err && err.message}) — failing closed (block)\n`);
|
|
11
|
+
process.exit(2);
|
|
12
|
+
});
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://stravica.dev/schemas/coordinator-allowlist.v1.json",
|
|
3
|
+
"version": 1,
|
|
4
|
+
"_comment": "Core three-tier allowlist for pa-coordinator-hook. Tier 1 tools never invoke the hook (see the settings.json matcher in packages/cli/docs/coordinator-hook.md) so they are not enumerated here for enforcement purposes — the tier1 array below is documentation only. Per-PA extensions belong in an overlay file (~/.claude/coordinator-overlay.json or <workspace>/.claude/coordinator-overlay.json), NOT in this file — this file ships inside the published package and is overwritten on every install/upgrade.",
|
|
5
|
+
|
|
6
|
+
"tier1": [
|
|
7
|
+
"Agent", "TaskStop", "SendMessage", "Workflow", "TaskCreate", "TaskList",
|
|
8
|
+
"TaskGet", "TaskOutput", "TaskUpdate", "Monitor", "ScheduleWakeup",
|
|
9
|
+
"AskUserQuestion", "Skill", "ToolSearch", "EnterPlanMode", "ExitPlanMode"
|
|
10
|
+
],
|
|
11
|
+
|
|
12
|
+
"tier2": {
|
|
13
|
+
"Bash": {
|
|
14
|
+
"allowPatterns": [
|
|
15
|
+
"^pa\\s",
|
|
16
|
+
"^pnpm exec pa\\s",
|
|
17
|
+
"^desk\\s",
|
|
18
|
+
"^claude-relay\\s",
|
|
19
|
+
"^node\\s+\\S*claude-relay\\S*\\s+",
|
|
20
|
+
"^git status(\\s|$)",
|
|
21
|
+
"^git log(\\s|$)",
|
|
22
|
+
"^git diff --stat(\\s|$)",
|
|
23
|
+
"^git branch --show-current(\\s|$)",
|
|
24
|
+
"^git branch(\\s|$)",
|
|
25
|
+
"^git remote -v(\\s|$)",
|
|
26
|
+
"^gh pr view(\\s|$)",
|
|
27
|
+
"^gh pr list(\\s|$)",
|
|
28
|
+
"^gh pr merge(\\s|$)",
|
|
29
|
+
"^gh pr close(\\s|$)",
|
|
30
|
+
"^gh api\\s+(?!.*(-X|--method)[=\\s]*(POST|PUT|PATCH|DELETE|HEAD|post|put|patch|delete|head)\\b)",
|
|
31
|
+
"^ls(\\s|$)",
|
|
32
|
+
"^pwd(\\s|$)",
|
|
33
|
+
"^hostname(\\s|$)",
|
|
34
|
+
"^date(\\s|$)",
|
|
35
|
+
"^whoami(\\s|$)",
|
|
36
|
+
"^which\\s",
|
|
37
|
+
"^echo\\s"
|
|
38
|
+
]
|
|
39
|
+
},
|
|
40
|
+
"Read": {
|
|
41
|
+
"_comment": "`<self>` is substituted at runtime: the resolved paName when known (PA_SELF_AGENT env var, else operator/config/preferences.json#paName), else `[^/]+` — the spec's documented fallback ('if unknown, allow any agents/*/ path').",
|
|
42
|
+
"allowPathPatterns": [
|
|
43
|
+
"^\\.session/",
|
|
44
|
+
"^agents/<self>/",
|
|
45
|
+
"^work/",
|
|
46
|
+
"^projects/[^/]+/project\\.json$",
|
|
47
|
+
"^projects/[^/]+/progress\\.md$",
|
|
48
|
+
"(^|/)spawn-log\\.json$",
|
|
49
|
+
"^\\.cache/"
|
|
50
|
+
],
|
|
51
|
+
"allowAbsolutePathPatterns": [
|
|
52
|
+
"^/private/tmp/",
|
|
53
|
+
"^/tmp/"
|
|
54
|
+
],
|
|
55
|
+
"blockPathPatterns": [
|
|
56
|
+
"^operator/knowledge/"
|
|
57
|
+
]
|
|
58
|
+
},
|
|
59
|
+
"Write": {
|
|
60
|
+
"allowPathPatterns": [
|
|
61
|
+
"^agents/<self>/staging/",
|
|
62
|
+
"^agents/<self>/spawn-log\\.json$",
|
|
63
|
+
"^\\.session/",
|
|
64
|
+
"^\\.cache/"
|
|
65
|
+
],
|
|
66
|
+
"allowAbsolutePathPatterns": [
|
|
67
|
+
"^/private/tmp/",
|
|
68
|
+
"^/tmp/"
|
|
69
|
+
]
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
|
|
73
|
+
"tier3": ["Edit", "NotebookEdit", "Grep", "Glob", "WebFetch", "WebSearch"],
|
|
74
|
+
|
|
75
|
+
"hardDeny": {
|
|
76
|
+
"_comment": "Checked before any allow pattern (core or overlay), for both Bash commands and Read/Write paths. Overlays cannot add, remove, or shadow entries here — see policy.mjs. Not a security sandbox (a determined caller can still smuggle a second command past a naive prefix regex — see bashChainGuard below for the mitigation), just a mechanical backstop against the most obviously destructive one-liners, the specific 'obviously-destructive gh verbs' the spec calls out, and reads/writes of credential material even if some overlay pattern would otherwise match it.",
|
|
77
|
+
"bashPatterns": [
|
|
78
|
+
"rm\\s+-rf\\b",
|
|
79
|
+
"curl[^\\n]*\\|\\s*(sh|bash|zsh)\\b",
|
|
80
|
+
"wget[^\\n]*\\|\\s*(sh|bash|zsh)\\b",
|
|
81
|
+
"^git\\s+push\\b[^\\n]*--force",
|
|
82
|
+
"^git\\s+reset\\s+--hard\\b",
|
|
83
|
+
"^git\\s+clean\\s+-f",
|
|
84
|
+
"^git\\s+branch\\s+-D\\b",
|
|
85
|
+
"--no-verify\\b",
|
|
86
|
+
"--no-gpg-sign\\b",
|
|
87
|
+
"^gh\\s+repo\\s+delete\\b",
|
|
88
|
+
"^gh\\s+(release|workflow|secret|auth)\\s+(delete|remove|logout)\\b",
|
|
89
|
+
"^sudo\\b",
|
|
90
|
+
"^dd\\s+if=",
|
|
91
|
+
"\\bmkfs\\b",
|
|
92
|
+
">\\s*/dev/(sd|nvme|disk|rdisk)"
|
|
93
|
+
],
|
|
94
|
+
"bashChainGuardPattern": "[;&|`<>\\n]|\\$\\(",
|
|
95
|
+
"bashChainGuardNote": "Tier2 Bash commands containing a shell-chaining metacharacter (;, &&, ||, |, backtick, $(...), <, >) or an embedded newline are blocked outright even if the leading command (or leading line) matches an allow pattern — a prefix match on 'pa knowledge search foo && rm -rf ~' must not slip through, nor must 'pa knowledge search foo\\nsudo apt-get purge -y openssh-server' or a redirect like 'echo foo > ~/.ssh/authorized_keys'. False positives (e.g. a quoted '&&' inside a search string) are an accepted cost; the hook always suggests a dispatch alternative.",
|
|
96
|
+
"pathPatterns": [
|
|
97
|
+
"\\.vault/",
|
|
98
|
+
"secrets\\.enc\\.json$",
|
|
99
|
+
"\\.ssh/",
|
|
100
|
+
"\\.aws/",
|
|
101
|
+
"(^|/)\\.env$"
|
|
102
|
+
]
|
|
103
|
+
},
|
|
104
|
+
|
|
105
|
+
"messages": {
|
|
106
|
+
"Bash": "Bash command not on the coordinator allowlist.",
|
|
107
|
+
"Read": "Read path not on the coordinator allowlist.",
|
|
108
|
+
"Write": "Write path not on the coordinator allowlist — any durable file change goes through a dispatch.",
|
|
109
|
+
"Edit": "Dispatch tool-developer or writer for any durable file change — main thread is coordinator-mode.",
|
|
110
|
+
"NotebookEdit": "Dispatch tool-developer or writer for any durable file change — main thread is coordinator-mode.",
|
|
111
|
+
"Grep": "Dispatch Explore for search — main thread is coordinator-mode.",
|
|
112
|
+
"Glob": "Dispatch Explore for file discovery — main thread is coordinator-mode.",
|
|
113
|
+
"WebFetch": "Dispatch `/research` (or a worker) for web work — main thread is coordinator-mode.",
|
|
114
|
+
"WebSearch": "Dispatch `/research` (or a worker) for web work — main thread is coordinator-mode.",
|
|
115
|
+
"operator/knowledge/**": "Use `pa knowledge` (related/search/domain/orphans/path) retrieval verbs — a direct Read bypasses the knowledge graph.",
|
|
116
|
+
"hardDeny": "This command/path matches a hard-deny pattern that no allowlist or overlay can override."
|
|
117
|
+
}
|
|
118
|
+
}
|