@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,164 @@
|
|
|
1
|
+
# @stravica-ai/engineering-pa-scaffold
|
|
2
|
+
|
|
3
|
+
Identity: `@stravica-ai/engineering-pa-scaffold` — `pa-init` scaffolder + onboarding flows.
|
|
4
|
+
|
|
5
|
+
## Status
|
|
6
|
+
|
|
7
|
+
| Mode | Status | Lands in |
|
|
8
|
+
|---|---|---|
|
|
9
|
+
| `--mode=solo` | **implemented** | Phase 1 Task 5 |
|
|
10
|
+
| `--mode=lead` | not implemented | Phase 3 |
|
|
11
|
+
| `--mode=member` | not implemented | Phase 5 |
|
|
12
|
+
|
|
13
|
+
Workspace-internal: `"private": true`, not individually published. The
|
|
14
|
+
operator-facing surface ships via the public `@stravica-ai/digital-operator-pa`
|
|
15
|
+
package; `pa-init` is exposed as one of its bin entries.
|
|
16
|
+
|
|
17
|
+
## Install / invoke
|
|
18
|
+
|
|
19
|
+
The bin is `pa-init`. After installing `@stravica-ai/digital-operator-pa` into an
|
|
20
|
+
empty staging directory (or invoking via `pnpm exec`), run:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
pa-init --mode=solo --name=dave --operator=Baz --target=./dave-instance
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Or interactively, with three prompts:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
pa-init --mode=solo
|
|
30
|
+
# Operator name (the human this PA serves, e.g. 'Baz'): Baz
|
|
31
|
+
# PA name (kebab-case identity, e.g. 'dave'): dave
|
|
32
|
+
# Target directory [/current/cwd]: /home/baz/dave
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Commands
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
pa-init --help # usage; exits 0
|
|
39
|
+
pa-init --mode=solo # interactive solo onboarding
|
|
40
|
+
pa-init --mode=solo --name=NAME --operator=OP --target=DIR
|
|
41
|
+
# flag-driven solo onboarding
|
|
42
|
+
pa-init --mode=solo --non-interactive --name=... --operator=... --target=...
|
|
43
|
+
# CI mode; refuses to prompt
|
|
44
|
+
pa-init --mode=lead # exits 2 ("not implemented in Phase 1")
|
|
45
|
+
pa-init --mode=member --invite=T # exits 2 ("not implemented in Phase 1")
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### Flags
|
|
49
|
+
|
|
50
|
+
| Flag | Purpose |
|
|
51
|
+
|---|---|
|
|
52
|
+
| `--mode=MODE` | `solo` \| `lead` \| `member` (only `solo` ships in Phase 1) |
|
|
53
|
+
| `--name=PA_NAME` | PA identity. Kebab-case, lowercase, 2-40 chars, starts with a letter. |
|
|
54
|
+
| `--operator=NAME` | Operator (human) name. Free-form, 1-80 chars. |
|
|
55
|
+
| `--target=DIR` | Target directory. Must be empty or not exist. |
|
|
56
|
+
| `--purpose=TEXT` | Optional one-line PA purpose statement. Has a sane default. |
|
|
57
|
+
| `--non-interactive` | Refuse to prompt. Requires all values via flags. CI-friendly. |
|
|
58
|
+
| `--skip-install` | Skip the post-scaffold `pnpm install` + `pa status` check (test-friendly). |
|
|
59
|
+
| `-h`, `--help` | Show usage, exit 0. |
|
|
60
|
+
|
|
61
|
+
## Exit codes (tooling standard §6)
|
|
62
|
+
|
|
63
|
+
| Code | Meaning |
|
|
64
|
+
|---|---|
|
|
65
|
+
| 0 | OK |
|
|
66
|
+
| 1 | Usage error — invalid flags, missing required values in non-interactive mode, invalid PA name, non-empty target. |
|
|
67
|
+
| 2 | Operational failure — `pnpm install` or `pa status` exited non-zero. |
|
|
68
|
+
| 3 | Transport / IO failure — couldn't spawn a subprocess. |
|
|
69
|
+
|
|
70
|
+
## What `--mode=solo` generates
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
{target}/
|
|
74
|
+
├── CLAUDE.md # PA identity, rendered from the bundled template
|
|
75
|
+
├── README.md # operator-repo orientation
|
|
76
|
+
├── package.json # depends on @stravica-ai/digital-operator-pa
|
|
77
|
+
├── .gitignore # node, .session, .vault keys, *.pid, runs.jsonl
|
|
78
|
+
├── .nvmrc # 24
|
|
79
|
+
├── .git/ # initialised so desk's .git-walk works
|
|
80
|
+
├── operator/
|
|
81
|
+
│ ├── profile/profile.md # placeholder; PA leads intake to fill
|
|
82
|
+
│ ├── knowledge/
|
|
83
|
+
│ │ ├── domains.json # base 5 domains per methodology
|
|
84
|
+
│ │ └── index.json # empty
|
|
85
|
+
│ └── extensions/
|
|
86
|
+
│ ├── manifest.json # empty (extensions land in Phase 2)
|
|
87
|
+
│ ├── roles/, tools/, workspace/ # empty, .gitkeep'd
|
|
88
|
+
├── agents/{paName}/
|
|
89
|
+
│ ├── CLAUDE.md # same as root CLAUDE.md (PA identity)
|
|
90
|
+
│ ├── journal.md # empty stub
|
|
91
|
+
│ ├── next-session.md # empty stub
|
|
92
|
+
│ ├── spawn-log.json # {"version":"1.0", "spawns":[]}
|
|
93
|
+
│ └── staging/ # empty, .gitkeep'd
|
|
94
|
+
├── work/ # empty, .gitkeep'd
|
|
95
|
+
├── projects/ # empty, .gitkeep'd
|
|
96
|
+
├── schedules/ # empty, .gitkeep'd
|
|
97
|
+
└── .vault/ # empty, .gitkeep'd
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### Base knowledge domains
|
|
101
|
+
|
|
102
|
+
Seeded into `operator/knowledge/domains.json` per the knowledge-system
|
|
103
|
+
methodology (5 core engineering-PA domains):
|
|
104
|
+
|
|
105
|
+
- `engineering` — the discipline
|
|
106
|
+
- `ops` — operational rules and process
|
|
107
|
+
- `agent-ops` — agentic team management
|
|
108
|
+
- `knowledge-meta` — the librarian and methodology
|
|
109
|
+
- `operator-profile` — who the operator is
|
|
110
|
+
|
|
111
|
+
Operators extend per-deployment (finance, sales, legal, etc.); the scaffolder
|
|
112
|
+
ships only the core set.
|
|
113
|
+
|
|
114
|
+
## Project layout
|
|
115
|
+
|
|
116
|
+
```
|
|
117
|
+
packages/scaffold/
|
|
118
|
+
bin/pa-init # node shebang shim — imports src/cli.mjs
|
|
119
|
+
index.mjs # package entry — re-exports public surface
|
|
120
|
+
package.json # name, version, bin: pa-init
|
|
121
|
+
README.md # this file (the spec)
|
|
122
|
+
src/
|
|
123
|
+
cli.mjs # arg parsing, verb routing, exit-code translation
|
|
124
|
+
prompts.mjs # interactive prompts + validators (readline seam)
|
|
125
|
+
generator.mjs # PURE: plan-of-files given a config
|
|
126
|
+
runner.mjs # CHOKEPOINT: writes files, spawns pnpm/pa/git
|
|
127
|
+
commands/
|
|
128
|
+
init.mjs # --mode=solo orchestration
|
|
129
|
+
templates/
|
|
130
|
+
CLAUDE.md.template # PA identity template, {PA_NAME}/{OPERATOR_NAME}/{PURPOSE}/{COMMUNICATION_STYLE} tokens
|
|
131
|
+
operator-README.md.template# operator-repo README template
|
|
132
|
+
test/
|
|
133
|
+
index.test.mjs # package surface
|
|
134
|
+
cli.test.mjs # bin-via-child-process tests (parsing + exit codes + happy path)
|
|
135
|
+
prompts.test.mjs # validator + promptValues seam tests
|
|
136
|
+
generator.test.mjs # pure plan-composition tests
|
|
137
|
+
runner.test.mjs # chokepoint tests with fake-spawn seam
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Chokepoint pattern (tooling standard §7)
|
|
141
|
+
|
|
142
|
+
Every external effect is in `src/runner.mjs`:
|
|
143
|
+
|
|
144
|
+
- `writePlan(targetDir, plan)` — sole filesystem-write surface
|
|
145
|
+
- `runProcess({ cmd, args, cwd, seam })` — sole `child_process.spawn` surface
|
|
146
|
+
- `installDeps`, `paStatus`, `initGitRepo` — thin wrappers around `runProcess`
|
|
147
|
+
|
|
148
|
+
Nothing else in the scaffolder reaches the disk or the OS. Tests inject a
|
|
149
|
+
fake `seam.spawn` to verify framing without executing real subprocesses.
|
|
150
|
+
|
|
151
|
+
## Tests
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
pnpm --filter @stravica-ai/engineering-pa-scaffold test
|
|
155
|
+
# or, from the package directory:
|
|
156
|
+
node --test 'test/**/*.test.mjs'
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
## The tooling standard
|
|
160
|
+
|
|
161
|
+
This tool complies with [the tooling standard](../../CONTRIBUTING.md#standards)
|
|
162
|
+
in full: JS only, zero npm runtime deps, `node:test`, `node:util.parseArgs`
|
|
163
|
+
with `strict: true`, camelCase JSON, chokepoint pattern for external effects,
|
|
164
|
+
README-as-contract, four-exit-code contract.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// @stravica-ai/engineering-pa-scaffold — pa-init scaffolder + onboarding flows.
|
|
2
|
+
//
|
|
3
|
+
// Phase 1 Task 5 lands the real --mode=solo flow. --mode=lead and
|
|
4
|
+
// --mode=member follow in Phase 3/5.
|
|
5
|
+
|
|
6
|
+
import { dirname, resolve } from 'node:path';
|
|
7
|
+
import { fileURLToPath } from 'node:url';
|
|
8
|
+
|
|
9
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
10
|
+
|
|
11
|
+
export const name = './';
|
|
12
|
+
export const version = '0.1.1';
|
|
13
|
+
export const modes = ['solo', 'lead', 'member'];
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Absolute path to the bundled CLAUDE.md template. The scaffolder reads
|
|
17
|
+
* this file, substitutes `{PA_NAME}` / `{OPERATOR_NAME}` / `{PURPOSE}` /
|
|
18
|
+
* `{COMMUNICATION_STYLE}` placeholders, and writes the result to the
|
|
19
|
+
* operator repo's `CLAUDE.md` and `agents/{paName}/CLAUDE.md`.
|
|
20
|
+
*/
|
|
21
|
+
export const CLAUDE_MD_TEMPLATE = resolve(__dirname, 'templates', 'CLAUDE.md.template');
|
|
22
|
+
|
|
23
|
+
/** Absolute path to the operator-repo README template. */
|
|
24
|
+
export const OPERATOR_README_TEMPLATE = resolve(
|
|
25
|
+
__dirname,
|
|
26
|
+
'templates',
|
|
27
|
+
'operator-README.md.template',
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
export { main } from './src/cli.mjs';
|
|
31
|
+
export { runInit } from './src/commands/init.mjs';
|
|
32
|
+
export {
|
|
33
|
+
buildPlan,
|
|
34
|
+
buildPlanFromTemplates,
|
|
35
|
+
buildRenderConfig,
|
|
36
|
+
BASE_DOMAINS,
|
|
37
|
+
} from './src/generator.mjs';
|
|
38
|
+
export {
|
|
39
|
+
validateOperatorName,
|
|
40
|
+
validatePaName,
|
|
41
|
+
validateTargetPath,
|
|
42
|
+
} from './src/prompts.mjs';
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@stravica-ai/engineering-pa-scaffold",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "pa-init scaffolder + onboarding flows (solo, lead, member).",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./index.mjs",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": "./index.mjs"
|
|
9
|
+
},
|
|
10
|
+
"bin": {
|
|
11
|
+
"pa-init": "bin/pa-init"
|
|
12
|
+
},
|
|
13
|
+
"private": true,
|
|
14
|
+
"license": "MIT",
|
|
15
|
+
"engines": {
|
|
16
|
+
"node": ">=24"
|
|
17
|
+
},
|
|
18
|
+
"scripts": {
|
|
19
|
+
"test": "node --test --test-isolation=none 'test/**/*.test.mjs'"
|
|
20
|
+
},
|
|
21
|
+
"//": "test pins --test-isolation=none: default process-isolation mode silently undercounts (drops passed tests from totals) when a test awaits async work while stdout is patched by a capture() helper — see packages/cli/test/secrets. Counts must never lie."
|
|
22
|
+
}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
// pa-init — onboarding scaffolder.
|
|
2
|
+
//
|
|
3
|
+
// Verb routing + arg parsing + exit-code translation. Domain code lives in
|
|
4
|
+
// `commands/`, prompts in `prompts.mjs`, file generation in `generator.mjs`,
|
|
5
|
+
// and the spawn/IO chokepoint in `runner.mjs`. cli.mjs is the only module
|
|
6
|
+
// that knows about `process.exit`.
|
|
7
|
+
//
|
|
8
|
+
// Exit codes (tooling standard §6):
|
|
9
|
+
// 0 ok
|
|
10
|
+
// 1 usage error
|
|
11
|
+
// 2 logical / operational failure
|
|
12
|
+
// 3 transport / IO failure
|
|
13
|
+
|
|
14
|
+
import { parseArgs } from 'node:util';
|
|
15
|
+
|
|
16
|
+
import { runInit } from './commands/init.mjs';
|
|
17
|
+
|
|
18
|
+
const USAGE = `pa-init — scaffold a new personal-assistant operator repo
|
|
19
|
+
|
|
20
|
+
Usage:
|
|
21
|
+
pa-init --mode=solo [--name=PA_NAME] [--target=DIR] [--non-interactive] [--operator=NAME] [--purpose=TEXT]
|
|
22
|
+
pa-init --help
|
|
23
|
+
|
|
24
|
+
Modes:
|
|
25
|
+
solo Single-operator instance, no team library (Phase 1)
|
|
26
|
+
lead Team-lead instance with team library (Phase 5 — not yet implemented)
|
|
27
|
+
member --invite=TOKEN Join an existing team library (Phase 5 — not yet implemented)
|
|
28
|
+
|
|
29
|
+
Common flags:
|
|
30
|
+
--name=PA_NAME PA identity (kebab-case, lowercase, no spaces). Prompted if absent.
|
|
31
|
+
--target=DIR Target directory. Prompted if absent. Must be empty or not exist.
|
|
32
|
+
--operator=NAME Operator (human) name. Prompted if absent.
|
|
33
|
+
--purpose=TEXT One-line PA purpose statement. Defaults to a generic line.
|
|
34
|
+
--non-interactive Refuse to prompt; require all values via flags. CI-friendly.
|
|
35
|
+
--skip-install Skip post-scaffold pnpm install + pa status (for testing).
|
|
36
|
+
-h, --help Show this help.
|
|
37
|
+
|
|
38
|
+
Exit codes:
|
|
39
|
+
0 ok | 1 usage error | 2 operational failure | 3 transport/IO failure
|
|
40
|
+
`;
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Entry point invoked by bin/pa-init. Returns nothing — exits the process
|
|
44
|
+
* directly with the resolved code. Throws are translated to exit code 3
|
|
45
|
+
* (transport/IO) if they carry no `exitCode`; otherwise to the carried code.
|
|
46
|
+
*/
|
|
47
|
+
export async function main(argv) {
|
|
48
|
+
let parsed;
|
|
49
|
+
try {
|
|
50
|
+
parsed = parseArgs({
|
|
51
|
+
args: argv,
|
|
52
|
+
options: {
|
|
53
|
+
help: { type: 'boolean', short: 'h' },
|
|
54
|
+
mode: { type: 'string' },
|
|
55
|
+
name: { type: 'string' },
|
|
56
|
+
target: { type: 'string' },
|
|
57
|
+
operator: { type: 'string' },
|
|
58
|
+
purpose: { type: 'string' },
|
|
59
|
+
invite: { type: 'string' },
|
|
60
|
+
'non-interactive': { type: 'boolean' },
|
|
61
|
+
'skip-install': { type: 'boolean' },
|
|
62
|
+
},
|
|
63
|
+
strict: true,
|
|
64
|
+
allowPositionals: false,
|
|
65
|
+
});
|
|
66
|
+
} catch (err) {
|
|
67
|
+
process.stderr.write(`pa-init: ${err.message}\n`);
|
|
68
|
+
process.stderr.write(USAGE);
|
|
69
|
+
return exitWith(1);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if (parsed.values.help) {
|
|
73
|
+
process.stdout.write(USAGE);
|
|
74
|
+
return exitWith(0);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const mode = parsed.values.mode;
|
|
78
|
+
if (!mode) {
|
|
79
|
+
process.stderr.write('pa-init: --mode is required (solo | lead | member)\n');
|
|
80
|
+
process.stderr.write(USAGE);
|
|
81
|
+
return exitWith(1);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
if (mode === 'lead' || mode === 'member') {
|
|
85
|
+
process.stderr.write(
|
|
86
|
+
`pa-init: --mode=${mode} is not implemented in Phase 1 (lands in Phase 3/5)\n`,
|
|
87
|
+
);
|
|
88
|
+
return exitWith(2);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
if (mode !== 'solo') {
|
|
92
|
+
process.stderr.write(`pa-init: unknown mode '${mode}' (expected solo | lead | member)\n`);
|
|
93
|
+
process.stderr.write(USAGE);
|
|
94
|
+
return exitWith(1);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
try {
|
|
98
|
+
const code = await runInit({
|
|
99
|
+
paName: parsed.values.name,
|
|
100
|
+
targetDir: parsed.values.target,
|
|
101
|
+
operatorName: parsed.values.operator,
|
|
102
|
+
purpose: parsed.values.purpose,
|
|
103
|
+
nonInteractive: parsed.values['non-interactive'] === true,
|
|
104
|
+
skipInstall: parsed.values['skip-install'] === true,
|
|
105
|
+
});
|
|
106
|
+
return exitWith(code ?? 0);
|
|
107
|
+
} catch (err) {
|
|
108
|
+
process.stderr.write(`pa-init: ${err.message || err}\n`);
|
|
109
|
+
return exitWith(err && typeof err.exitCode === 'number' ? err.exitCode : 3);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
function exitWith(code) {
|
|
114
|
+
process.exit(code);
|
|
115
|
+
}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
// init.mjs — `pa-init --mode=solo` orchestration.
|
|
2
|
+
//
|
|
3
|
+
// Flow:
|
|
4
|
+
// 1. Gather config: prompts (interactive) or flag-only (non-interactive).
|
|
5
|
+
// 2. Build the plan (pure generator).
|
|
6
|
+
// 3. Pre-flight: target dir empty / missing.
|
|
7
|
+
// 4. Write the plan to disk.
|
|
8
|
+
// 5. Init git (so desk's .git-walk finds the operator repo root).
|
|
9
|
+
// 6. (Optional) Install dependencies + run `pa status` to verify boot.
|
|
10
|
+
//
|
|
11
|
+
// Errors carry an `exitCode`. The CLI translates to `process.exit`.
|
|
12
|
+
|
|
13
|
+
import { resolve } from 'node:path';
|
|
14
|
+
|
|
15
|
+
import { buildPlan, buildRenderConfig } from '../generator.mjs';
|
|
16
|
+
import {
|
|
17
|
+
defaultSeam,
|
|
18
|
+
promptValues,
|
|
19
|
+
validateOperatorName,
|
|
20
|
+
validatePaName,
|
|
21
|
+
validateTargetPath,
|
|
22
|
+
} from '../prompts.mjs';
|
|
23
|
+
import {
|
|
24
|
+
assertTargetIsEmptyOrMissing,
|
|
25
|
+
initGitRepo,
|
|
26
|
+
installDeps,
|
|
27
|
+
paStatus,
|
|
28
|
+
writePlan,
|
|
29
|
+
} from '../runner.mjs';
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Entry point for `--mode=solo`. Returns an exit code.
|
|
33
|
+
*/
|
|
34
|
+
export async function runInit(options) {
|
|
35
|
+
const config = await gatherConfig(options);
|
|
36
|
+
|
|
37
|
+
process.stdout.write(`\npa-init: scaffolding ${config.paName} for ${config.operatorName}\n`);
|
|
38
|
+
process.stdout.write(` target: ${config.targetDir}\n`);
|
|
39
|
+
|
|
40
|
+
await assertTargetIsEmptyOrMissing(config.targetDir);
|
|
41
|
+
|
|
42
|
+
const plan = await buildPlan(config);
|
|
43
|
+
await writePlan(config.targetDir, plan);
|
|
44
|
+
process.stdout.write(` wrote ${countEntries(plan)} entries\n`);
|
|
45
|
+
|
|
46
|
+
const gitCode = await initGitRepo({ targetDir: config.targetDir });
|
|
47
|
+
if (gitCode !== 0) {
|
|
48
|
+
process.stderr.write(`pa-init: git init exited with ${gitCode}\n`);
|
|
49
|
+
return 2;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
if (options.skipInstall) {
|
|
53
|
+
process.stdout.write(' skip-install set — leaving install + pa status to caller\n');
|
|
54
|
+
process.stdout.write('\npa-init: done.\n');
|
|
55
|
+
writeNextStepMessage(config);
|
|
56
|
+
return 0;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
process.stdout.write('\npa-init: running pnpm install …\n');
|
|
60
|
+
const installCode = await installDeps({ targetDir: config.targetDir });
|
|
61
|
+
if (installCode !== 0) {
|
|
62
|
+
process.stderr.write(`pa-init: pnpm install exited with ${installCode}\n`);
|
|
63
|
+
return 2;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
process.stdout.write('\npa-init: running pa status …\n');
|
|
67
|
+
const statusCode = await paStatus({ targetDir: config.targetDir });
|
|
68
|
+
if (statusCode !== 0) {
|
|
69
|
+
process.stderr.write(`pa-init: pa status exited with ${statusCode}\n`);
|
|
70
|
+
return 2;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
process.stdout.write('\npa-init: done.\n');
|
|
74
|
+
writeNextStepMessage(config);
|
|
75
|
+
return 0;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Emit the "next step" guidance after a successful pa-init. Points the
|
|
80
|
+
* operator at `pa session` — the standard entry point for booting their
|
|
81
|
+
* PA — and offers an optional shell alias keyed off the PA name they
|
|
82
|
+
* just scaffolded.
|
|
83
|
+
*/
|
|
84
|
+
function writeNextStepMessage(config) {
|
|
85
|
+
const { paName, targetDir } = config;
|
|
86
|
+
const lines = [
|
|
87
|
+
'',
|
|
88
|
+
'Next step — start your PA:',
|
|
89
|
+
'',
|
|
90
|
+
` cd ${targetDir}`,
|
|
91
|
+
' pa session',
|
|
92
|
+
'',
|
|
93
|
+
'Optional: add a shell alias for muscle memory. Add this to ~/.zshrc or ~/.bashrc:',
|
|
94
|
+
'',
|
|
95
|
+
` alias ${paName}='pa session'`,
|
|
96
|
+
'',
|
|
97
|
+
`After reloading your shell, just type \`${paName}\` to start a session.`,
|
|
98
|
+
'',
|
|
99
|
+
];
|
|
100
|
+
process.stdout.write(lines.join('\n'));
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
async function gatherConfig(options) {
|
|
104
|
+
const targetDirDefault = resolve(process.cwd());
|
|
105
|
+
const supplied = {
|
|
106
|
+
paName: options.paName || null,
|
|
107
|
+
operatorName: options.operatorName || null,
|
|
108
|
+
targetDir: options.targetDir || null,
|
|
109
|
+
targetDirDefault,
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
let resolvedValues;
|
|
113
|
+
if (options.nonInteractive) {
|
|
114
|
+
const missing = [];
|
|
115
|
+
if (!supplied.paName) missing.push('--name');
|
|
116
|
+
if (!supplied.operatorName) missing.push('--operator');
|
|
117
|
+
if (!supplied.targetDir) missing.push('--target');
|
|
118
|
+
if (missing.length > 0) {
|
|
119
|
+
const e = new Error(
|
|
120
|
+
`non-interactive mode requires all values via flags; missing: ${missing.join(', ')}`,
|
|
121
|
+
);
|
|
122
|
+
e.exitCode = 1;
|
|
123
|
+
throw e;
|
|
124
|
+
}
|
|
125
|
+
resolvedValues = applyValidatorsOrThrow({
|
|
126
|
+
paName: supplied.paName,
|
|
127
|
+
operatorName: supplied.operatorName,
|
|
128
|
+
targetDir: supplied.targetDir,
|
|
129
|
+
});
|
|
130
|
+
} else {
|
|
131
|
+
const seam = defaultSeam();
|
|
132
|
+
try {
|
|
133
|
+
resolvedValues = await promptValues(seam, supplied);
|
|
134
|
+
} finally {
|
|
135
|
+
seam.close();
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
return buildRenderConfig({
|
|
140
|
+
paName: resolvedValues.paName,
|
|
141
|
+
operatorName: resolvedValues.operatorName,
|
|
142
|
+
targetDir: resolvedValues.targetDir,
|
|
143
|
+
purpose: options.purpose,
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
function applyValidatorsOrThrow(supplied) {
|
|
148
|
+
const checks = [
|
|
149
|
+
['name', supplied.paName, validatePaName],
|
|
150
|
+
['operator', supplied.operatorName, validateOperatorName],
|
|
151
|
+
['target', supplied.targetDir, validateTargetPath],
|
|
152
|
+
];
|
|
153
|
+
const out = {};
|
|
154
|
+
const keys = { name: 'paName', operator: 'operatorName', target: 'targetDir' };
|
|
155
|
+
for (const [flag, value, validator] of checks) {
|
|
156
|
+
const result = validator(value);
|
|
157
|
+
if (!result.ok) {
|
|
158
|
+
const e = new Error(`invalid --${flag}: ${result.reason}`);
|
|
159
|
+
e.exitCode = 1;
|
|
160
|
+
throw e;
|
|
161
|
+
}
|
|
162
|
+
out[keys[flag]] = result.value;
|
|
163
|
+
}
|
|
164
|
+
return out;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
function countEntries(plan) {
|
|
168
|
+
return plan.length;
|
|
169
|
+
}
|