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