@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,98 @@
1
+ # memory-sync
2
+
3
+ **Identity:** `ai.stravica.ops.memory-sync`
4
+
5
+ Bidirectional mirror between Claude Code's per-project memory cache and the repo-tracked `operator/memory/` store. Installed as SessionStart / SessionEnd hooks so every session boots with the latest memories and every session persists any newly-saved ones back to git.
6
+
7
+ ## Status
8
+
9
+ Implemented:
10
+
11
+ - `pull` — mirror `<repo>/operator/memory/` into `~/.claude/projects/<sanitised>/memory/`
12
+ - `push` — mirror the local cache back into `<repo>/operator/memory/`
13
+ - Worktree detection — commands no-op when run from a worktree (primary checkout is the sync authority)
14
+
15
+ Deferred: dry-run mode, selective filters, conflict flagging.
16
+
17
+ ## Install / invoke
18
+
19
+ Invoked via the `memory-sync` shim:
20
+
21
+ ```
22
+ node <repo>/core/tools/memory-sync/bin/memory-sync <verb>
23
+ ```
24
+
25
+ Hooks in `.claude/settings.json` call this directly. No PATH install is required because the hook already knows the absolute path through `$CLAUDE_PROJECT_DIR`.
26
+
27
+ ## Commands
28
+
29
+ ```
30
+ memory-sync pull Mirror repo memory dir -> local Claude Code cache
31
+ memory-sync push Mirror local Claude Code cache -> repo memory dir
32
+ memory-sync -h, --help Show usage
33
+ ```
34
+
35
+ Both verbs walk up from the current working directory to find the git repo root (a directory containing `.git`). When invoked inside a git worktree (`.git` is a regular file, not a directory) the command logs a skip notice and exits `0` — the primary checkout is the source of truth for memory sync.
36
+
37
+ Mirroring is "source wins, full": every file in the source tree overwrites its counterpart in the destination, and every file in the destination that does not exist in the source is deleted. Empty directories left over after deletion are pruned.
38
+
39
+ ## Exit codes
40
+
41
+ | Code | Meaning |
42
+ |---|---|
43
+ | `0` | OK (including skipped-inside-worktree) |
44
+ | `1` | Usage error (bad verb, extra arguments, missing verb) |
45
+ | `2` | Source dir missing (not in a repo, repo memory dir missing on pull, cache missing on pull/push) |
46
+ | `3` | IO failure (copy / delete / mkdir failed) |
47
+
48
+ The ladder matches the tooling standard (see [`core/knowledge/standards/tooling.md`](../../knowledge/standards/tooling.md) §6) with `2` overloaded to cover the shell-era semantics "the thing you asked to sync is not where it should be" for wire compatibility with the previous `sync.sh` behaviour.
49
+
50
+ ## Operational discipline rules
51
+
52
+ - **Run only from the primary checkout.** Worktrees are explicitly skipped. If a session inside a worktree silently synced, it could race with the primary checkout and overwrite fresh memories with stale ones.
53
+ - **Source wins, unconditionally.** There is no merge. Whichever direction you run, the source side is authoritative and the destination is made to match. Conflict resolution lives outside this tool (use git on the repo side).
54
+ - **The `mirror.mjs` module is the sole filesystem chokepoint.** Every byte written or deleted on behalf of the tool passes through it. Commands may not open their own copy loops.
55
+
56
+ ## Project layout
57
+
58
+ ```
59
+ core/tools/memory-sync/
60
+ bin/memory-sync # node shebang shim — one line
61
+ package.json # name, version, type: module, zero dependencies
62
+ README.md # this file
63
+ src/
64
+ cli.mjs # verb routing, exit-code translation
65
+ cli-support.mjs # ExitError + log() used by cli + commands
66
+ repo.mjs # findRepoRoot, cacheDirFor — pure helpers
67
+ mirror.mjs # THE chokepoint — all FS mutation lives here
68
+ commands/
69
+ pull.mjs # repo -> cache
70
+ push.mjs # cache -> repo
71
+ test/
72
+ cli.test.mjs # end-to-end over a temp repo tree
73
+ repo.test.mjs # repo discovery + cache path sanitisation
74
+ mirror.test.mjs # chokepoint behaviour against fixtures
75
+ ```
76
+
77
+ ## Tests
78
+
79
+ ```
80
+ node --test core/tools/memory-sync/test/*.test.mjs
81
+ ```
82
+
83
+ All tests use `mkdtemp()` under `os.tmpdir()` and clean up afterwards. No test touches the real cache, the real repo's `operator/memory/` tree, or the real `$HOME`. The CLI tests override `HOME` around the call so `os.homedir()` resolves to a fixture-scoped path.
84
+
85
+ ## The tooling standard
86
+
87
+ This tool follows [`core/knowledge/standards/tooling.md`](../../knowledge/standards/tooling.md). In particular:
88
+
89
+ - §2 Node-only — no shell implementation remains.
90
+ - §3 Zero npm dependencies — only `node:*` imports.
91
+ - §4 Layout — bin / src / commands / test as described.
92
+ - §6 Exit codes — `0/1/2/3` ladder.
93
+ - §7 Chokepoint pattern — `mirror.mjs` is the single FS-mutation seam.
94
+ - §11 camelCase JSON — no JSON on the wire yet; the rule still holds when it appears.
95
+
96
+ ## Changelog
97
+
98
+ - **1.0.0** — Rewritten from `sync.sh` to Node. Behaviour preserved (pull/push verbs, exit-code ladder, worktree skip, source-wins mirror semantics). Drops the rsync dependency.
@@ -0,0 +1,243 @@
1
+ # Task Scheduler
2
+
3
+ Cross-platform scheduling abstraction for Dave. Lets the PA manage recurring tasks (distillation sweeps, health checks, sync jobs) using OS-native facilities without knowing the backend details.
4
+
5
+
6
+ ## How it works
7
+
8
+ 1. **detect.mjs** identifies the OS and available scheduling backends
9
+ 2. You write a schedule definition as JSON (see format below)
10
+ 3. **install.mjs** translates cron syntax to the native format and installs it
11
+ 4. **verify.mjs** spawns the schedule's command once under the installed env, as a smoke test
12
+ 5. **list.mjs** shows all Dave-managed schedules for the active backend
13
+ 6. **remove.mjs** cleans up a schedule from the backend
14
+ 7. **index.mjs** re-exports all functions for programmatic use by other tools
15
+
16
+ All tools are Node.js ESM modules (`.mjs`). Each works as both a CLI tool (`node detect.mjs`) and as an importable module (`import { detect } from './detect.mjs'`). Zero external dependencies -- only `node:` built-in modules.
17
+
18
+ All schedule definitions use **cron syntax** as the universal format. The install script handles translation to launchd plists, systemd timers, or Windows schtasks.
19
+
20
+
21
+ ## Supported backends
22
+
23
+ | Backend | OS | Prefix | Notes |
24
+ |---|---|---|---|
25
+ | launchd | macOS | `com.dave.{id}` | Recommended on macOS. Plist in `~/Library/LaunchAgents/` |
26
+ | cron | macOS, Linux | `dave-{id}` | Widely available fallback |
27
+ | systemd | Linux | `dave-{id}` | Recommended on Linux. User-level timer + service units |
28
+ | schtasks | Windows | `dave-{id}` | Windows Task Scheduler via `schtasks.exe` (native cmd/PowerShell) |
29
+ | docker | Any | — | Detected but not directly managed (use for container-based setups) |
30
+
31
+
32
+ ## Schedule definition format
33
+
34
+ Schedule files live in `schedules/` at the repo root. Each is a JSON file:
35
+
36
+ ```json
37
+ {
38
+ "id": "distillation-sweep",
39
+ "name": "Daily Distillation Sweep",
40
+ "schedule": "0 3 * * *",
41
+ "command": "bash core/tools/distill/run.sh",
42
+ "workingDirectory": "${DAVE_ROOT}",
43
+ "enabled": true,
44
+ "backend": null,
45
+ "description": "Run the librarian distillation sweep daily at 3am"
46
+ }
47
+ ```
48
+
49
+ | Field | Required | Description |
50
+ |---|---|---|
51
+ | `id` | Yes | Unique identifier. Used in backend naming (`com.dave.{id}`, `dave-{id}`) |
52
+ | `name` | No | Human-readable name |
53
+ | `schedule` | Yes | Cron expression: `minute hour day-of-month month day-of-week` |
54
+ | `command` | Yes | Shell command to execute |
55
+ | `workingDirectory` | No | Working directory. Supports `${DAVE_ROOT}` variable. Defaults to repo root |
56
+ | `enabled` | No | Set to `false` to skip installation. Defaults to `true` |
57
+ | `backend` | No | Override backend for this schedule. `null` uses the deployment default |
58
+ | `host` | No | Device id or hostname this schedule is pinned to run on. Enforced at `install` and `launch` time — see "Host enforcement" below. Omitting it is a warning-only pass, never a refusal. |
59
+ | `description` | No | Human-readable description |
60
+ | `environment` | No | Map of env vars to set for the scheduled process. **Read the warning below before using.** |
61
+
62
+ The JSON schema is at `packages/core/schema/schedule.json`.
63
+
64
+
65
+ ## Host enforcement
66
+
67
+ A schedule's `host` field is matched against the current machine's
68
+ hostname — exact match, then short-name-before-first-dot (so
69
+ `smarthome01` matches `smarthome01.local`). Two enforcement points:
70
+
71
+ - **`scheduler install`** refuses (exit 2) to install a schedule whose
72
+ `host` doesn't match the installing machine. `--force-host` overrides
73
+ the refusal (still prints a warning, and records it in the result's
74
+ `warnings` array) — for deliberate cross-provisioning.
75
+ - **`launch`** refuses (exit 2) to RUN a task whose schedule declares a
76
+ foreign host. Since `launch` is invoked non-interactively (by cron/
77
+ launchd/systemd, not by an operator typing a flag), the override is an
78
+ env var instead: `DAVE_FORCE_HOST=1`. `--dry-run` is exempt from the
79
+ hard refusal (it never executes anything) but still prints a warning on
80
+ a mismatch.
81
+
82
+ A schedule with no `host` field at all is a warning-only pass in both
83
+ places — host data backfill onto existing schedule files is estate-side,
84
+ not something either tool does automatically.
85
+
86
+ ## Name-collision check
87
+
88
+ `scheduler install` refuses (exit 2) when another `.json` file in the
89
+ same schedules directory declares the same `id` as the one being
90
+ installed. Two different files sharing an id would otherwise silently
91
+ clobber each other's installed backend entry (same cron tag, same
92
+ launchd label) — whichever installs last wins, and the loser's
93
+ association vanishes with no error anywhere. Malformed sibling files are
94
+ skipped (not this check's job to validate every other file in the
95
+ directory), not treated as a collision or a fatal error.
96
+
97
+ ## Common pitfalls
98
+
99
+ ### Do not set `environment.PATH`, `environment.HOME`, or `environment.DAVE_ROOT` unless you know what you're doing
100
+
101
+ The launchd installer auto-injects these three variables (`withLaunchdDefaults`) precisely because launchd's default agent env is minimal (`/usr/bin:/bin:/usr/sbin:/sbin`, no `HOME`) and that minimal env silently breaks anything installed via Homebrew. If you set an explicit `environment.PATH` in your schedule, **your value wins** — and on Apple Silicon Macs that almost always means `/opt/homebrew/bin` is missing, and tools like `sops`, `gh`, `jq` become invisible to the scheduled job.
102
+
103
+ The failure mode is silent: launchd records exit code 78 (`EX_CONFIG`), the StandardErrorPath log is 0 bytes, and the job repeats the same failure every cycle without surfacing.
104
+
105
+ **Rule of thumb:** the `environment` block is for *operator-meaningful* variables (`API_KEY`, `LOG_LEVEL`, `MY_FEATURE_FLAG`). Leave `PATH`, `HOME`, and `DAVE_ROOT` to the installer. If you genuinely need a custom `PATH`, *extend* the installer's default rather than replacing it — start your value with `${PATH}:/your/extra/bin`.
106
+
107
+ ### cron's real environment is minimal — nvm/pnpm/Homebrew are invisible unless the schedule sources them
108
+
109
+ Proven live (w-2026-07-15-003, verified with `env -i`): cron's crond process provides a small fixed environment (`SHELL`, a narrow system `PATH` — `/usr/bin:/bin` — `HOME`, `LOGNAME`/`USER`), NOT a login shell's env. A schedule whose `command` relies on `pnpm`/`node` being on PATH via nvm silently fails to spawn once actually installed, even if it "worked" when tested from an interactive terminal.
110
+
111
+ The generated cron line handles this for you automatically: `scheduler install` detects `$HOME/.nvm/nvm.sh` on the target AT INSTALL TIME and, if present, wraps the command in `bash -c ". $HOME/.nvm/nvm.sh && cd <workDir> && <command> >> /tmp/<agent>-<id>.log 2>&1"`. If no nvm install is found, the preamble is simply omitted — nothing to do for schedules that only need system binaries. `environment.*` values are emitted as `export VAR='val';` statements ahead of the command (not a bare `VAR='val' cd ...` prefix, which in POSIX shell only scopes to the `cd` builtin and never actually reaches the command after `&&` — a real, silent bug the old generator had).
112
+
113
+ `scheduler verify` now runs this EXACT generated line (not a bare `sched.command`), under cron's actual minimal environment — never the verifying shell's `process.env`. This is deliberate: the old verify path inherited the operator's full login-shell env, which reliably masked this whole bug class. If `verify` reports `ok` today, that's an honest signal the schedule will actually fire under real cron.
114
+
115
+ ### Verify your schedule before walking away
116
+
117
+ After installing a schedule, run `verify.mjs` to confirm the command actually launches under the installed env. The verify deliberately uses the same env-derivation logic as the installer, so it catches the env-mismatch class of bugs (narrow PATH, missing HOME, etc.) before the job's first scheduled fire — instead of finding out two weeks later from a stale audit log.
118
+
119
+ ```bash
120
+ node core/tools/scheduler/verify.mjs schedules/my-task.json launchd
121
+ ```
122
+
123
+
124
+ ## Usage
125
+
126
+ ### Detect available backends
127
+
128
+ ```bash
129
+ node core/tools/scheduler/detect.mjs
130
+ ```
131
+
132
+ Output:
133
+ ```json
134
+ {
135
+ "os": "darwin",
136
+ "available": [
137
+ {"backend": "launchd", "recommended": true, "notes": "Native macOS, survives reboots"},
138
+ {"backend": "cron", "recommended": false, "notes": "Available but launchd preferred on macOS"}
139
+ ]
140
+ }
141
+ ```
142
+
143
+ ### Install a schedule
144
+
145
+ ```bash
146
+ node core/tools/scheduler/install.mjs schedules/distillation-sweep.json launchd
147
+ ```
148
+
149
+ ### Verify a schedule
150
+
151
+ After installing, run the schedule's command once under the same environment the installer would use. This catches silent-failure bugs caused by env mismatches (e.g. a narrow `environment.PATH` that masks Homebrew binaries on Apple Silicon).
152
+
153
+ ```bash
154
+ node core/tools/scheduler/verify.mjs schedules/my-task.json launchd
155
+ ```
156
+
157
+ If the backend is omitted, verify auto-detects (the same way `detect.mjs` does). Default timeout is 30 seconds; override with `--timeout`:
158
+
159
+ ```bash
160
+ node core/tools/scheduler/verify.mjs schedules/long-job.json launchd --timeout 60
161
+ ```
162
+
163
+ Exit codes: `0` ok, `1` usage error, `2` command exited non-zero, `3` spawn failure (binary not found), `4` timeout.
164
+
165
+ ### List installed schedules
166
+
167
+ ```bash
168
+ node core/tools/scheduler/list.mjs launchd
169
+ ```
170
+
171
+ Pass no argument to auto-detect the backend:
172
+
173
+ ```bash
174
+ node core/tools/scheduler/list.mjs
175
+ ```
176
+
177
+ #### Listing schedules across hosts
178
+
179
+ `list.mjs <backend>` only sees what the named backend has installed **on the current host**. It reads the running user's crontab, the local `~/Library/LaunchAgents/` directory, the local systemd user units, or the local `schtasks.exe` namespace — there is no remote query. Running `list.mjs cron` on a launchd-recommended macOS workstation returns `(none)` even when a cron job is actively firing on a Linux host elsewhere; that's expected, not a bug. To inspect schedules installed on another machine, run `list.mjs` there directly (`ssh <host> 'cd <repo> && node core/tools/scheduler/list.mjs <backend>'` is a fine pattern). The `/schedule` slash command and the schedules workspace page surface the *intent* (the JSON definitions in `schedules/`); for the *actual installed state*, you must query each host.
180
+
181
+ ### Remove a schedule
182
+
183
+ ```bash
184
+ node core/tools/scheduler/remove.mjs distillation-sweep launchd
185
+ ```
186
+
187
+ Add `--delete-file` to also remove the JSON definition:
188
+
189
+ ```bash
190
+ node core/tools/scheduler/remove.mjs distillation-sweep launchd --delete-file
191
+ ```
192
+
193
+ ### Programmatic usage
194
+
195
+ ```js
196
+ import { detect, install, list, remove, verify } from './core/tools/scheduler/index.mjs';
197
+
198
+ const backends = detect();
199
+ console.log(backends);
200
+
201
+ install('schedules/my-task.json', 'launchd');
202
+ const v = await verify('schedules/my-task.json', { backend: 'launchd', timeoutMs: 30000 });
203
+ if (v.result !== 'ok') console.error('schedule does not start cleanly:', v);
204
+
205
+ console.log(list('launchd'));
206
+ remove('my-task', 'launchd', { deleteFile: true });
207
+ ```
208
+
209
+
210
+ ## Integration with /init
211
+
212
+ During environment discovery, the PA should run `detect.mjs` and store the result in `.dave/config.json` under the `scheduler` key:
213
+
214
+ ```json
215
+ {
216
+ "scheduler": {
217
+ "backend": "launchd",
218
+ "detectedAt": "2026-04-13T12:00:00Z",
219
+ "available": ["launchd", "cron"]
220
+ }
221
+ }
222
+ ```
223
+
224
+ The `/schedule` slash command reads this config and uses the stored backend as the default.
225
+
226
+
227
+ ## Security notes
228
+
229
+ - All tools are intentionally simple and auditable -- users should read them before granting scheduler access
230
+ - Scheduled tasks run as the current user with that user's permissions
231
+ - No elevated/root permissions are requested
232
+ - Log files are written to `/tmp/` by default (configurable per schedule)
233
+ - The tools never auto-install without explicit invocation
234
+
235
+
236
+ ## Tests
237
+
238
+ ```bash
239
+ node --test packages/core/test/scheduler/*.test.mjs
240
+ node --test packages/cli/test/scheduler/*.test.mjs packages/cli/test/launch/*.test.mjs
241
+ ```
242
+
243
+ The install tests cover the pure plist/cron/systemd/schtasks builders, `withLaunchdDefaults`, the env-complete cron generator (`buildCronCommand`/`buildCronLine` — nvm preamble, log redirect, `export`-based env propagation), `validateWorkDir` (unresolved-variable / node_modules-trap / nonexistent-dir refusals), `evaluateHostGate`, and `checkNameCollision`. The verify tests cover the env-derivation logic (including cron's new minimal-env honesty), the spawn outcomes (success / non-zero / spawn-failure / timeout), the generated-cron-line execution path, and a regression case for issue #68 (an explicit narrow PATH masking a binary that's available at the parent shell's PATH). `host.test.mjs` covers hostname normalisation/matching in isolation. The CLI-level suites (`packages/cli/test/scheduler/cli-bin.test.mjs`, `packages/cli/test/launch/cli.test.mjs`) exercise host refusal, `--force-host`/`DAVE_FORCE_HOST=1` overrides, and name-collision refusal through the real bins.
@@ -0,0 +1,150 @@
1
+ # slice
2
+
3
+ `ai.stravica.ops.slice` — operator profile slice generator.
4
+
5
+ Produces a compact "boot slice" of the operator's profile -- a short markdown
6
+ document that loads into the PA's context at every session start, in place of
7
+ the full ~18 KB `operator/profile/profile.md`. The full profile remains the
8
+ source of truth; the slice is a fresh snapshot, regenerated periodically (a
9
+ daily cron is the intended cadence — wired separately by the scheduler).
10
+
11
+ Architecturally the slice replaces a chronic over-load on boot: the canonical
12
+ profile, accumulated rules, and per-domain context can amount to 80--120 KB
13
+ of context every session start, before the operator's first message. The
14
+ slice trades freshness (stale by up to 24h is fine) for cheapness (~1--2 KB
15
+ on boot).
16
+
17
+ ## Status
18
+
19
+ Implemented: `generate`, `generate --dry-run`, `--help`.
20
+
21
+ Bundled templates:
22
+
23
+ - `dave-boot` — the original use case. Six-section operator-boot card aimed
24
+ at single-operator PA instances like Dave.
25
+
26
+ Custom templates are loaded with `--template <path>`.
27
+
28
+ ## Install / invoke
29
+
30
+ Called via the bin shim:
31
+
32
+ ```
33
+ slice generate dave-boot \
34
+ --profile /path/to/operator/profile/profile.md \
35
+ --output /path/to/operator/profile/slices/dave-boot.md
36
+ ```
37
+
38
+ Optional inputs:
39
+
40
+ - `--learned-rules <path>` — `learned-rules.md` (~50 KB), drives the
41
+ "load-bearing rules" section.
42
+ - `--observations <dir>` — a directory of recent observation `.md` files;
43
+ the generator filters to mtime within the last 21 days (mtimes older than
44
+ that are dropped). Files prefixed `_` (e.g. `_archive.md`) are always
45
+ skipped.
46
+
47
+ ## Commands
48
+
49
+ ### `slice generate <name>`
50
+
51
+ 1. Load inputs (`profile.md` is required; `learned-rules.md` and
52
+ observations dir are optional).
53
+ 2. Load the bundled prompt template at
54
+ `src/slice/prompts/<name>.md` (or `--template <path>` if supplied) and
55
+ substitute the assembled inputs into the `{{INPUTS}}` placeholder.
56
+ 3. Invoke `claude --print --permission-mode bypassPermissions
57
+ --no-session-persistence --name slice-<ts>` with the assembled prompt as
58
+ the positional argument. The prompt is handed via `child_process.spawn`
59
+ with `shell: false` — no shell interpolation, the inputs are safe even if
60
+ they contain shell metacharacters.
61
+ 4. Validate the response against the required-headers contract (six
62
+ sections: Operator basics, Mission framing, Active projects, Active
63
+ relationships, Load-bearing rules right now, State of play). A response
64
+ missing any required header is treated as a generator failure (exit 2)
65
+ and no file is written.
66
+ 5. Validate the size against the 2 KB soft budget. Over-budget responses
67
+ produce a stderr warning but are written anyway — better to ship a 3 KB
68
+ slice than skip a regeneration.
69
+ 6. Write the response to the configured `--output` path. Parent directories
70
+ are created if missing.
71
+
72
+ #### Flags
73
+
74
+ - `--profile <path>` Path to `profile.md` (required).
75
+ - `--learned-rules <path>` Optional.
76
+ - `--observations <dir>` Optional.
77
+ - `--output <path>` Where to write the slice (required).
78
+ - `--template <path>` Override the bundled template path.
79
+ - `--runs-log <path>` Append one JSON audit line per invocation to
80
+ this file. Default-off. See **Audit log** below.
81
+ - `--dry-run` Build the prompt and report; skip the claude
82
+ call and the file write.
83
+ - `-h`, `--help` Show usage.
84
+
85
+ ### Exit codes
86
+
87
+ - `0` ok — slice generated, validated, written.
88
+ - `1` usage error (missing/extra flags, missing slice name or template).
89
+ - `2` operational failure (missing input file, missing template,
90
+ validation failure on the generator's response).
91
+ - `3` claude transport failure (claude binary exited non-zero).
92
+
93
+ ### Audit log (`--runs-log`)
94
+
95
+ When `--runs-log <path>` is passed, each invocation appends one JSON line to
96
+ the file in the canonical shape consumed by the `tasks` health monitor:
97
+
98
+ ```json
99
+ {"ts":"2026-05-21T03:00:01Z","status":"ok","exitCode":0,"durationSec":42,"dryRun":false,"outputBytes":1843}
100
+ ```
101
+
102
+ Status vocabulary (closed):
103
+
104
+ - `ok` — slice generated, validated, written.
105
+ - `noop-dry-run` — `--dry-run` path; no claude call, no file write.
106
+ - `fail-claude` — claude exited non-zero (transport failure, exit 3).
107
+ - `fail-validation` — claude returned content missing required headers (exit 2).
108
+ - `fail-prereq` — input loading failed (missing profile / observations / template, exit 2).
109
+ - `fail-write` — writing the slice output file failed (permissions, ENOSPC, etc., exit 2).
110
+ - `fail-usage` — early arg-validation failed (missing required option, exit 1).
111
+ - `fail-unexpected` — any other thrown exception (defensive catch-all so
112
+ cron failures never disappear silently).
113
+
114
+ `reason` is omitted on `ok` / `noop-dry-run`. `outputBytes` is `null` on
115
+ paths that didn't produce a file. Every non-help invocation appends
116
+ exactly one audit line — including the throw paths above — so the
117
+ freshness monitor can distinguish "tool exploded" from "tool was never
118
+ invoked".
119
+
120
+ When `slice` runs on a schedule (e.g. `30 3 * * *` for nightly slice
121
+ regeneration), the `--runs-log` path becomes the freshness signal for the
122
+ task — point it at a per-task `runs.jsonl` (one task per file; the
123
+ monitor uses `tail -n 1`). The default is **off** so human hand-invocations
124
+ don't pollute the freshness signal of the scheduled run.
125
+
126
+ Audit writes are best-effort: a failed audit append (missing dir, ENOSPC,
127
+ etc.) is logged to stderr but does NOT change the process exit code. A
128
+ lost audit line is preferable to misclassifying a successful slice
129
+ regeneration as a transport failure.
130
+
131
+ ## Output contract
132
+
133
+ A single markdown file at the `--output` path. Plain markdown, no
134
+ front-matter, no JSON envelope. The PA's boot rule reads it the same way it
135
+ reads the full profile.
136
+
137
+ Soft target: under 2 KB / ~30 lines. Hard requirement: the six section
138
+ headers must be present.
139
+
140
+ ## Design notes
141
+
142
+ - The Claude invocation is funnelled through the same chokepoint runner
143
+ used by `distill` (`packages/core/src/distill/runner.mjs`). One place
144
+ in core/src spawns external processes.
145
+ - The prompt template is an `.md` file with a `{{INPUTS}}` placeholder, not
146
+ a hardcoded string, so an operator can drop in a custom slice template
147
+ (e.g. `--template ./my-slice.md`) without forking the package.
148
+ - No git, no commit, no push — `slice` is a pure file writer. The per-host
149
+ `sync` tool picks up any changes the slice produced on its next tick.
150
+ - Tests use a fake runner; no real claude calls in CI.
@@ -0,0 +1,88 @@
1
+ # Upstream Issue Filing
2
+
3
+ In v2 the platform ships as the `@stravica-ai/digital-operator-pa` npm package and is developed in the `Stravica/engineering-pa-dev` repository. When you find a bug or gap in the platform, file a GitHub issue against `Stravica/engineering-pa-dev` so the fix lands in one place and reaches every operator via the next package release.
4
+
5
+ This document is the lookup-on-demand reference for that workflow. The CLAUDE.md core rule "Platform code is read-only; never edit `node_modules/`" establishes the discipline; this doc is the procedure.
6
+
7
+
8
+ ## When to file an issue
9
+
10
+ - A bug in any platform-supplied module (wrong behaviour, broken invariant, regression).
11
+ - A platform enhancement request (new capability, better ergonomics, missing flag).
12
+ - Platform docs are wrong, unclear, or out of date.
13
+ - A platform tool violates the tooling standard at `@stravica-ai/engineering-pa-core/docs/standards/tooling.md`.
14
+
15
+
16
+ ## When NOT to file
17
+
18
+ - Bugs in your operator content (`operator/`, `work/`, `projects/`, `agents/`) — those are local to your repo. Fix them directly.
19
+ - Operator-specific workflow questions — those do not generalise to other operators.
20
+ - Anything you can fix locally by adjusting your `operator/extensions/` without touching the package.
21
+ - Questions that are really requests for the operator's judgement.
22
+
23
+
24
+ ## How to file
25
+
26
+ Use `gh issue create` against `Stravica/engineering-pa-dev`. Compose the body in a structured way:
27
+
28
+ ```
29
+ gh issue create \
30
+ --repo Stravica/engineering-pa-dev \
31
+ --title "<short title, <=160 chars>" \
32
+ --body "$(cat <<'EOF'
33
+ ## Type
34
+ bug | enhancement | docs | question
35
+
36
+ ## Summary
37
+ What, and why.
38
+
39
+ ## Reproducer
40
+ (Required for bug.)
41
+ Steps to reproduce against a clean operator instance.
42
+
43
+ ## Environment
44
+ - Package version: <pnpm list @stravica-ai/digital-operator-pa --depth=0>
45
+ - Node version: <node --version>
46
+ - OS family: <linux | macos | windows>
47
+
48
+ ## Proposed solution
49
+ (Optional.)
50
+
51
+ ## Work-item ref
52
+ (Optional — local work-item ID for trace-back only; we don't read the file.)
53
+ EOF
54
+ )"
55
+ ```
56
+
57
+ Check for duplicates first:
58
+
59
+ ```
60
+ gh issue list --repo Stravica/engineering-pa-dev --search "<keywords>"
61
+ ```
62
+
63
+
64
+ ## Never include in an upstream issue
65
+
66
+ Upstream issues are public during dev and stay public after the repo flips to `Stravica/engineering-pa`. The following categories of content must not appear in any field you submit:
67
+
68
+ - Secrets of any kind (API keys, tokens, passwords).
69
+ - Anything read from `.vault/` or any `.env` file.
70
+ - Contents of `operator/profile/` — that is the operator's private profile.
71
+ - Contents of `operator/memory/` — that is your learned-memory store.
72
+ - Contents of `.session/environment.json` — hostname, paths, network posture.
73
+ - Machine hostnames. OS family (`linux` / `macos` / `windows`) is the right granularity.
74
+ - Work-item bodies from your `work/` directory. A `workItemRef` string is fine for trace-back; the body is not.
75
+
76
+ If your issue legitimately needs to reference a denied root, move the relevant data out of that root first.
77
+
78
+
79
+ ## Authentication
80
+
81
+ `gh` must be authenticated with `repo:issue:write` on `Stravica/engineering-pa-dev`:
82
+
83
+ ```
84
+ gh auth login
85
+ gh auth status
86
+ ```
87
+
88
+ If `gh` is missing or unauthenticated, surface that fact and stop.
@@ -0,0 +1,29 @@
1
+ # Working Directory vs Operator Repo Root
2
+
3
+ Your shell `cwd` when launched is your agent run folder: `agents/<paName>/`. The **operator repo root** is two directory levels up from that cwd. These are different places and the distinction matters.
4
+
5
+
6
+ ## Never hard-code the operator repo root
7
+
8
+ The absolute path depends on where the operator's repo was cloned on the current machine — it differs per operator and per device. Always derive it dynamically:
9
+
10
+ - Env var (preferred): `$DAVE_ROOT` or `$PA_REPO_ROOT` is exported by the platform launcher for processes it runs.
11
+ - Session manifest: `machine.daveRoot` in `.session/environment.json` (populated by `pa-init` and the platform launcher).
12
+ - Shell derivation: `OP_ROOT="$(cd "$(pwd)/../.." && pwd)"` from the run folder.
13
+
14
+ Platform tools that need the operator repo root accept it via:
15
+
16
+ 1. An explicit caller argument (always wins).
17
+ 2. `DAVE_REPO_ROOT` or `PA_REPO_ROOT` environment variable.
18
+ 3. A `.git`-walk upwards from `process.cwd()`.
19
+
20
+ That fallback chain is consistent across `desk`, `distill`, `memory-sync`, `sync`, and the workspace server.
21
+
22
+
23
+ ## Rules
24
+
25
+ - Work items (`work/`), projects (`projects/`), knowledge (`operator/knowledge/`), schedules (`schedules/`), and session data (`.session/`) all live at the **operator repo root**, not your cwd.
26
+ - Reference them either as absolute paths built from `$DAVE_ROOT`, or as `<repo-root>/...` in prose — never as `./tools/...` or `./.session/...`. A bare relative path will silently resolve inside `agents/<paName>/` and either fail or write to the wrong place.
27
+ - When running shell commands, use absolute paths built from `$DAVE_ROOT`. If you must `cd` to the repo root, do `cd "$DAVE_ROOT" && ...`.
28
+ - Do NOT create a `.session/` directory inside your agent run folder. The canonical session file is `<repo-root>/.session/environment.json`.
29
+ - Platform code lives in `node_modules/@stravica-ai/digital-operator-pa/` (and its internal packages). Don't try to address it by relative path — use the package's published CLI shims (`node_modules/.bin/<name>`) or import its modules by package path.
@@ -0,0 +1,46 @@
1
+ # Workspace Operations
2
+
3
+ The workspace server provides a web interface for content that does not fit well in the CLI. Managed via `ws.mjs` — always use the CLI, never raw process commands.
4
+
5
+
6
+ ## When to use the workspace
7
+
8
+ - Long-form content (reports, documentation, analysis)
9
+ - Structured data (tables, comparisons)
10
+ - Content that benefits from formatting (HTML, styled text)
11
+ - Dashboards and status overviews
12
+
13
+
14
+ ## Managing the workspace server
15
+
16
+ ```
17
+ node core/tools/workspace/ws.mjs start [--port N] [--no-open] # Start as background daemon
18
+ node core/tools/workspace/ws.mjs stop # Stop the server
19
+ node core/tools/workspace/ws.mjs restart [--port N] [--no-open] # Stop then start
20
+ node core/tools/workspace/ws.mjs status # Show status (PID, port, uptime)
21
+ node core/tools/workspace/ws.mjs open # Open browser to server URL
22
+ ```
23
+
24
+ Port resolution order: default 4200 -> `operator/config/preferences.json` key `workspacePort` -> `--port` CLI flag.
25
+
26
+ Do NOT use `lsof`, `kill`, or raw process management to manage the workspace server. `ws.mjs` handles all of this cross-platform.
27
+
28
+ Content served by the workspace is read fresh on every request, so file edits are picked up on browser refresh (Cmd+R / Ctrl+R). Live-reload / SSE has been temporarily removed pending a workspace rebuild — refresh the browser manually to see changes. You only need to restart the server when `server.mjs` or `api.mjs` themselves are modified.
29
+
30
+
31
+ ## Available pages
32
+
33
+ - `/home.html` — dashboard overview
34
+ - `/projects.html` — project cards with detail drill-down
35
+ - `/project-detail.html` — single project view with work items
36
+ - `/tasks.html` — work item management
37
+ - `/knowledge.html` — knowledge browser
38
+ - `/secrets.html` — secrets management UI
39
+ - `/schedules.html` — scheduled/recurring tasks
40
+ - `/viewer.html?file=path/to/file.md` — generic content viewer (renders markdown to HTML)
41
+ - `/onboarding.html` — first-run setup (normally used once)
42
+
43
+
44
+ ## Extending the workspace
45
+
46
+ Custom pages go in `operator/extensions/workspace/`. The server serves files from both `core/tools/workspace/app/` and the extensions directory.