@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,93 @@
|
|
|
1
|
+
# Entity-Location Map
|
|
2
|
+
|
|
3
|
+
Canonical paths for everything a PA refers to. Paths under "Operator space", "PA run folder", "Work and projects", and "Session" are **relative to the operator repo root** — never hard-code the absolute value. Paths under "Platform package" are inside the installed `@stravica-ai/digital-operator-pa` package and accessed via `node` import resolution rather than absolute paths in the operator repo. See [working-directory.md](./working-directory.md).
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
## Operator space
|
|
7
|
+
|
|
8
|
+
| What | Where |
|
|
9
|
+
|---|---|
|
|
10
|
+
| Operator profile | `operator/profile/operator.json` |
|
|
11
|
+
| Operator knowledge | `operator/knowledge/` |
|
|
12
|
+
| Domain catalogue | `operator/knowledge/domains.json` |
|
|
13
|
+
| Operator notes | `operator/notes/` |
|
|
14
|
+
| Config / preferences | `operator/config/preferences.json` |
|
|
15
|
+
| PA memory (canonical) | `operator/memory/` |
|
|
16
|
+
| Operator extensions (roles) | `operator/extensions/roles/` |
|
|
17
|
+
| Operator extensions (tools) | `operator/extensions/tools/` |
|
|
18
|
+
| Operator extensions (blueprints) | `operator/extensions/blueprints/` |
|
|
19
|
+
| Operator extensions (workspace) | `operator/extensions/workspace/` |
|
|
20
|
+
| Extension manifest | `operator/extensions/manifest.json` |
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
## PA run folder
|
|
24
|
+
|
|
25
|
+
| What | Where |
|
|
26
|
+
|---|---|
|
|
27
|
+
| PA run folder | `agents/<paName>/` |
|
|
28
|
+
| PA staging | `agents/<paName>/staging/` |
|
|
29
|
+
| PA journal | `agents/<paName>/journal.md` |
|
|
30
|
+
| PA spawn log | `agents/<paName>/spawn-log.json` |
|
|
31
|
+
| PA learned rules | `agents/<paName>/learned-rules.md` — where the estate keeps one; never created when absent (rules are then synthesised into the operator's structured knowledge docs) |
|
|
32
|
+
| Next-session notes | `agents/<paName>/next-session.md` |
|
|
33
|
+
| Handover artefacts | `agents/<paName>/handover/<ts>.json` |
|
|
34
|
+
| PA memory (local cache) | `~/.claude/projects/<sanitised-project-path>/memory/` |
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
## Work and projects
|
|
38
|
+
|
|
39
|
+
| What | Where |
|
|
40
|
+
|---|---|
|
|
41
|
+
| Work items | `work/w-YYYY-MM-DD-NNN.json` |
|
|
42
|
+
| Projects | `projects/<id>/project.json` |
|
|
43
|
+
| Project progress trackers | `projects/<id>/progress.md` |
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
## Platform package
|
|
47
|
+
|
|
48
|
+
In v2 the platform code lives in `node_modules/@stravica-ai/digital-operator-pa/` (and its workspace-internal packages). Operator code addresses platform resources by package import path, never by an in-repo path.
|
|
49
|
+
|
|
50
|
+
**Resolving symbolic `@stravica-ai/engineering-pa-*` paths.** Platform docs (and the shipped CLAUDE.md template) reference bundled assets by symbolic package path, e.g. `@stravica-ai/engineering-pa-core/docs/…`. The internal packages are `private: true` and are never installed under their own names — the symbolic path resolves inside the wrapper's bundle:
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
@stravica-ai/engineering-pa-<pkg>/<subpath>
|
|
54
|
+
→ node_modules/@stravica-ai/digital-operator-pa/dist/engineering-pa-<pkg>/<subpath>
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
| What | Resolved via |
|
|
58
|
+
|---|---|
|
|
59
|
+
| Core docs | bundled in `@stravica-ai/engineering-pa-core/docs/` |
|
|
60
|
+
| Core knowledge (bucket scaffolds) | bundled in `@stravica-ai/engineering-pa-core/knowledge/` |
|
|
61
|
+
| Desk CLI | `node_modules/.bin/desk` |
|
|
62
|
+
| Distill CLI | `node_modules/.bin/distill` |
|
|
63
|
+
| Memory-sync CLI | `node_modules/.bin/memory-sync` |
|
|
64
|
+
| Secrets CLI | `node_modules/.bin/secrets` |
|
|
65
|
+
| Sync CLI | `node_modules/.bin/sync` |
|
|
66
|
+
| Scheduler CLI | `node_modules/.bin/scheduler` |
|
|
67
|
+
| PA CLI | `node_modules/.bin/pa` |
|
|
68
|
+
| pa-init scaffolder | `node_modules/.bin/pa-init` |
|
|
69
|
+
| Research CLI | `node_modules/.bin/research` |
|
|
70
|
+
| Knowledge retrieval libs | `import('@stravica-ai/engineering-pa-core/src/knowledge/retrieval/*.mjs')` |
|
|
71
|
+
| Role definitions | bundled in `@stravica-ai/engineering-pa-core/roles/<role>/definition.md` |
|
|
72
|
+
| Standards docs | bundled in `@stravica-ai/engineering-pa-core/docs/standards/` |
|
|
73
|
+
| Schemas | bundled in `@stravica-ai/engineering-pa-core/schema/` |
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
## Operational artefacts (gitignored)
|
|
77
|
+
|
|
78
|
+
Per the tooling standard §16, per-host operational files must be in `.gitignore` and never committed:
|
|
79
|
+
|
|
80
|
+
| What | Where |
|
|
81
|
+
|---|---|
|
|
82
|
+
| Vault | `.vault/` (encrypted; key handled by secrets CLI) |
|
|
83
|
+
| Schedule definitions | `schedules/<id>.json` |
|
|
84
|
+
| Distill run logs | `.cache/distill/logs/` |
|
|
85
|
+
| Sync state | `.cache/estate-sync/` |
|
|
86
|
+
| Research sessions | `.cache/research/sessions/<sessionId>/` |
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
## Session
|
|
90
|
+
|
|
91
|
+
| What | Where |
|
|
92
|
+
|---|---|
|
|
93
|
+
| Session environment | `.session/environment.json` |
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# Knowledge System
|
|
2
|
+
|
|
3
|
+
Dave's knowledge system provides structured, queryable storage for everything your PA learns. It is domain-based, supports linking between documents, and maintains indexes for fast retrieval.
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
## How it works
|
|
7
|
+
|
|
8
|
+
Knowledge is organised into domains -- logical groupings of related information. Each domain is a directory under `operator/knowledge/` containing markdown files. The domain registry at `operator/knowledge/domains.json` (seeded from `core/knowledge/scaffold/domains.json`) tracks all active domains.
|
|
9
|
+
|
|
10
|
+
### Domain structure
|
|
11
|
+
|
|
12
|
+
A domain directory contains:
|
|
13
|
+
- Markdown files (`.md`) -- the actual knowledge content
|
|
14
|
+
- An optional `index.json` -- domain-specific metadata and file listing
|
|
15
|
+
- Subdirectories for sub-topics as needed
|
|
16
|
+
|
|
17
|
+
### Example
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
operator/knowledge/
|
|
21
|
+
cooking/
|
|
22
|
+
index.json
|
|
23
|
+
basics.md
|
|
24
|
+
recipes.md
|
|
25
|
+
techniques/
|
|
26
|
+
fermentation.md
|
|
27
|
+
finance/
|
|
28
|
+
index.json
|
|
29
|
+
budgeting.md
|
|
30
|
+
investments.md
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Each domain entry in `domains.json` looks like:
|
|
34
|
+
|
|
35
|
+
```json
|
|
36
|
+
{
|
|
37
|
+
"id": "cooking",
|
|
38
|
+
"name": "Cooking",
|
|
39
|
+
"path": "operator/knowledge/cooking",
|
|
40
|
+
"description": "Recipes, techniques, and culinary knowledge",
|
|
41
|
+
"fileCount": 3,
|
|
42
|
+
"lastUpdated": "2026-04-12T10:00:00Z"
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
## Linking conventions
|
|
48
|
+
|
|
49
|
+
Dave supports two linking formats for connecting knowledge across documents:
|
|
50
|
+
|
|
51
|
+
### Wiki-links
|
|
52
|
+
|
|
53
|
+
Use double-bracket syntax to link to other documents:
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
See [[fermentation]] for details on lacto-fermentation.
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Wiki-links are resolved by searching for a file matching the target name (case-insensitive) across all knowledge domains. If multiple matches exist, the link resolves to the most recently updated one.
|
|
60
|
+
|
|
61
|
+
### Standard markdown links
|
|
62
|
+
|
|
63
|
+
Use standard markdown links for explicit paths:
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
See [fermentation](techniques/fermentation.md) for details.
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
## Backlink indexing
|
|
71
|
+
|
|
72
|
+
The retrieval system maintains a backlink index -- for every document, it knows which other documents link to it. This enables:
|
|
73
|
+
- "What references this topic?" queries
|
|
74
|
+
- Adjacency graph traversal
|
|
75
|
+
- Orphan detection (documents with no inbound or outbound links)
|
|
76
|
+
|
|
77
|
+
The backlink index is rebuilt during knowledge reindexing (`npm run reindex`).
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
## Adjacency graph
|
|
81
|
+
|
|
82
|
+
The retrieval system builds a graph of document relationships based on links. This graph supports:
|
|
83
|
+
- Finding related documents (neighbours in the graph)
|
|
84
|
+
- Shortest-path queries between topics
|
|
85
|
+
- Cluster detection (groups of tightly linked documents)
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
## Querying knowledge
|
|
89
|
+
|
|
90
|
+
The retrieval tools at `core/knowledge/retrieval/` provide:
|
|
91
|
+
|
|
92
|
+
- **index-builder.mjs** -- Rebuilds all indexes (domain registry, backlinks, adjacency graph)
|
|
93
|
+
- **search.mjs** -- Full-text search across all knowledge
|
|
94
|
+
- **graph.mjs** -- Graph queries (neighbours, paths, clusters)
|
|
95
|
+
|
|
96
|
+
Your PA uses these tools automatically when answering questions. You can also trigger a manual reindex:
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
npm run reindex
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
## Adding new knowledge
|
|
104
|
+
|
|
105
|
+
1. Create a domain directory under `operator/knowledge/` if it does not exist.
|
|
106
|
+
2. Add markdown files with your content.
|
|
107
|
+
3. Use wiki-links or markdown links to connect related documents.
|
|
108
|
+
4. Run `npm run reindex` to update indexes, or let the PA handle it during normal operation.
|
|
109
|
+
|
|
110
|
+
The PA's librarian role can also be delegated to organise and structure knowledge from raw observations.
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
## How knowledge flows
|
|
114
|
+
|
|
115
|
+
1. **Observation** -- Your PA notices something relevant during a conversation and stages it as a timestamped markdown file.
|
|
116
|
+
2. **Staging** -- Staged observations accumulate in the PA's staging directory.
|
|
117
|
+
3. **Distillation** -- The librarian role processes staged observations, extracting durable knowledge and updating the operator profile.
|
|
118
|
+
4. **Knowledge** -- Distilled content is filed into the appropriate domain under `operator/knowledge/`.
|
|
119
|
+
5. **Indexing** -- The retrieval system rebuilds indexes to include the new content.
|
|
120
|
+
|
|
121
|
+
This cycle runs continuously. Every interaction is a potential source of new knowledge.
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
# lock — shared per-resource process lock
|
|
2
|
+
|
|
3
|
+
`@stravica-ai/engineering-pa-core` › `acquireLock` — the platform-wide primitive
|
|
4
|
+
for "at most one of me at a time". Public core API: consumed default-on by
|
|
5
|
+
`pa launch` for every scheduled-task run, and importable by any direct-run
|
|
6
|
+
tool (anything a cron invokes without going through `pa launch`) that needs
|
|
7
|
+
the same protection.
|
|
8
|
+
|
|
9
|
+
## Why it exists
|
|
10
|
+
|
|
11
|
+
Two runs of the same scheduled task on the same host must not overlap. The
|
|
12
|
+
motivating incident (2026-07-06): a supervised distillation sweep ran 1288+
|
|
13
|
+
seconds and was still running as the next cron tick approached — without a
|
|
14
|
+
lock, two Claude sweeps would have consumed the same staging areas
|
|
15
|
+
concurrently (duplicate routing, git races). The lock closes that class of
|
|
16
|
+
gap at the root: the second run exits cleanly with a logged skip instead of
|
|
17
|
+
spawning a second session.
|
|
18
|
+
|
|
19
|
+
## Import
|
|
20
|
+
|
|
21
|
+
```js
|
|
22
|
+
import { acquireLock, DEFAULT_STALE_AFTER_MS } from '@stravica-ai/engineering-pa-core';
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## API
|
|
26
|
+
|
|
27
|
+
```js
|
|
28
|
+
const lock = await acquireLock(lockPath, {
|
|
29
|
+
staleAfterMs, // optional — see "Staleness policy"; default 2 h
|
|
30
|
+
now, // optional clock seam (tests)
|
|
31
|
+
pid, // optional owner pid (default process.pid)
|
|
32
|
+
isProcessAlive, // optional liveness seam (tests)
|
|
33
|
+
fs, // optional fs seam: { readFile, writeFile, unlink, stat, mkdir }
|
|
34
|
+
});
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Returns one of:
|
|
38
|
+
|
|
39
|
+
```js
|
|
40
|
+
// Live contention — someone else legitimately holds it. Never thrown.
|
|
41
|
+
{ acquired: false,
|
|
42
|
+
holder: { pid, acquiredAt }, // pid/acquiredAt null if lock unreadable
|
|
43
|
+
reason: 'held by pid 1234 since 2026-07-06T11:40:00Z' }
|
|
44
|
+
|
|
45
|
+
// Acquired (possibly after breaking a stale lock).
|
|
46
|
+
{ acquired: true,
|
|
47
|
+
record: { pid, acquiredAt }, // what was written to the lock file
|
|
48
|
+
stale: null | { pid, acquiredAt, reason: 'dead-pid' | 'age-exceeded' | 'unreadable' },
|
|
49
|
+
release: async () => {} } // call on every exit path (try/finally)
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
When `stale` is non-null the caller SHOULD log a warning naming the broken
|
|
53
|
+
lock — the steal is safe but worth an audit trail.
|
|
54
|
+
|
|
55
|
+
## Lock file
|
|
56
|
+
|
|
57
|
+
One JSON file per protected resource, camelCase properties:
|
|
58
|
+
|
|
59
|
+
```json
|
|
60
|
+
{ "pid": 12345, "acquiredAt": "2026-07-06T12:00:00Z" }
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
- **Path is caller-chosen.** Convention: one path per resource under the
|
|
64
|
+
operator repo's gitignored `.cache/` area (tooling standard §16 —
|
|
65
|
+
operational artefacts are never git-tracked). `pa launch` uses
|
|
66
|
+
`.cache/launch/<taskId>.lock`.
|
|
67
|
+
- **First run needs no setup.** A missing lock file or missing parent
|
|
68
|
+
directory is the normal empty state — the directory is created on demand.
|
|
69
|
+
- **Release is ownership-checked.** `release()` deletes the file only if it
|
|
70
|
+
still carries this acquisition's pid + timestamp, so a long run whose lock
|
|
71
|
+
was stolen never deletes the successor's lock. Release of an
|
|
72
|
+
already-deleted lock is a no-op.
|
|
73
|
+
|
|
74
|
+
## Staleness policy
|
|
75
|
+
|
|
76
|
+
Two signals decide whether an existing lock is stale, in order:
|
|
77
|
+
|
|
78
|
+
1. **Dead pid — primary.** If the recorded process no longer exists
|
|
79
|
+
(`process.kill(pid, 0)` semantics; `EPERM` counts as alive), the lock is
|
|
80
|
+
broken immediately regardless of age. This is what recovers from crashed
|
|
81
|
+
runs — a run killed mid-task cannot wedge the next tick.
|
|
82
|
+
2. **Age threshold — backstop.** If the recorded process appears alive but
|
|
83
|
+
the lock is older than `staleAfterMs`, it is broken anyway. This covers
|
|
84
|
+
pid reuse (the recorded pid now names an unrelated process, so signal 1
|
|
85
|
+
would report "alive" forever) and unreadable lock files (crash mid-write:
|
|
86
|
+
the pid cannot be checked, so file mtime vs `staleAfterMs` is the only
|
|
87
|
+
signal — fresher than the threshold is treated as held, older is broken).
|
|
88
|
+
|
|
89
|
+
**Default: `DEFAULT_STALE_AFTER_MS` = 2 hours.** Rationale: the motivating
|
|
90
|
+
consumers are scheduled agent sweeps whose legitimate runtimes are routinely
|
|
91
|
+
tens of minutes (observed: 1288+ seconds), so a short window would steal a
|
|
92
|
+
live lock mid-sweep; 2 hours safely clears observed long runs while still
|
|
93
|
+
self-healing a pid-reuse wedge within one-to-two ticks of a typical 4-hourly
|
|
94
|
+
schedule. The threshold is deliberately caller-configurable:
|
|
95
|
+
|
|
96
|
+
- **Fast, well-bounded jobs should tighten it.** The `sync` CLI (seconds-long
|
|
97
|
+
git runs on a 30-minute tick) passes 10 minutes.
|
|
98
|
+
- **Jobs that can legitimately run longer than 2 hours must raise it.**
|
|
99
|
+
- **`pa launch` consumers** set it per task via the optional
|
|
100
|
+
`lockStaleAfterMinutes` field in `schedules/<id>.json` — no code needed.
|
|
101
|
+
|
|
102
|
+
## Contention semantics for cron consumers
|
|
103
|
+
|
|
104
|
+
`acquireLock` never throws for "someone else holds it" — it reports and
|
|
105
|
+
lets the caller choose exit semantics. The platform convention for scheduled
|
|
106
|
+
consumers is: log a greppable skip line naming the holder, write a
|
|
107
|
+
`noop-locked` audit record (tooling standard §15), and **exit 0** — an
|
|
108
|
+
overlap skip is a healthy no-op, not a failure, and must not generate cron
|
|
109
|
+
mail. `pa launch` and `sync` both follow this. A consumer that needs the
|
|
110
|
+
skip to be visible to a supervisor may exit 2 instead; document the choice.
|
|
111
|
+
|
|
112
|
+
## Adopting in a direct-run tool
|
|
113
|
+
|
|
114
|
+
```js
|
|
115
|
+
import { acquireLock } from '@stravica-ai/engineering-pa-core';
|
|
116
|
+
|
|
117
|
+
const lock = await acquireLock(join(repoRoot, '.cache', 'my-tool', 'my-tool.lock'));
|
|
118
|
+
if (!lock.acquired) {
|
|
119
|
+
console.error(`[my-tool] skipped — ${lock.reason}`);
|
|
120
|
+
process.exit(0); // healthy no-op — see contention semantics above
|
|
121
|
+
}
|
|
122
|
+
if (lock.stale) {
|
|
123
|
+
console.error(`[my-tool] warning: broke stale lock (${lock.stale.reason}) — proceeding`);
|
|
124
|
+
}
|
|
125
|
+
try {
|
|
126
|
+
// ... the work ...
|
|
127
|
+
} finally {
|
|
128
|
+
await lock.release();
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
## Consumers
|
|
133
|
+
|
|
134
|
+
| Consumer | Lock path | staleAfterMs |
|
|
135
|
+
|---|---|---|
|
|
136
|
+
| `pa launch` (default-on, per task) | `.cache/launch/<taskId>.lock` | 2 h default; per-task `lockStaleAfterMinutes` |
|
|
137
|
+
| `estate-sync` CLI (alias: `sync`) | `.cache/estate-sync/.lock` | 10 min |
|
|
138
|
+
|
|
139
|
+
## Tests
|
|
140
|
+
|
|
141
|
+
```
|
|
142
|
+
node --test packages/core/test/lock/lock.test.mjs
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Covers: acquire on empty path, first-run mkdir against the real fs, live
|
|
146
|
+
contention, the 1288-second long-sweep no-steal case, dead-pid steal,
|
|
147
|
+
age-exceeded steal, caller-configured thresholds, unreadable-lock-file
|
|
148
|
+
handling, ownership-checked release, release-after-steal, release-idempotence.
|
|
149
|
+
|
|
150
|
+
## Standards
|
|
151
|
+
|
|
152
|
+
Follows the [tooling standard](./standards/tooling.md): Node stdlib only
|
|
153
|
+
(§3), dependency injection over mocking (§8), camelCase JSON (§11),
|
|
154
|
+
gitignored operational artefacts (§16). Exit-code guidance for consumers
|
|
155
|
+
derives from §6.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Cross-Machine Memory Sync
|
|
2
|
+
|
|
3
|
+
Your Claude Code feedback memories are synced across machines via the repo. The canonical store is `operator/memory/`. The local Claude Code cache at `~/.claude/projects/<sanitised-project-path>/memory/` is a write-through cache, not the source of truth.
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
## How it works
|
|
7
|
+
|
|
8
|
+
Sync is handled by `core/tools/memory-sync/`:
|
|
9
|
+
|
|
10
|
+
- `SessionStart` hook runs `memory-sync pull` (repo -> cache) so every session boots with the latest memories.
|
|
11
|
+
- `SessionEnd` hook runs `memory-sync push` (cache -> repo) so any new/edited memories land in git.
|
|
12
|
+
- Hooks live in `.claude/settings.json` at the repo root and travel with the project.
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
## How to use it
|
|
16
|
+
|
|
17
|
+
Save new memories the normal way — write to the local cache path. The sync handles propagation.
|
|
18
|
+
|
|
19
|
+
On a fresh machine, `git clone` the repo and start a Claude Code session; the SessionStart hook populates the cache automatically.
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
## CLI
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
node core/tools/memory-sync/bin/memory-sync pull
|
|
26
|
+
node core/tools/memory-sync/bin/memory-sync push
|
|
27
|
+
node core/tools/memory-sync/bin/memory-sync status
|
|
28
|
+
```
|