@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.
Files changed (372) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +170 -0
  3. package/bin/desk +9 -0
  4. package/bin/distill +2 -0
  5. package/bin/estate-sync +2 -0
  6. package/bin/launch +2 -0
  7. package/bin/memory-sync +2 -0
  8. package/bin/migrate-inspect +2 -0
  9. package/bin/pa +2 -0
  10. package/bin/pa-coordinator-hook +2 -0
  11. package/bin/pa-init +2 -0
  12. package/bin/research +2 -0
  13. package/bin/scheduler +2 -0
  14. package/bin/secrets +2 -0
  15. package/bin/slice +2 -0
  16. package/bin/smoke +9 -0
  17. package/bin/sync +2 -0
  18. package/dist/engineering-pa-cli/README.md +205 -0
  19. package/dist/engineering-pa-cli/bin/estate-sync +2 -0
  20. package/dist/engineering-pa-cli/bin/launch +2 -0
  21. package/dist/engineering-pa-cli/bin/pa +2 -0
  22. package/dist/engineering-pa-cli/bin/pa-coordinator-hook +12 -0
  23. package/dist/engineering-pa-cli/bin/research +2 -0
  24. package/dist/engineering-pa-cli/bin/scheduler +2 -0
  25. package/dist/engineering-pa-cli/bin/secrets +2 -0
  26. package/dist/engineering-pa-cli/bin/smoke +9 -0
  27. package/dist/engineering-pa-cli/bin/sync +2 -0
  28. package/dist/engineering-pa-cli/config/coordinator-allowlist.json +118 -0
  29. package/dist/engineering-pa-cli/docs/coordinator-hook.md +211 -0
  30. package/dist/engineering-pa-cli/docs/estate-sync.md +412 -0
  31. package/dist/engineering-pa-cli/docs/gsc.md +175 -0
  32. package/dist/engineering-pa-cli/docs/lint-linkedin.md +139 -0
  33. package/dist/engineering-pa-cli/docs/secrets.md +221 -0
  34. package/dist/engineering-pa-cli/docs/smoke.md +113 -0
  35. package/dist/engineering-pa-cli/docs/staging-alias.md +114 -0
  36. package/dist/engineering-pa-cli/index.mjs +17 -0
  37. package/dist/engineering-pa-cli/package.json +37 -0
  38. package/dist/engineering-pa-cli/src/autonomy/cli.mjs +329 -0
  39. package/dist/engineering-pa-cli/src/autonomy/envelope.mjs +301 -0
  40. package/dist/engineering-pa-cli/src/coordinator-hook/cli.mjs +140 -0
  41. package/dist/engineering-pa-cli/src/coordinator-hook/config.mjs +134 -0
  42. package/dist/engineering-pa-cli/src/coordinator-hook/message.mjs +47 -0
  43. package/dist/engineering-pa-cli/src/coordinator-hook/policy.mjs +211 -0
  44. package/dist/engineering-pa-cli/src/coordinator-hook/repo-root.mjs +44 -0
  45. package/dist/engineering-pa-cli/src/coordinator-hook/self.mjs +30 -0
  46. package/dist/engineering-pa-cli/src/environment/cli.mjs +287 -0
  47. package/dist/engineering-pa-cli/src/environment/probes.mjs +302 -0
  48. package/dist/engineering-pa-cli/src/gsc/auth.mjs +148 -0
  49. package/dist/engineering-pa-cli/src/gsc/cli.mjs +93 -0
  50. package/dist/engineering-pa-cli/src/gsc/cloudflare.mjs +318 -0
  51. package/dist/engineering-pa-cli/src/gsc/commands/add-property.mjs +70 -0
  52. package/dist/engineering-pa-cli/src/gsc/commands/list-properties.mjs +33 -0
  53. package/dist/engineering-pa-cli/src/gsc/commands/pull-analytics.mjs +130 -0
  54. package/dist/engineering-pa-cli/src/gsc/commands/submit-sitemap.mjs +41 -0
  55. package/dist/engineering-pa-cli/src/gsc/commands/verify-via-cf-dns.mjs +189 -0
  56. package/dist/engineering-pa-cli/src/knowledge/call-log.mjs +59 -0
  57. package/dist/engineering-pa-cli/src/knowledge/cli.mjs +242 -0
  58. package/dist/engineering-pa-cli/src/knowledge/eval.mjs +446 -0
  59. package/dist/engineering-pa-cli/src/knowledge/formatters.mjs +331 -0
  60. package/dist/engineering-pa-cli/src/knowledge/graph.mjs +710 -0
  61. package/dist/engineering-pa-cli/src/launch/README.md +214 -0
  62. package/dist/engineering-pa-cli/src/launch/cli.mjs +51 -0
  63. package/dist/engineering-pa-cli/src/launch/commands/launch.mjs +106 -0
  64. package/dist/engineering-pa-cli/src/launch/identity.mjs +43 -0
  65. package/dist/engineering-pa-cli/src/launch/planner.mjs +44 -0
  66. package/dist/engineering-pa-cli/src/launch/repo-root.mjs +53 -0
  67. package/dist/engineering-pa-cli/src/launch/runner.mjs +147 -0
  68. package/dist/engineering-pa-cli/src/launch/task-loader.mjs +85 -0
  69. package/dist/engineering-pa-cli/src/lint/cli.mjs +61 -0
  70. package/dist/engineering-pa-cli/src/lint/commands/linkedin.mjs +133 -0
  71. package/dist/engineering-pa-cli/src/lint/detectors.mjs +90 -0
  72. package/dist/engineering-pa-cli/src/lint/linter.mjs +69 -0
  73. package/dist/engineering-pa-cli/src/lint/reporter.mjs +32 -0
  74. package/dist/engineering-pa-cli/src/lint/rules.mjs +132 -0
  75. package/dist/engineering-pa-cli/src/pa/cli.mjs +369 -0
  76. package/dist/engineering-pa-cli/src/pa/doc-groups.mjs +164 -0
  77. package/dist/engineering-pa-cli/src/pa/io.mjs +80 -0
  78. package/dist/engineering-pa-cli/src/pa/project-cli.mjs +385 -0
  79. package/dist/engineering-pa-cli/src/pa/projects.mjs +352 -0
  80. package/dist/engineering-pa-cli/src/pa/repo-root.mjs +64 -0
  81. package/dist/engineering-pa-cli/src/pa/session.mjs +254 -0
  82. package/dist/engineering-pa-cli/src/pa/work-cli.mjs +164 -0
  83. package/dist/engineering-pa-cli/src/pa/work.mjs +196 -0
  84. package/dist/engineering-pa-cli/src/pa/workstreams.mjs +201 -0
  85. package/dist/engineering-pa-cli/src/research/README.md +360 -0
  86. package/dist/engineering-pa-cli/src/research/briefs/extractor.md +103 -0
  87. package/dist/engineering-pa-cli/src/research/briefs/searcher.md +113 -0
  88. package/dist/engineering-pa-cli/src/research/briefs/synthesizer.md +124 -0
  89. package/dist/engineering-pa-cli/src/research/briefs/verifier.md +86 -0
  90. package/dist/engineering-pa-cli/src/research/cli.mjs +141 -0
  91. package/dist/engineering-pa-cli/src/research/commands/gates.mjs +176 -0
  92. package/dist/engineering-pa-cli/src/research/commands/list.mjs +56 -0
  93. package/dist/engineering-pa-cli/src/research/commands/mark.mjs +97 -0
  94. package/dist/engineering-pa-cli/src/research/commands/paths.mjs +69 -0
  95. package/dist/engineering-pa-cli/src/research/commands/prune.mjs +86 -0
  96. package/dist/engineering-pa-cli/src/research/commands/run.mjs +94 -0
  97. package/dist/engineering-pa-cli/src/research/commands/show.mjs +43 -0
  98. package/dist/engineering-pa-cli/src/research/docs/operator-present-flow.md +120 -0
  99. package/dist/engineering-pa-cli/src/research/format.mjs +59 -0
  100. package/dist/engineering-pa-cli/src/research/promote.mjs +260 -0
  101. package/dist/engineering-pa-cli/src/research/schema/finding.schema.json +55 -0
  102. package/dist/engineering-pa-cli/src/research/schema/gates.schema.json +34 -0
  103. package/dist/engineering-pa-cli/src/research/schema/manifest.schema.json +59 -0
  104. package/dist/engineering-pa-cli/src/research/schema/plan.schema.json +41 -0
  105. package/dist/engineering-pa-cli/src/research/schema/sources.schema.json +31 -0
  106. package/dist/engineering-pa-cli/src/research/store/findings.mjs +61 -0
  107. package/dist/engineering-pa-cli/src/research/store/gates.mjs +73 -0
  108. package/dist/engineering-pa-cli/src/research/store/index.mjs +312 -0
  109. package/dist/engineering-pa-cli/src/research/store/manifest.mjs +56 -0
  110. package/dist/engineering-pa-cli/src/research/store/plan.mjs +59 -0
  111. package/dist/engineering-pa-cli/src/research/store/sources.mjs +44 -0
  112. package/dist/engineering-pa-cli/src/research/store/validate.mjs +92 -0
  113. package/dist/engineering-pa-cli/src/research/workflows/research-normal.js +573 -0
  114. package/dist/engineering-pa-cli/src/scheduler/cli.mjs +197 -0
  115. package/dist/engineering-pa-cli/src/secrets/cli.mjs +254 -0
  116. package/dist/engineering-pa-cli/src/secrets/commands/backup-template.mjs +67 -0
  117. package/dist/engineering-pa-cli/src/secrets/commands/backup.mjs +85 -0
  118. package/dist/engineering-pa-cli/src/secrets/commands/delete.mjs +58 -0
  119. package/dist/engineering-pa-cli/src/secrets/commands/find.mjs +36 -0
  120. package/dist/engineering-pa-cli/src/secrets/commands/get.mjs +49 -0
  121. package/dist/engineering-pa-cli/src/secrets/commands/init.mjs +69 -0
  122. package/dist/engineering-pa-cli/src/secrets/commands/list.mjs +37 -0
  123. package/dist/engineering-pa-cli/src/secrets/commands/rotate.mjs +46 -0
  124. package/dist/engineering-pa-cli/src/secrets/commands/set.mjs +123 -0
  125. package/dist/engineering-pa-cli/src/secrets/commands/status.mjs +146 -0
  126. package/dist/engineering-pa-cli/src/secrets/commands/vaults.mjs +57 -0
  127. package/dist/engineering-pa-cli/src/secrets/commands/verify.mjs +143 -0
  128. package/dist/engineering-pa-cli/src/secrets/vault.mjs +766 -0
  129. package/dist/engineering-pa-cli/src/smoke/checks.mjs +199 -0
  130. package/dist/engineering-pa-cli/src/smoke/cli.mjs +108 -0
  131. package/dist/engineering-pa-cli/src/smoke/commands/run.mjs +237 -0
  132. package/dist/engineering-pa-cli/src/smoke/runner.mjs +191 -0
  133. package/dist/engineering-pa-cli/src/staging-alias/cli.mjs +91 -0
  134. package/dist/engineering-pa-cli/src/staging-alias/cloudflare.mjs +380 -0
  135. package/dist/engineering-pa-cli/src/staging-alias/commands/list.mjs +36 -0
  136. package/dist/engineering-pa-cli/src/staging-alias/commands/set.mjs +188 -0
  137. package/dist/engineering-pa-cli/src/staging-alias/commands/status.mjs +113 -0
  138. package/dist/engineering-pa-cli/src/staging-alias/commands/unset.mjs +95 -0
  139. package/dist/engineering-pa-cli/src/staging-alias/sites.mjs +105 -0
  140. package/dist/engineering-pa-cli/src/sync/cli.mjs +151 -0
  141. package/dist/engineering-pa-cli/src/sync/git.mjs +149 -0
  142. package/dist/engineering-pa-cli/src/sync/lock.mjs +30 -0
  143. package/dist/engineering-pa-cli/src/sync/regenerated-artifacts.mjs +114 -0
  144. package/dist/engineering-pa-cli/src/sync/registry-scope.mjs +260 -0
  145. package/dist/engineering-pa-cli/src/sync/run.mjs +531 -0
  146. package/dist/engineering-pa-cli/src/sync/runner.mjs +62 -0
  147. package/dist/engineering-pa-cli/src/sync/runs-digest.mjs +138 -0
  148. package/dist/engineering-pa-core/README.md +60 -0
  149. package/dist/engineering-pa-core/bin/desk +9 -0
  150. package/dist/engineering-pa-core/bin/distill +2 -0
  151. package/dist/engineering-pa-core/bin/memory-sync +2 -0
  152. package/dist/engineering-pa-core/bin/slice +2 -0
  153. package/dist/engineering-pa-core/docs/autonomy-envelope-tracker.md +111 -0
  154. package/dist/engineering-pa-core/docs/blueprints/README.md +45 -0
  155. package/dist/engineering-pa-core/docs/blueprints/docker-services/blueprint.md +168 -0
  156. package/dist/engineering-pa-core/docs/blueprints/git-identity/blueprint.md +116 -0
  157. package/dist/engineering-pa-core/docs/blueprints/ideas/custom-workspace-views.md +9 -0
  158. package/dist/engineering-pa-core/docs/blueprints/ideas/knowledge-domain-patterns.md +15 -0
  159. package/dist/engineering-pa-core/docs/blueprints/ideas/office-integration.md +11 -0
  160. package/dist/engineering-pa-core/docs/blueprints/ideas/team-scaling.md +9 -0
  161. package/dist/engineering-pa-core/docs/blueprints/ideas/work-personal-separation.md +9 -0
  162. package/dist/engineering-pa-core/docs/blueprints/scheduled-distillation/blueprint.md +129 -0
  163. package/dist/engineering-pa-core/docs/blueprints/tool-integration/blueprint.md +110 -0
  164. package/dist/engineering-pa-core/docs/commands/init.md +159 -0
  165. package/dist/engineering-pa-core/docs/commands/schedule.md +98 -0
  166. package/dist/engineering-pa-core/docs/commands/upgrade.md +67 -0
  167. package/dist/engineering-pa-core/docs/entity-location-map.md +93 -0
  168. package/dist/engineering-pa-core/docs/knowledge-scaffold.md +121 -0
  169. package/dist/engineering-pa-core/docs/lock.md +155 -0
  170. package/dist/engineering-pa-core/docs/memory-sync.md +28 -0
  171. package/dist/engineering-pa-core/docs/pa-operating-model.md +457 -0
  172. package/dist/engineering-pa-core/docs/scheduling.md +35 -0
  173. package/dist/engineering-pa-core/docs/standards/README.md +24 -0
  174. package/dist/engineering-pa-core/docs/standards/briefing-contract.md +161 -0
  175. package/dist/engineering-pa-core/docs/standards/tooling.md +240 -0
  176. package/dist/engineering-pa-core/docs/tools/distill.md +230 -0
  177. package/dist/engineering-pa-core/docs/tools/memory-sync.md +98 -0
  178. package/dist/engineering-pa-core/docs/tools/scheduler.md +243 -0
  179. package/dist/engineering-pa-core/docs/tools/slice.md +150 -0
  180. package/dist/engineering-pa-core/docs/upstream-issue-filing.md +88 -0
  181. package/dist/engineering-pa-core/docs/working-directory.md +29 -0
  182. package/dist/engineering-pa-core/docs/workspace-operations.md +46 -0
  183. package/dist/engineering-pa-core/index.mjs +21 -0
  184. package/dist/engineering-pa-core/knowledge/README.md +53 -0
  185. package/dist/engineering-pa-core/knowledge/canonical/.gitkeep +0 -0
  186. package/dist/engineering-pa-core/knowledge/content-voice/README.md +64 -0
  187. package/dist/engineering-pa-core/knowledge/content-voice/banned-ai-tells-baseline.md +133 -0
  188. package/dist/engineering-pa-core/knowledge/content-voice/banned-ai-tells-shape.md +58 -0
  189. package/dist/engineering-pa-core/knowledge/content-voice/banned-ai-tells-taxonomy.md +33 -0
  190. package/dist/engineering-pa-core/knowledge/content-voice/content-pipeline-routing.md +58 -0
  191. package/dist/engineering-pa-core/knowledge/content-voice/new-tell-capture-procedure.md +40 -0
  192. package/dist/engineering-pa-core/knowledge/content-voice/voice-guide-shape.md +43 -0
  193. package/dist/engineering-pa-core/knowledge/delegation-dispatch/README.md +34 -0
  194. package/dist/engineering-pa-core/knowledge/delegation-dispatch/briefing-contract.md +77 -0
  195. package/dist/engineering-pa-core/knowledge/delegation-dispatch/delegation-modes.md +84 -0
  196. package/dist/engineering-pa-core/knowledge/delegation-dispatch/dispatch-envelope.md +238 -0
  197. package/dist/engineering-pa-core/knowledge/delegation-dispatch/task-groups-and-orchestrators.md +62 -0
  198. package/dist/engineering-pa-core/knowledge/delegation-dispatch/team-improvement-loop.md +48 -0
  199. package/dist/engineering-pa-core/knowledge/delegation-dispatch/tool-development-policy.md +48 -0
  200. package/dist/engineering-pa-core/knowledge/engineering-discipline/README.md +33 -0
  201. package/dist/engineering-pa-core/knowledge/engineering-discipline/blast-radius-and-safety.md +50 -0
  202. package/dist/engineering-pa-core/knowledge/engineering-discipline/investigate-root-causes.md +48 -0
  203. package/dist/engineering-pa-core/knowledge/engineering-discipline/role-ladder.md +57 -0
  204. package/dist/engineering-pa-core/knowledge/engineering-discipline/verify-runtime-behaviour.md +53 -0
  205. package/dist/engineering-pa-core/knowledge/engineering-discipline/worktree-isolation.md +50 -0
  206. package/dist/engineering-pa-core/knowledge/knowledge-memory/README.md +33 -0
  207. package/dist/engineering-pa-core/knowledge/knowledge-memory/claude-md-hygiene.md +47 -0
  208. package/dist/engineering-pa-core/knowledge/knowledge-memory/journal-and-self-improvement.md +53 -0
  209. package/dist/engineering-pa-core/knowledge/knowledge-memory/knowledge-retrieval-discipline.md +62 -0
  210. package/dist/engineering-pa-core/knowledge/knowledge-memory/librarian-synthesis-mandate.md +56 -0
  211. package/dist/engineering-pa-core/knowledge/knowledge-memory/staging-and-observations.md +58 -0
  212. package/dist/engineering-pa-core/knowledge/operator-interface/README.md +32 -0
  213. package/dist/engineering-pa-core/knowledge/operator-interface/communication-style.md +33 -0
  214. package/dist/engineering-pa-core/knowledge/operator-interface/escalation-and-correction.md +45 -0
  215. package/dist/engineering-pa-core/knowledge/operator-interface/push-back-discipline.md +42 -0
  216. package/dist/engineering-pa-core/knowledge/operator-interface/session-boot-and-end.md +56 -0
  217. package/dist/engineering-pa-core/knowledge/platform-tooling/README.md +37 -0
  218. package/dist/engineering-pa-core/knowledge/platform-tooling/desk-cli-reference.md +52 -0
  219. package/dist/engineering-pa-core/knowledge/platform-tooling/environment-awareness.md +91 -0
  220. package/dist/engineering-pa-core/knowledge/platform-tooling/mcp-servers-catalogue.md +52 -0
  221. package/dist/engineering-pa-core/knowledge/platform-tooling/pa-cli-reference.md +55 -0
  222. package/dist/engineering-pa-core/knowledge/platform-tooling/scheduling-and-launchd.md +56 -0
  223. package/dist/engineering-pa-core/knowledge/platform-tooling/tool-discovery-discipline.md +49 -0
  224. package/dist/engineering-pa-core/knowledge/platform-tooling/working-directory-vs-project-root.md +43 -0
  225. package/dist/engineering-pa-core/knowledge/platform-tooling/workspace-server.md +51 -0
  226. package/dist/engineering-pa-core/knowledge/raw/.gitkeep +0 -0
  227. package/dist/engineering-pa-core/knowledge/scaffold/domains.json +5 -0
  228. package/dist/engineering-pa-core/knowledge/schema/.gitkeep +0 -0
  229. package/dist/engineering-pa-core/knowledge/work-management/README.md +33 -0
  230. package/dist/engineering-pa-core/knowledge/work-management/desk-cli.md +84 -0
  231. package/dist/engineering-pa-core/knowledge/work-management/progress-md.md +48 -0
  232. package/dist/engineering-pa-core/knowledge/work-management/projects.md +64 -0
  233. package/dist/engineering-pa-core/knowledge/work-management/spawn-log.md +48 -0
  234. package/dist/engineering-pa-core/knowledge/work-management/work-items.md +67 -0
  235. package/dist/engineering-pa-core/package.json +26 -0
  236. package/dist/engineering-pa-core/roles/agent-ops/definition.md +79 -0
  237. package/dist/engineering-pa-core/roles/dispatch-briefer/definition.md +195 -0
  238. package/dist/engineering-pa-core/roles/librarian/definition.md +176 -0
  239. package/dist/engineering-pa-core/roles/pa/definition.md +93 -0
  240. package/dist/engineering-pa-core/roles/system-admin/definition.md +106 -0
  241. package/dist/engineering-pa-core/roles/tool-developer/definition.md +116 -0
  242. package/dist/engineering-pa-core/roles/writer/definition.md +130 -0
  243. package/dist/engineering-pa-core/schema/autonomy-envelope.schema.json +61 -0
  244. package/dist/engineering-pa-core/schema/project.json +114 -0
  245. package/dist/engineering-pa-core/schema/schedule.json +63 -0
  246. package/dist/engineering-pa-core/schema/work-item.json +92 -0
  247. package/dist/engineering-pa-core/src/config/pa-package-name.mjs +30 -0
  248. package/dist/engineering-pa-core/src/desk/cli.mjs +95 -0
  249. package/dist/engineering-pa-core/src/desk/commands.mjs +398 -0
  250. package/dist/engineering-pa-core/src/desk/format.mjs +84 -0
  251. package/dist/engineering-pa-core/src/desk/repo.mjs +172 -0
  252. package/dist/engineering-pa-core/src/desk/team-scope.mjs +142 -0
  253. package/dist/engineering-pa-core/src/distill/cli.mjs +112 -0
  254. package/dist/engineering-pa-core/src/distill/prereqs.mjs +171 -0
  255. package/dist/engineering-pa-core/src/distill/prompt.mjs +74 -0
  256. package/dist/engineering-pa-core/src/distill/run.mjs +230 -0
  257. package/dist/engineering-pa-core/src/distill/runner.mjs +86 -0
  258. package/dist/engineering-pa-core/src/distill/staging.mjs +59 -0
  259. package/dist/engineering-pa-core/src/knowledge/retrieval/backlink-indexer.mjs +154 -0
  260. package/dist/engineering-pa-core/src/knowledge/retrieval/graph-builder.mjs +186 -0
  261. package/dist/engineering-pa-core/src/knowledge/retrieval/index-builder.mjs +225 -0
  262. package/dist/engineering-pa-core/src/knowledge/retrieval/query.mjs +263 -0
  263. package/dist/engineering-pa-core/src/lock/lock.mjs +202 -0
  264. package/dist/engineering-pa-core/src/memory-sync/cli-support.mjs +12 -0
  265. package/dist/engineering-pa-core/src/memory-sync/cli.mjs +56 -0
  266. package/dist/engineering-pa-core/src/memory-sync/commands/pull.mjs +44 -0
  267. package/dist/engineering-pa-core/src/memory-sync/commands/push.mjs +46 -0
  268. package/dist/engineering-pa-core/src/memory-sync/mirror.mjs +114 -0
  269. package/dist/engineering-pa-core/src/memory-sync/repo.mjs +65 -0
  270. package/dist/engineering-pa-core/src/scheduler/detect.mjs +111 -0
  271. package/dist/engineering-pa-core/src/scheduler/host.mjs +38 -0
  272. package/dist/engineering-pa-core/src/scheduler/index.mjs +13 -0
  273. package/dist/engineering-pa-core/src/scheduler/install.mjs +854 -0
  274. package/dist/engineering-pa-core/src/scheduler/list.mjs +168 -0
  275. package/dist/engineering-pa-core/src/scheduler/remove.mjs +176 -0
  276. package/dist/engineering-pa-core/src/scheduler/verify.mjs +435 -0
  277. package/dist/engineering-pa-core/src/session-boot/autonomy-injection.mjs +84 -0
  278. package/dist/engineering-pa-core/src/slice/cli.mjs +139 -0
  279. package/dist/engineering-pa-core/src/slice/inputs.mjs +174 -0
  280. package/dist/engineering-pa-core/src/slice/prompt.mjs +94 -0
  281. package/dist/engineering-pa-core/src/slice/prompts/dave-boot.md +91 -0
  282. package/dist/engineering-pa-core/src/slice/run.mjs +334 -0
  283. package/dist/engineering-pa-core-extensions-atlassian/README.md +31 -0
  284. package/dist/engineering-pa-core-extensions-atlassian/index.mjs +9 -0
  285. package/dist/engineering-pa-core-extensions-atlassian/package.json +19 -0
  286. package/dist/engineering-pa-core-extensions-n8n/README.md +29 -0
  287. package/dist/engineering-pa-core-extensions-n8n/index.mjs +8 -0
  288. package/dist/engineering-pa-core-extensions-n8n/package.json +19 -0
  289. package/dist/engineering-pa-librarian/README.md +38 -0
  290. package/dist/engineering-pa-librarian/index.mjs +12 -0
  291. package/dist/engineering-pa-librarian/package.json +19 -0
  292. package/dist/engineering-pa-migrate-inspect/README.md +131 -0
  293. package/dist/engineering-pa-migrate-inspect/bin/migrate-inspect +2 -0
  294. package/dist/engineering-pa-migrate-inspect/package.json +21 -0
  295. package/dist/engineering-pa-migrate-inspect/src/age-key-migrate.mjs +83 -0
  296. package/dist/engineering-pa-migrate-inspect/src/cli.mjs +97 -0
  297. package/dist/engineering-pa-migrate-inspect/src/inspector.mjs +237 -0
  298. package/dist/engineering-pa-migrate-inspect/src/platforms/linux.mjs +87 -0
  299. package/dist/engineering-pa-migrate-inspect/src/platforms/macos.mjs +105 -0
  300. package/dist/engineering-pa-migrate-inspect/src/runner.mjs +87 -0
  301. package/dist/engineering-pa-runbook/README.md +103 -0
  302. package/dist/engineering-pa-runbook/package.json +18 -0
  303. package/dist/engineering-pa-runbook/reference/dex-template.runbook.json +66 -0
  304. package/dist/engineering-pa-runbook/reference/hq-dave.runbook.json +69 -0
  305. package/dist/engineering-pa-runbook/reference/smarthome01.runbook.json +92 -0
  306. package/dist/engineering-pa-runbook/schema/inspection.schema.json +113 -0
  307. package/dist/engineering-pa-runbook/schema/runbook.schema.json +67 -0
  308. package/dist/engineering-pa-runbook/src/validator.mjs +167 -0
  309. package/dist/engineering-pa-scaffold/README.md +164 -0
  310. package/dist/engineering-pa-scaffold/bin/pa-init +2 -0
  311. package/dist/engineering-pa-scaffold/index.mjs +42 -0
  312. package/dist/engineering-pa-scaffold/package.json +22 -0
  313. package/dist/engineering-pa-scaffold/src/cli.mjs +115 -0
  314. package/dist/engineering-pa-scaffold/src/commands/init.mjs +169 -0
  315. package/dist/engineering-pa-scaffold/src/generator.mjs +354 -0
  316. package/dist/engineering-pa-scaffold/src/prompts.mjs +125 -0
  317. package/dist/engineering-pa-scaffold/src/runner.mjs +142 -0
  318. package/dist/engineering-pa-scaffold/templates/CLAUDE.md.template +196 -0
  319. package/dist/engineering-pa-scaffold/templates/operator-README.md.template +44 -0
  320. package/dist/engineering-pa-types-engineering/README.md +35 -0
  321. package/dist/engineering-pa-types-engineering/docs/commands/product-build.md +120 -0
  322. package/dist/engineering-pa-types-engineering/index.mjs +9 -0
  323. package/dist/engineering-pa-types-engineering/package.json +19 -0
  324. package/dist/engineering-pa-types-engineering/roles/product-engineer/definition.md +650 -0
  325. package/dist/engineering-pa-types-engineering/roles/product-engineer/templates/build-spec.md +82 -0
  326. package/dist/engineering-pa-types-engineering/roles/product-engineer/templates/preflight-checklist.md +158 -0
  327. package/dist/engineering-pa-types-engineering/roles/product-engineer/templates/worker-brief.md +130 -0
  328. package/dist/engineering-pa-workspace/README.md +197 -0
  329. package/dist/engineering-pa-workspace/app/assets/md.js +187 -0
  330. package/dist/engineering-pa-workspace/app/assets/modal.js +120 -0
  331. package/dist/engineering-pa-workspace/app/assets/theme.css +132 -0
  332. package/dist/engineering-pa-workspace/app/assets/theme.js +159 -0
  333. package/dist/engineering-pa-workspace/app/banner.js +320 -0
  334. package/dist/engineering-pa-workspace/app/delegations.html +345 -0
  335. package/dist/engineering-pa-workspace/app/home.html +1060 -0
  336. package/dist/engineering-pa-workspace/app/index.html +361 -0
  337. package/dist/engineering-pa-workspace/app/knowledge-map.html +163 -0
  338. package/dist/engineering-pa-workspace/app/knowledge.html +304 -0
  339. package/dist/engineering-pa-workspace/app/nav.json +75 -0
  340. package/dist/engineering-pa-workspace/app/notes.html +199 -0
  341. package/dist/engineering-pa-workspace/app/onboarding.html +592 -0
  342. package/dist/engineering-pa-workspace/app/profile.html +243 -0
  343. package/dist/engineering-pa-workspace/app/project-detail.html +432 -0
  344. package/dist/engineering-pa-workspace/app/projects.html +297 -0
  345. package/dist/engineering-pa-workspace/app/repos.html +598 -0
  346. package/dist/engineering-pa-workspace/app/schedules.html +486 -0
  347. package/dist/engineering-pa-workspace/app/secrets.html +164 -0
  348. package/dist/engineering-pa-workspace/app/staging.html +319 -0
  349. package/dist/engineering-pa-workspace/app/tasks.html +465 -0
  350. package/dist/engineering-pa-workspace/app/vendor/chart.umd.min.js +21 -0
  351. package/dist/engineering-pa-workspace/app/viewer.html +116 -0
  352. package/dist/engineering-pa-workspace/docs/DAEMON.md +104 -0
  353. package/dist/engineering-pa-workspace/docs/page-blueprint.md +286 -0
  354. package/dist/engineering-pa-workspace/docs/status-mon.md +168 -0
  355. package/dist/engineering-pa-workspace/index.mjs +12 -0
  356. package/dist/engineering-pa-workspace/nav.json.example +8 -0
  357. package/dist/engineering-pa-workspace/package.json +27 -0
  358. package/dist/engineering-pa-workspace/src/api.mjs +2086 -0
  359. package/dist/engineering-pa-workspace/src/install-daemon.mjs +573 -0
  360. package/dist/engineering-pa-workspace/src/nav.mjs +190 -0
  361. package/dist/engineering-pa-workspace/src/secrets-api.mjs +175 -0
  362. package/dist/engineering-pa-workspace/src/server.mjs +516 -0
  363. package/dist/engineering-pa-workspace/src/status-mon/poll.mjs +220 -0
  364. package/dist/engineering-pa-workspace/src/status-mon/poller.mjs +113 -0
  365. package/dist/engineering-pa-workspace/src/status-mon/run.mjs +133 -0
  366. package/dist/engineering-pa-workspace/src/supervisor.mjs +264 -0
  367. package/dist/engineering-pa-workspace/src/ws.mjs +633 -0
  368. package/index.mjs +60 -0
  369. package/package.json +58 -0
  370. package/templates/banned-ai-tells.md +102 -0
  371. package/templates/purpose.md +105 -0
  372. package/templates/voice-guide.md +98 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Stravica
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,170 @@
1
+ # @stravica-ai/digital-operator-pa
2
+
3
+ The public, single-bundled npm surface of the engineering-PA platform.
4
+
5
+ One install gives operators every CLI bin and bundles the internal platform
6
+ code into a self-contained tarball.
7
+
8
+ ## Install
9
+
10
+ ```sh
11
+ pnpm add @stravica-ai/digital-operator-pa
12
+ ```
13
+
14
+ Requires Node 24+. See [`../../docs/installing.md`](../../docs/installing.md)
15
+ for the GitHub Packages `~/.npmrc` setup (PAT with `read:packages` scope).
16
+
17
+ ## Bins
18
+
19
+ The wrapper exposes the platform's operator-facing CLIs:
20
+
21
+ | Bin | What it does |
22
+ |-------------------|-------------------------------------------------------------|
23
+ | `pa` | Top-level operator CLI (`pa status`, `pa workspace`, …) |
24
+ | `desk` | Task + project queries |
25
+ | `launch` | Boot a scoped agent instance bound to an identity and task |
26
+ | `sync` | Per-host single-writer git sync |
27
+ | `secrets` | SOPS+age secrets vault management |
28
+ | `scheduler` | Scheduling primitives (cron / launchd install + verify) |
29
+ | `smoke` | Fresh-clone smoke suite |
30
+ | `distill` | Librarian distillation sweep |
31
+ | `memory-sync` | PA-memory cache mirror |
32
+ | `migrate-inspect` | Host inspection for migration planning |
33
+ | `pa-init` | Scaffolder for a new operator repo |
34
+ | `slice` | Operator profile slice generator (compact boot context) |
35
+ | `pa-coordinator-hook` | Claude Code `PreToolUse` hook — three-tier coordinator-mode tool policy |
36
+
37
+ Each bin runs `--help` and exits 0 to confirm the install is healthy.
38
+
39
+ `pa-coordinator-hook` is the exception to "operator-facing CLI" above — it's
40
+ a hook binary invoked by Claude Code itself, not run by hand. See
41
+ [`../cli/docs/coordinator-hook.md`](../cli/docs/coordinator-hook.md) for the
42
+ full contract, the settings.json wiring snippet, and the per-PA overlay
43
+ mechanism.
44
+
45
+ ### Starting a PA session
46
+
47
+ After `pa-init` lays down an operator repo, kick off your PA with:
48
+
49
+ ```sh
50
+ cd <operator-repo>
51
+ pa session
52
+ ```
53
+
54
+ `pa session`:
55
+
56
+ 1. Resolves the operator repo root (`$DAVE_REPO_ROOT` → `$PA_REPO_ROOT`
57
+ → `.git`-walk → CWD).
58
+ 2. Reads `operator/config/preferences.json` and pulls out `paName`.
59
+ 3. Chdirs to `agents/<paName>/`.
60
+ 4. Execs `claude --dangerously-skip-permissions`, inheriting stdio.
61
+
62
+ For muscle memory, alias it to your PA's name:
63
+
64
+ ```sh
65
+ alias dave='pa session' # add to ~/.zshrc / ~/.bashrc
66
+ ```
67
+
68
+ Now `dave` alone boots a session. Errors (missing preferences, missing
69
+ agent directory, `claude` not on `PATH`) exit non-zero with a concrete
70
+ remediation message.
71
+
72
+ ## Programmatic surface
73
+
74
+ ```js
75
+ import { name, version, bins, bundled, describe } from '@stravica-ai/digital-operator-pa';
76
+
77
+ console.log(describe());
78
+ // → { name: '@stravica-ai/digital-operator-pa', version: '0.1.1', bins: [...], bundled: [...] }
79
+ ```
80
+
81
+ For richer in-process composition (importing internal modules directly),
82
+ consumers can reach into the bundled `dist/` tree — but the bin shims are
83
+ the supported contract.
84
+
85
+ ## Single-bundled-publish model (approach A2)
86
+
87
+ `@stravica-ai/digital-operator-pa` ships **one tarball** that contains:
88
+
89
+ ```
90
+ package/
91
+ package.json # bin map, exports, publishConfig
92
+ index.mjs # public ESM surface
93
+ bin/ # bin shims — thin wrappers over dist/.../cli.mjs
94
+ dist/ # bundled internal packages (built by build.mjs)
95
+ engineering-pa-core/
96
+ engineering-pa-runbook/
97
+ engineering-pa-cli/
98
+ engineering-pa-migrate-inspect/
99
+ engineering-pa-workspace/
100
+ engineering-pa-scaffold/
101
+ engineering-pa-librarian/
102
+ engineering-pa-types-engineering/
103
+ engineering-pa-core-extensions-atlassian/
104
+ engineering-pa-core-extensions-n8n/
105
+ README.md
106
+ LICENSE
107
+ ```
108
+
109
+ `build.mjs` is the pre-pack bundler. It:
110
+
111
+ 1. Copies each internal workspace package's source into `dist/<short-name>/`,
112
+ skipping `test/`, `node_modules/`, `dist/`, IDE state.
113
+ 2. Rewrites every `'@stravica-ai/engineering-pa-*'` string literal inside copied
114
+ `.mjs` files to a relative path within `dist/`, so cross-package imports
115
+ resolve without any runtime npm-name lookup.
116
+
117
+ Hooked via `prepack`, so `pnpm pack` and `pnpm publish` always run it first.
118
+ Also exposed as `pnpm --filter @stravica-ai/digital-operator-pa run build`.
119
+
120
+ ### Bundled docs, knowledge, roles, and schemas
121
+
122
+ The `dist/` tree carries each internal package's non-code assets too — for
123
+ core that means `docs/`, `knowledge/` (bucket scaffolds), `roles/`, and
124
+ `schema/` all ship inside the tarball.
125
+
126
+ Platform documentation refers to these assets by **symbolic package path**
127
+ (e.g. `@stravica-ai/engineering-pa-core/docs/pa-operating-model.md`). The
128
+ internal packages are `private: true` and never installed under their own
129
+ names, so that path does not exist in `node_modules` verbatim. In an operator
130
+ install it resolves inside the wrapper's bundle:
131
+
132
+ ```
133
+ @stravica-ai/engineering-pa-<pkg>/<subpath>
134
+ → node_modules/@stravica-ai/digital-operator-pa/dist/engineering-pa-<pkg>/<subpath>
135
+ ```
136
+
137
+ For example, `@stravica-ai/engineering-pa-core/knowledge/content-voice/` lives at
138
+ `node_modules/@stravica-ai/digital-operator-pa/dist/engineering-pa-core/knowledge/content-voice/`
139
+ relative to the operator repo root.
140
+
141
+ **Why A2 over A1.** A1 publishes each internal package separately and the
142
+ wrapper depends on them via the registry. That requires every internal to be
143
+ public (or at least published with auth-token coverage), multiplies the
144
+ operator-side auth surface, and creates N-tarballs-per-release coordination.
145
+ A2 keeps internals `private: true`, ships one auditable artefact, and matches
146
+ the v0.1 brief explicitly. Split to A1 later only if multi-version internal
147
+ publishing becomes a real need.
148
+
149
+ ## Scripts
150
+
151
+ ```sh
152
+ pnpm --filter @stravica-ai/digital-operator-pa run build # populate dist/
153
+ pnpm --filter @stravica-ai/digital-operator-pa run test # wrapper-level tests
154
+ pnpm --filter @stravica-ai/digital-operator-pa run dry-publish # build + dry-publish
155
+ pnpm --filter @stravica-ai/digital-operator-pa pack # produce a real tarball
156
+ ```
157
+
158
+ ## Publish target
159
+
160
+ `publishConfig.registry` points at `https://npm.pkg.github.com`. Publishes
161
+ happen via `.github/workflows/publish.yml` on `v*.*.*` tag push or manual
162
+ dispatch. See the root README for the release flow.
163
+
164
+ ## Standards
165
+
166
+ - JS only — `.mjs`, `type: module`.
167
+ - Zero runtime npm dependencies.
168
+ - `node:test` for tests.
169
+ - camelCase JSON.
170
+ - MIT licensed.
package/bin/desk ADDED
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+ import { run } from '../dist/engineering-pa-core/src/desk/cli.mjs';
3
+ run(process.argv.slice(2)).then(
4
+ (code) => process.exit(code ?? 0),
5
+ (err) => {
6
+ console.error(`desk: ${err.message || err}`);
7
+ process.exit(2);
8
+ },
9
+ );
package/bin/distill ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import('../dist/engineering-pa-core/src/distill/cli.mjs').then((m) => m.main(process.argv.slice(2)));
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import('../dist/engineering-pa-cli/src/sync/cli.mjs').then((m) => m.main(process.argv.slice(2)));
package/bin/launch ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import('../dist/engineering-pa-cli/src/launch/cli.mjs').then(async (m) => process.exit(await m.run(process.argv.slice(2))));
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import('../dist/engineering-pa-core/src/memory-sync/cli.mjs').then((m) => m.main(process.argv.slice(2)));
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import('../dist/engineering-pa-migrate-inspect/src/cli.mjs').then((m) => m.main(process.argv.slice(2)).then((c) => process.exit(c)));
package/bin/pa ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import('../dist/engineering-pa-cli/src/pa/cli.mjs').then(async (m) => process.exit(await m.main(process.argv.slice(2))));
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import('../dist/engineering-pa-cli/src/coordinator-hook/cli.mjs').then(async (m) => process.exit(await m.main(process.argv.slice(2))));
package/bin/pa-init ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import('../dist/engineering-pa-scaffold/src/cli.mjs').then((m) => m.main(process.argv.slice(2)));
package/bin/research ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import('../dist/engineering-pa-cli/src/research/cli.mjs').then(async (m) => process.exit(await m.main(process.argv.slice(2))));
package/bin/scheduler ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import('../dist/engineering-pa-cli/src/scheduler/cli.mjs').then(async (m) => process.exit(await m.run(process.argv.slice(2))));
package/bin/secrets ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import('../dist/engineering-pa-cli/src/secrets/cli.mjs').then((m) => m.main(process.argv.slice(2)));
package/bin/slice ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import('../dist/engineering-pa-core/src/slice/cli.mjs').then((m) => m.main(process.argv.slice(2)));
package/bin/smoke ADDED
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+ import { run } from '../dist/engineering-pa-cli/src/smoke/cli.mjs';
3
+ run(process.argv.slice(2)).then(
4
+ (code) => process.exit(code ?? 0),
5
+ (err) => {
6
+ console.error(`smoke: ${err.message || err}`);
7
+ process.exit(2);
8
+ },
9
+ );
package/bin/sync ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import('../dist/engineering-pa-cli/src/sync/cli.mjs').then((m) => m.main(process.argv.slice(2)));
@@ -0,0 +1,205 @@
1
+ # @stravica-ai/engineering-pa-cli
2
+
3
+ Identity: `@stravica-ai/engineering-pa-cli` — operator-facing CLIs.
4
+
5
+ ## Status
6
+
7
+ **Skeleton — v0.1.0.** Workspace-internal, `"private": true`, not individually published.
8
+
9
+ Six bin entries are declared and ship as placeholders that print "not yet implemented" and exit 0. Phase 1 Task 4 ports the real implementations from the predecessor `Stravica/dave` `core/tools/` tree.
10
+
11
+ | Bin | Source | Lands in |
12
+ |---|---|---|
13
+ | `pa` | new (PA-instance control plane) | Task 4 |
14
+ | `desk` | `core/tools/desk/` | Task 4 |
15
+ | `secrets` | `core/tools/secrets/` | Task 4 |
16
+ | `scheduler` | `core/tools/scheduler/` (or equivalent) | Task 4 |
17
+ | `sync` | `core/tools/sync/` | Task 4 |
18
+ | `memory-sync` | `core/tools/memory-sync/` | Task 4 |
19
+
20
+ `pa-init` is intentionally NOT in this package — it lives under `packages/scaffold/bin/pa-init` per the brief's "scaffold/ = pa-init + onboarding flows" mapping.
21
+
22
+ ## Layout
23
+
24
+ ```
25
+ packages/cli/
26
+ index.mjs # shared placeholder entrypoint with runPlaceholder()
27
+ package.json # name, version, bin entries (6), scripts
28
+ README.md # this file
29
+ bin/
30
+ pa
31
+ desk
32
+ secrets
33
+ scheduler
34
+ sync
35
+ memory-sync
36
+ test/
37
+ index.test.mjs
38
+ ```
39
+
40
+ Each bin shim is a one-line Node script that calls `runPlaceholder(toolName, argv)` from `index.mjs`. When Task 4 lands real CLIs, the shims become standard tooling-spec shims pointing at `src/<tool>/cli.mjs` modules and the chokepoint pattern (`src/<tool>/runner.mjs`) per the tooling standard §7.
41
+
42
+ ## Commands
43
+
44
+ In v0.1.0, every bin behaves identically:
45
+
46
+ ```bash
47
+ <tool> --help # prints usage, exits 0
48
+ <tool> # prints "not yet implemented", exits 0
49
+ <tool> anything # prints "unknown verb" to stderr, exits 1
50
+ ```
51
+
52
+ ### `pa project` — project state writes
53
+
54
+ Write-side complement to `desk projects`. Source of truth is
55
+ `projects/<id>/project.json`; the CLI rewrites manifests in place,
56
+ preserving the operator-repo 2-space indent and trailing newline.
57
+
58
+ ```bash
59
+ pa project create <id> --name "..." --category <c> # scaffold projects/<id>/{project.json, README.md}
60
+ [--priority 0|1|2|3] [--owner ...] [--assignee ...] [--summary "..."]
61
+
62
+ pa project status <id> <draft|planned|in-progress|blocked|done|archived>
63
+ # set status; stamps `shipped` on done
64
+
65
+ pa project doc add <id> --label "..." --path "..." [--group "..."]
66
+ # append a doc to a group (default: "Documents")
67
+ pa project doc rm <id> --path "..." # remove the entry whose path matches
68
+
69
+ pa project list [--status ...] [--category ...] [--all] [--json]
70
+ ```
71
+
72
+ `docs` is a **grouped object** keyed by group name → array of `{label, path}`:
73
+
74
+ ```json
75
+ {
76
+ "docs": {
77
+ "Documents": [ { "label": "README", "path": "projects/foo/README.md" } ],
78
+ "Plans": [ { "label": "Brief", "path": "projects/foo/brief.md" } ]
79
+ }
80
+ }
81
+ ```
82
+
83
+ Legacy flat-array manifests are accepted on read and migrated to the
84
+ grouped shape transparently on the first `pa project doc add` write.
85
+ The workspace project-detail page renders both shapes.
86
+
87
+ ### `pa work` — work-item state writes
88
+
89
+ Write-side complement to `desk work`. Items live at
90
+ `work/w-YYYY-MM-DD-NNN.json`; the CLI auto-numbers `NNN` against today's
91
+ existing items.
92
+
93
+ ```bash
94
+ pa work create [--project <id>] --title "..." --category <c>
95
+ [--priority 0|1|2|3] [--summary "..."] [--owner ...] [--assignee ...]
96
+
97
+ pa work status <id> <draft|planned|in-progress|blocked|done|archived>
98
+ # set status; stamps `completedAt` on done
99
+
100
+ pa work list [--project <id>] [--status ...] [--category ...]
101
+ [--mine] [--theirs] [--all] [--json]
102
+ ```
103
+
104
+ `--mine` resolves the PA name from `operator/config/preferences.json`
105
+ (`paName` / `agentName`), defaulting to `"pa"`.
106
+
107
+ ### `pa knowledge` — query the operator's knowledge graph
108
+
109
+ Reads `<repo-root>/operator/knowledge/.graph.json` and exposes five verbs
110
+ for querying the operator's knowledge system. Feeds the third leg of the
111
+ PA operating model — knowledge retrieval discipline — so agents can
112
+ extract the right snippet at the right size instead of reading whole
113
+ files.
114
+
115
+ ```bash
116
+ pa knowledge related <slug> [--in|--out] # 1-hop neighbourhood
117
+ pa knowledge search <term> [--full] # find docs matching a term
118
+ pa knowledge domain <name> # all docs in a domain + internal edges
119
+ pa knowledge orphans [--exclude-stubs] # docs with no inbound edges
120
+ pa knowledge path <a> <b> # shortest path between two docs
121
+ ```
122
+
123
+ Global flag: `--format <table|json|mermaid>` (default: `table`). The
124
+ `json` shape is stable-by-convention — `{ "verb": "<name>", ... }` —
125
+ so downstream roles (e.g. `dispatch-briefer`) can pipe query output
126
+ into their own tooling.
127
+
128
+ Slug resolution accepts exact ids, path-suffix filenames
129
+ (`voice-guide.md` matches `operator/knowledge/writing/voice-guide.md`),
130
+ or title-substring matches. Ambiguous matches exit `2` with the
131
+ candidate list.
132
+
133
+ `search` defaults to a title-only scan for speed. `--full` walks the
134
+ doc body under `<repo-root>/operator/knowledge/`, but returns the same
135
+ ranking (title exact > title substring > body match, tie-break on
136
+ edge count). Zero-result queries exit `0` — empty is a valid answer.
137
+
138
+ **Exit codes**: `0` ok, `1` usage, `2` unknown/ambiguous slug or
139
+ unknown domain, `3` IO (graph missing / unreadable).
140
+
141
+ ### `pa staging-alias` — canonical staging.<site> alias for CF Workers sites
142
+
143
+ Wires a `staging.<hostname>` subdomain to a chosen branch's preview
144
+ deployment on the operator's CF-hosted Workers sites. Built around a
145
+ small router-worker that proxies to the chosen workers.dev preview URL,
146
+ because CF Custom Domains can only target prod deployments and CF
147
+ Preview URLs can only run on `*.workers.dev` (per CF docs 2026-05-21).
148
+
149
+ ```bash
150
+ pa staging-alias set --site <hostname> --branch <branch> [--version <id>]
151
+ pa staging-alias unset --site <hostname> [--keep-worker]
152
+ pa staging-alias status --site <hostname>
153
+ pa staging-alias list
154
+ ```
155
+
156
+ Registered sites are data-driven (`src/staging-alias/sites.mjs`): one
157
+ entry per site, naming the source worker, the router worker, the vault
158
+ key suffix, and the expected CF account-name. Adding a fourth site is
159
+ one entry + a vault-key pair.
160
+
161
+ Every write runs the 6-step CF multi-account drill: load the
162
+ site-specific vault keys, `GET /accounts/{id}`, assert
163
+ `result.name == expectedAccountName`, ABORT on mismatch. The drill
164
+ output is echoed on stdout so the operator sees which account a write
165
+ landed on. Full design + trade-offs: [`docs/staging-alias.md`](./docs/staging-alias.md).
166
+
167
+ ### `pa lint linkedin` — voice-rule linter
168
+
169
+ Lints operator-authored text against a JSON voice-rule corpus and reports
170
+ violations in **alter-format** (`swap → X`, `cut`, `rename`) with rationale and
171
+ source pointer. Deterministic rules (em-dash, banned vocab, reused reaction
172
+ phrases, repeated openers) move out of the writer's prompt and into a validator.
173
+
174
+ ```bash
175
+ pa lint linkedin <input-file> [--rules <path>] [--format <text|json>] \
176
+ [--severity <error|warning|info>] [--surface <name>]
177
+ ```
178
+
179
+ Default corpus resolves to `operator/knowledge/writing/linkedin-rules.json`
180
+ under the repo root. Three detector types (`literal-phrase`, `regex`, `count`)
181
+ and three alter kinds (`swap`, `cut`, `rename`). Full schema + examples:
182
+ [`docs/lint-linkedin.md`](./docs/lint-linkedin.md).
183
+
184
+ This verb uses **lint-semantic exit codes** (ESLint-style) that intentionally
185
+ deviate from §6 below — `0` clean, `1` errors found, `2` warnings only, `3`
186
+ usage/IO/config error. Rationale and full table in the doc.
187
+
188
+ ## Exit codes (tooling standard §6)
189
+
190
+ | Code | Meaning |
191
+ |---|---|
192
+ | 0 | OK (placeholder ran; no work done) |
193
+ | 1 | Usage error (bad flag, unknown verb) |
194
+ | 2 | Logical / operational failure (unused in skeleton) |
195
+ | 3 | Transport / IO failure (unused in skeleton) |
196
+
197
+ ## Tests
198
+
199
+ ```bash
200
+ pnpm --filter @stravica-ai/engineering-pa-cli test
201
+ ```
202
+
203
+ ## Standards
204
+
205
+ Follows the [tooling standard](../../CONTRIBUTING.md#standards): JS only, zero npm deps, `node:test`, `node:util.parseArgs` with `strict: true`, camelCase JSON.
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import('../src/sync/cli.mjs').then((m) => m.main(process.argv.slice(2)));
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import('../src/launch/cli.mjs').then(async (m) => process.exit(await m.run(process.argv.slice(2))));
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import('../src/pa/cli.mjs').then(async (m) => process.exit(await m.main(process.argv.slice(2))));
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env node
2
+ // main() itself fails closed (exit 2) on any config-load or decision-logic
3
+ // error — see cli.mjs. This top-level .catch() is one more layer below
4
+ // that: it only fires on something even main() can't catch (e.g. the
5
+ // dynamic import() itself failing on a corrupted/partial install). Same
6
+ // posture either way — a security-relevant gate fails closed, not open.
7
+ import('../src/coordinator-hook/cli.mjs')
8
+ .then(async (m) => process.exit(await m.main(process.argv.slice(2))))
9
+ .catch((err) => {
10
+ process.stderr.write(`pa-coordinator-hook: fatal error loading hook (${err && err.message}) — failing closed (block)\n`);
11
+ process.exit(2);
12
+ });
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import('../src/research/cli.mjs').then(async (m) => process.exit(await m.main(process.argv.slice(2))));
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import('../src/scheduler/cli.mjs').then(async (m) => process.exit(await m.run(process.argv.slice(2))));
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import('../src/secrets/cli.mjs').then((m) => m.main(process.argv.slice(2)));
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+ import { run } from '../src/smoke/cli.mjs';
3
+ run(process.argv.slice(2)).then(
4
+ (code) => process.exit(code ?? 0),
5
+ (err) => {
6
+ console.error(`smoke: ${err.message || err}`);
7
+ process.exit(2);
8
+ },
9
+ );
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import('../src/sync/cli.mjs').then((m) => m.main(process.argv.slice(2)));
@@ -0,0 +1,118 @@
1
+ {
2
+ "$schema": "https://stravica.dev/schemas/coordinator-allowlist.v1.json",
3
+ "version": 1,
4
+ "_comment": "Core three-tier allowlist for pa-coordinator-hook. Tier 1 tools never invoke the hook (see the settings.json matcher in packages/cli/docs/coordinator-hook.md) so they are not enumerated here for enforcement purposes — the tier1 array below is documentation only. Per-PA extensions belong in an overlay file (~/.claude/coordinator-overlay.json or <workspace>/.claude/coordinator-overlay.json), NOT in this file — this file ships inside the published package and is overwritten on every install/upgrade.",
5
+
6
+ "tier1": [
7
+ "Agent", "TaskStop", "SendMessage", "Workflow", "TaskCreate", "TaskList",
8
+ "TaskGet", "TaskOutput", "TaskUpdate", "Monitor", "ScheduleWakeup",
9
+ "AskUserQuestion", "Skill", "ToolSearch", "EnterPlanMode", "ExitPlanMode"
10
+ ],
11
+
12
+ "tier2": {
13
+ "Bash": {
14
+ "allowPatterns": [
15
+ "^pa\\s",
16
+ "^pnpm exec pa\\s",
17
+ "^desk\\s",
18
+ "^claude-relay\\s",
19
+ "^node\\s+\\S*claude-relay\\S*\\s+",
20
+ "^git status(\\s|$)",
21
+ "^git log(\\s|$)",
22
+ "^git diff --stat(\\s|$)",
23
+ "^git branch --show-current(\\s|$)",
24
+ "^git branch(\\s|$)",
25
+ "^git remote -v(\\s|$)",
26
+ "^gh pr view(\\s|$)",
27
+ "^gh pr list(\\s|$)",
28
+ "^gh pr merge(\\s|$)",
29
+ "^gh pr close(\\s|$)",
30
+ "^gh api\\s+(?!.*(-X|--method)[=\\s]*(POST|PUT|PATCH|DELETE|HEAD|post|put|patch|delete|head)\\b)",
31
+ "^ls(\\s|$)",
32
+ "^pwd(\\s|$)",
33
+ "^hostname(\\s|$)",
34
+ "^date(\\s|$)",
35
+ "^whoami(\\s|$)",
36
+ "^which\\s",
37
+ "^echo\\s"
38
+ ]
39
+ },
40
+ "Read": {
41
+ "_comment": "`<self>` is substituted at runtime: the resolved paName when known (PA_SELF_AGENT env var, else operator/config/preferences.json#paName), else `[^/]+` — the spec's documented fallback ('if unknown, allow any agents/*/ path').",
42
+ "allowPathPatterns": [
43
+ "^\\.session/",
44
+ "^agents/<self>/",
45
+ "^work/",
46
+ "^projects/[^/]+/project\\.json$",
47
+ "^projects/[^/]+/progress\\.md$",
48
+ "(^|/)spawn-log\\.json$",
49
+ "^\\.cache/"
50
+ ],
51
+ "allowAbsolutePathPatterns": [
52
+ "^/private/tmp/",
53
+ "^/tmp/"
54
+ ],
55
+ "blockPathPatterns": [
56
+ "^operator/knowledge/"
57
+ ]
58
+ },
59
+ "Write": {
60
+ "allowPathPatterns": [
61
+ "^agents/<self>/staging/",
62
+ "^agents/<self>/spawn-log\\.json$",
63
+ "^\\.session/",
64
+ "^\\.cache/"
65
+ ],
66
+ "allowAbsolutePathPatterns": [
67
+ "^/private/tmp/",
68
+ "^/tmp/"
69
+ ]
70
+ }
71
+ },
72
+
73
+ "tier3": ["Edit", "NotebookEdit", "Grep", "Glob", "WebFetch", "WebSearch"],
74
+
75
+ "hardDeny": {
76
+ "_comment": "Checked before any allow pattern (core or overlay), for both Bash commands and Read/Write paths. Overlays cannot add, remove, or shadow entries here — see policy.mjs. Not a security sandbox (a determined caller can still smuggle a second command past a naive prefix regex — see bashChainGuard below for the mitigation), just a mechanical backstop against the most obviously destructive one-liners, the specific 'obviously-destructive gh verbs' the spec calls out, and reads/writes of credential material even if some overlay pattern would otherwise match it.",
77
+ "bashPatterns": [
78
+ "rm\\s+-rf\\b",
79
+ "curl[^\\n]*\\|\\s*(sh|bash|zsh)\\b",
80
+ "wget[^\\n]*\\|\\s*(sh|bash|zsh)\\b",
81
+ "^git\\s+push\\b[^\\n]*--force",
82
+ "^git\\s+reset\\s+--hard\\b",
83
+ "^git\\s+clean\\s+-f",
84
+ "^git\\s+branch\\s+-D\\b",
85
+ "--no-verify\\b",
86
+ "--no-gpg-sign\\b",
87
+ "^gh\\s+repo\\s+delete\\b",
88
+ "^gh\\s+(release|workflow|secret|auth)\\s+(delete|remove|logout)\\b",
89
+ "^sudo\\b",
90
+ "^dd\\s+if=",
91
+ "\\bmkfs\\b",
92
+ ">\\s*/dev/(sd|nvme|disk|rdisk)"
93
+ ],
94
+ "bashChainGuardPattern": "[;&|`<>\\n]|\\$\\(",
95
+ "bashChainGuardNote": "Tier2 Bash commands containing a shell-chaining metacharacter (;, &&, ||, |, backtick, $(...), <, >) or an embedded newline are blocked outright even if the leading command (or leading line) matches an allow pattern — a prefix match on 'pa knowledge search foo && rm -rf ~' must not slip through, nor must 'pa knowledge search foo\\nsudo apt-get purge -y openssh-server' or a redirect like 'echo foo > ~/.ssh/authorized_keys'. False positives (e.g. a quoted '&&' inside a search string) are an accepted cost; the hook always suggests a dispatch alternative.",
96
+ "pathPatterns": [
97
+ "\\.vault/",
98
+ "secrets\\.enc\\.json$",
99
+ "\\.ssh/",
100
+ "\\.aws/",
101
+ "(^|/)\\.env$"
102
+ ]
103
+ },
104
+
105
+ "messages": {
106
+ "Bash": "Bash command not on the coordinator allowlist.",
107
+ "Read": "Read path not on the coordinator allowlist.",
108
+ "Write": "Write path not on the coordinator allowlist — any durable file change goes through a dispatch.",
109
+ "Edit": "Dispatch tool-developer or writer for any durable file change — main thread is coordinator-mode.",
110
+ "NotebookEdit": "Dispatch tool-developer or writer for any durable file change — main thread is coordinator-mode.",
111
+ "Grep": "Dispatch Explore for search — main thread is coordinator-mode.",
112
+ "Glob": "Dispatch Explore for file discovery — main thread is coordinator-mode.",
113
+ "WebFetch": "Dispatch `/research` (or a worker) for web work — main thread is coordinator-mode.",
114
+ "WebSearch": "Dispatch `/research` (or a worker) for web work — main thread is coordinator-mode.",
115
+ "operator/knowledge/**": "Use `pa knowledge` (related/search/domain/orphans/path) retrieval verbs — a direct Read bypasses the knowledge graph.",
116
+ "hardDeny": "This command/path matches a hard-deny pattern that no allowlist or overlay can override."
117
+ }
118
+ }