aimeat 1.33.2 → 1.34.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 (291) hide show
  1. package/dist/locales/en.json +388 -14
  2. package/dist/locales/fi.json +388 -14
  3. package/dist/public/cortex-bundled/aimeat-charts.js +3 -3
  4. package/dist/public/cortex-bundled/aimeat-charts.yaml +3 -3
  5. package/dist/public/cortex-bundled/aimeat-i18n.js +123 -0
  6. package/dist/public/cortex-bundled/aimeat-i18n.yaml +64 -0
  7. package/dist/public/css/views/landing.css +2 -0
  8. package/dist/public/css/views/secretary.css +412 -2
  9. package/dist/public/js/services/apps.js +4 -2
  10. package/dist/public/js/services/memory.js +9 -3
  11. package/dist/public/js/services/offers.js +1 -1
  12. package/dist/public/js/services/organisms.js +49 -17
  13. package/dist/public/js/services/secretary-helpers.js +262 -17
  14. package/dist/public/js/services/secretary-policy.js +1 -0
  15. package/dist/public/js/services/secretary-rules.js +70 -0
  16. package/dist/public/js/theme.js +20 -0
  17. package/dist/public/lib/VENDORED-STYLING.md +31 -0
  18. package/dist/public/lib/aimeat-daisyui-bridge.css +48 -0
  19. package/dist/public/lib/chartjs@4.js +14 -0
  20. package/dist/public/lib/daisyui@5.css +7 -0
  21. package/dist/public/lib/tailwindcss@4.js +8 -0
  22. package/dist/public/llms-template.txt +9 -6
  23. package/dist/public/showroom.html +104 -0
  24. package/dist/public/showroom.js +247 -0
  25. package/dist/public/spa.html +18 -16
  26. package/dist/public/views/aimeat-os.js +3 -2
  27. package/dist/public/views/landing.js +50 -6
  28. package/dist/public/views/profile/agents/agent-card.js +7 -0
  29. package/dist/public/views/profile/agents/state-detector.js +6 -0
  30. package/dist/public/views/profile/agents/tab-integration.js +6 -0
  31. package/dist/public/views/profile/apps-tab.js +46 -0
  32. package/dist/public/views/profile/extensions-tab.js +4 -0
  33. package/dist/public/views/profile/inbox-tab.js +1 -1
  34. package/dist/public/views/profile/landing-page.js +8 -3
  35. package/dist/public/views/profile/memory-tab.js +37 -6
  36. package/dist/public/views/profile/organisms/home.js +32 -0
  37. package/dist/public/views/profile/organisms/workspace-list.js +36 -5
  38. package/dist/public/views/profile/organisms/workspace.js +29 -4
  39. package/dist/public/views/profile/organisms-tab.js +61 -8
  40. package/dist/public/views/secretary/calendar.js +327 -0
  41. package/dist/public/views/secretary/cards-reach.js +16 -17
  42. package/dist/public/views/secretary/cards.js +173 -66
  43. package/dist/public/views/secretary/dashboard.js +551 -0
  44. package/dist/public/views/secretary/quality.js +156 -0
  45. package/dist/public/views/secretary/use-autonomy.js +17 -2
  46. package/dist/public/views/secretary/use-freshness.js +50 -0
  47. package/dist/public/views/secretary/use-intake.js +23 -4
  48. package/dist/public/views/secretary/use-layout.js +122 -0
  49. package/dist/public/views/secretary/use-quick-actions.js +98 -0
  50. package/dist/public/views/secretary/use-specialists.js +103 -0
  51. package/dist/public/views/secretary/use-triggers.js +159 -0
  52. package/dist/public/views/secretary/use-whats-next.js +340 -0
  53. package/dist/public/views/secretary/workflow-design.js +112 -0
  54. package/dist/public/views/secretary.js +663 -39
  55. package/dist/scripts/check-no-max-tokens.d.ts +2 -0
  56. package/dist/scripts/check-no-max-tokens.d.ts.map +1 -0
  57. package/dist/scripts/check-no-max-tokens.js +71 -0
  58. package/dist/scripts/check-no-max-tokens.js.map +1 -0
  59. package/dist/src/data/aimeat-iam-package.d.ts +25 -0
  60. package/dist/src/data/aimeat-iam-package.d.ts.map +1 -0
  61. package/dist/src/data/aimeat-iam-package.js +312 -0
  62. package/dist/src/data/aimeat-iam-package.js.map +1 -0
  63. package/dist/src/data/aimeat-marketplace-package.d.ts +25 -0
  64. package/dist/src/data/aimeat-marketplace-package.d.ts.map +1 -0
  65. package/dist/src/data/aimeat-marketplace-package.js +231 -0
  66. package/dist/src/data/aimeat-marketplace-package.js.map +1 -0
  67. package/dist/src/data/app-templates.d.ts +48 -0
  68. package/dist/src/data/app-templates.d.ts.map +1 -0
  69. package/dist/src/data/app-templates.js +856 -0
  70. package/dist/src/data/app-templates.js.map +1 -0
  71. package/dist/src/data/example-packages.d.ts.map +1 -1
  72. package/dist/src/data/example-packages.js +3 -1
  73. package/dist/src/data/example-packages.js.map +1 -1
  74. package/dist/src/generated/api-types.d.ts +380 -5
  75. package/dist/src/generated/api-types.d.ts.map +1 -1
  76. package/dist/src/generated/prisma-postgres/edge.js +10 -3
  77. package/dist/src/generated/prisma-postgres/index-browser.js +7 -0
  78. package/dist/src/generated/prisma-postgres/index.d.ts +205 -2
  79. package/dist/src/generated/prisma-postgres/index.js +10 -3
  80. package/dist/src/generated/prisma-postgres/package.json +1 -1
  81. package/dist/src/generated/prisma-postgres/schema.prisma +23 -13
  82. package/dist/src/generated/prisma-postgres/wasm.js +10 -3
  83. package/dist/src/mcp/annotations.d.ts.map +1 -1
  84. package/dist/src/mcp/annotations.js +1 -0
  85. package/dist/src/mcp/annotations.js.map +1 -1
  86. package/dist/src/mcp/catalog/definitions.d.ts.map +1 -1
  87. package/dist/src/mcp/catalog/definitions.js +16 -1
  88. package/dist/src/mcp/catalog/definitions.js.map +1 -1
  89. package/dist/src/mcp/catalog/surfaces.js +3 -3
  90. package/dist/src/mcp/catalog/surfaces.js.map +1 -1
  91. package/dist/src/mcp/index.d.ts +3 -0
  92. package/dist/src/mcp/index.d.ts.map +1 -1
  93. package/dist/src/mcp/index.js +11 -0
  94. package/dist/src/mcp/index.js.map +1 -1
  95. package/dist/src/mcp/organisms.d.ts.map +1 -1
  96. package/dist/src/mcp/organisms.js +48 -8
  97. package/dist/src/mcp/organisms.js.map +1 -1
  98. package/dist/src/mcp/workspaces.d.ts.map +1 -1
  99. package/dist/src/mcp/workspaces.js +6 -4
  100. package/dist/src/mcp/workspaces.js.map +1 -1
  101. package/dist/src/models/offer-schemas.d.ts +8 -8
  102. package/dist/src/routes/ai.d.ts +8 -4
  103. package/dist/src/routes/ai.d.ts.map +1 -1
  104. package/dist/src/routes/ai.js +38 -14
  105. package/dist/src/routes/ai.js.map +1 -1
  106. package/dist/src/routes/app-grants.d.ts +2 -0
  107. package/dist/src/routes/app-grants.d.ts.map +1 -1
  108. package/dist/src/routes/app-grants.js +7 -1
  109. package/dist/src/routes/app-grants.js.map +1 -1
  110. package/dist/src/routes/app-templates.d.ts +16 -0
  111. package/dist/src/routes/app-templates.d.ts.map +1 -0
  112. package/dist/src/routes/app-templates.js +40 -0
  113. package/dist/src/routes/app-templates.js.map +1 -0
  114. package/dist/src/routes/apps.d.ts.map +1 -1
  115. package/dist/src/routes/apps.js +55 -5
  116. package/dist/src/routes/apps.js.map +1 -1
  117. package/dist/src/routes/auth.d.ts +3 -0
  118. package/dist/src/routes/auth.d.ts.map +1 -1
  119. package/dist/src/routes/auth.js +9 -4
  120. package/dist/src/routes/auth.js.map +1 -1
  121. package/dist/src/routes/bootstrap.d.ts.map +1 -1
  122. package/dist/src/routes/bootstrap.js +1 -0
  123. package/dist/src/routes/bootstrap.js.map +1 -1
  124. package/dist/src/routes/generator.d.ts.map +1 -1
  125. package/dist/src/routes/generator.js +3 -2
  126. package/dist/src/routes/generator.js.map +1 -1
  127. package/dist/src/routes/lib-ai.d.ts +0 -1
  128. package/dist/src/routes/lib-ai.d.ts.map +1 -1
  129. package/dist/src/routes/lib-ai.js +13 -6
  130. package/dist/src/routes/lib-ai.js.map +1 -1
  131. package/dist/src/routes/lib-header.d.ts +2 -0
  132. package/dist/src/routes/lib-header.d.ts.map +1 -1
  133. package/dist/src/routes/lib-header.js +7 -16
  134. package/dist/src/routes/lib-header.js.map +1 -1
  135. package/dist/src/routes/lib-markdown.d.ts +18 -0
  136. package/dist/src/routes/lib-markdown.d.ts.map +1 -0
  137. package/dist/src/routes/lib-markdown.js +236 -0
  138. package/dist/src/routes/lib-markdown.js.map +1 -0
  139. package/dist/src/routes/libs.d.ts +22 -0
  140. package/dist/src/routes/libs.d.ts.map +1 -1
  141. package/dist/src/routes/libs.js +133 -10
  142. package/dist/src/routes/libs.js.map +1 -1
  143. package/dist/src/routes/memory.d.ts.map +1 -1
  144. package/dist/src/routes/memory.js +21 -2
  145. package/dist/src/routes/memory.js.map +1 -1
  146. package/dist/src/routes/openrouter.d.ts +4 -0
  147. package/dist/src/routes/openrouter.d.ts.map +1 -1
  148. package/dist/src/routes/openrouter.js +17 -0
  149. package/dist/src/routes/openrouter.js.map +1 -1
  150. package/dist/src/routes/organisms.d.ts.map +1 -1
  151. package/dist/src/routes/organisms.js +107 -7
  152. package/dist/src/routes/organisms.js.map +1 -1
  153. package/dist/src/routes/portal.d.ts +9 -0
  154. package/dist/src/routes/portal.d.ts.map +1 -1
  155. package/dist/src/routes/portal.js +1 -1
  156. package/dist/src/routes/portal.js.map +1 -1
  157. package/dist/src/routes/public-stats.d.ts +3 -0
  158. package/dist/src/routes/public-stats.d.ts.map +1 -1
  159. package/dist/src/routes/public-stats.js +9 -2
  160. package/dist/src/routes/public-stats.js.map +1 -1
  161. package/dist/src/routes/secretary.d.ts +29 -0
  162. package/dist/src/routes/secretary.d.ts.map +1 -0
  163. package/dist/src/routes/secretary.js +220 -0
  164. package/dist/src/routes/secretary.js.map +1 -0
  165. package/dist/src/routes/specialists.d.ts.map +1 -1
  166. package/dist/src/routes/specialists.js +21 -0
  167. package/dist/src/routes/specialists.js.map +1 -1
  168. package/dist/src/routes/subdomains.js +1 -1
  169. package/dist/src/routes/subdomains.js.map +1 -1
  170. package/dist/src/routes/workflows.d.ts +9 -3
  171. package/dist/src/routes/workflows.d.ts.map +1 -1
  172. package/dist/src/routes/workflows.js +9 -3
  173. package/dist/src/routes/workflows.js.map +1 -1
  174. package/dist/src/server-bootstrap/routes-loader.d.ts.map +1 -1
  175. package/dist/src/server-bootstrap/routes-loader.js +4 -0
  176. package/dist/src/server-bootstrap/routes-loader.js.map +1 -1
  177. package/dist/src/server-bootstrap/service-init.d.ts.map +1 -1
  178. package/dist/src/server-bootstrap/service-init.js +7 -0
  179. package/dist/src/server-bootstrap/service-init.js.map +1 -1
  180. package/dist/src/server-bootstrap/static-files.d.ts +4 -0
  181. package/dist/src/server-bootstrap/static-files.d.ts.map +1 -1
  182. package/dist/src/server-bootstrap/static-files.js +18 -0
  183. package/dist/src/server-bootstrap/static-files.js.map +1 -1
  184. package/dist/src/services/archive.d.ts +74 -0
  185. package/dist/src/services/archive.d.ts.map +1 -0
  186. package/dist/src/services/archive.js +132 -0
  187. package/dist/src/services/archive.js.map +1 -0
  188. package/dist/src/services/cortex-seeder.d.ts +4 -1
  189. package/dist/src/services/cortex-seeder.d.ts.map +1 -1
  190. package/dist/src/services/cortex-seeder.js +25 -6
  191. package/dist/src/services/cortex-seeder.js.map +1 -1
  192. package/dist/src/services/directory.d.ts.map +1 -1
  193. package/dist/src/services/directory.js +3 -2
  194. package/dist/src/services/directory.js.map +1 -1
  195. package/dist/src/services/generator-prompt-seeds.d.ts.map +1 -1
  196. package/dist/src/services/generator-prompt-seeds.js +5 -4
  197. package/dist/src/services/generator-prompt-seeds.js.map +1 -1
  198. package/dist/src/services/message-send.d.ts.map +1 -1
  199. package/dist/src/services/message-send.js +14 -0
  200. package/dist/src/services/message-send.js.map +1 -1
  201. package/dist/src/services/organism-search.d.ts +6 -2
  202. package/dist/src/services/organism-search.d.ts.map +1 -1
  203. package/dist/src/services/organism-search.js +2 -2
  204. package/dist/src/services/organism-search.js.map +1 -1
  205. package/dist/src/services/owner-memory.d.ts +1 -0
  206. package/dist/src/services/owner-memory.d.ts.map +1 -1
  207. package/dist/src/services/owner-memory.js.map +1 -1
  208. package/dist/src/services/owner-session.d.ts +1 -0
  209. package/dist/src/services/owner-session.d.ts.map +1 -1
  210. package/dist/src/services/owner-session.js +10 -2
  211. package/dist/src/services/owner-session.js.map +1 -1
  212. package/dist/src/services/package-seeder.d.ts +22 -0
  213. package/dist/src/services/package-seeder.d.ts.map +1 -0
  214. package/dist/src/services/package-seeder.js +30 -0
  215. package/dist/src/services/package-seeder.js.map +1 -0
  216. package/dist/src/services/presence.d.ts +3 -0
  217. package/dist/src/services/presence.d.ts.map +1 -1
  218. package/dist/src/services/presence.js +10 -0
  219. package/dist/src/services/presence.js.map +1 -1
  220. package/dist/src/services/prompt-defaults.d.ts.map +1 -1
  221. package/dist/src/services/prompt-defaults.js +8 -3
  222. package/dist/src/services/prompt-defaults.js.map +1 -1
  223. package/dist/src/services/scheduler.d.ts +41 -2
  224. package/dist/src/services/scheduler.d.ts.map +1 -1
  225. package/dist/src/services/scheduler.js +429 -26
  226. package/dist/src/services/scheduler.js.map +1 -1
  227. package/dist/src/services/secretary-authoring.d.ts +71 -0
  228. package/dist/src/services/secretary-authoring.d.ts.map +1 -0
  229. package/dist/src/services/secretary-authoring.js +336 -0
  230. package/dist/src/services/secretary-authoring.js.map +1 -0
  231. package/dist/src/services/secretary-clarify.d.ts +57 -0
  232. package/dist/src/services/secretary-clarify.d.ts.map +1 -0
  233. package/dist/src/services/secretary-clarify.js +104 -0
  234. package/dist/src/services/secretary-clarify.js.map +1 -0
  235. package/dist/src/services/secretary-feed.d.ts +11 -0
  236. package/dist/src/services/secretary-feed.d.ts.map +1 -0
  237. package/dist/src/services/secretary-feed.js +28 -0
  238. package/dist/src/services/secretary-feed.js.map +1 -0
  239. package/dist/src/services/secretary-tick.d.ts +243 -3
  240. package/dist/src/services/secretary-tick.d.ts.map +1 -1
  241. package/dist/src/services/secretary-tick.js +273 -3
  242. package/dist/src/services/secretary-tick.js.map +1 -1
  243. package/dist/src/services/specialist-runner.d.ts +36 -0
  244. package/dist/src/services/specialist-runner.d.ts.map +1 -0
  245. package/dist/src/services/specialist-runner.js +91 -0
  246. package/dist/src/services/specialist-runner.js.map +1 -0
  247. package/dist/src/services/specialist.d.ts +9 -0
  248. package/dist/src/services/specialist.d.ts.map +1 -1
  249. package/dist/src/services/specialist.js +42 -0
  250. package/dist/src/services/specialist.js.map +1 -1
  251. package/dist/src/services/structure-overview.d.ts +13 -0
  252. package/dist/src/services/structure-overview.d.ts.map +1 -1
  253. package/dist/src/services/structure-overview.js +34 -11
  254. package/dist/src/services/structure-overview.js.map +1 -1
  255. package/dist/src/services/system-agent-responder.d.ts +36 -0
  256. package/dist/src/services/system-agent-responder.d.ts.map +1 -0
  257. package/dist/src/services/system-agent-responder.js +107 -0
  258. package/dist/src/services/system-agent-responder.js.map +1 -0
  259. package/dist/src/services/system-agent.d.ts +34 -1
  260. package/dist/src/services/system-agent.d.ts.map +1 -1
  261. package/dist/src/services/system-agent.js +73 -0
  262. package/dist/src/services/system-agent.js.map +1 -1
  263. package/dist/src/storage/interface.d.ts +33 -0
  264. package/dist/src/storage/interface.d.ts.map +1 -1
  265. package/dist/src/storage/interface.js.map +1 -1
  266. package/dist/src/storage/providers/mongodb/index.d.ts +37 -0
  267. package/dist/src/storage/providers/mongodb/index.d.ts.map +1 -1
  268. package/dist/src/storage/providers/mongodb/index.js +132 -12
  269. package/dist/src/storage/providers/mongodb/index.js.map +1 -1
  270. package/dist/src/storage/providers/sqlite/index.d.ts +23 -1
  271. package/dist/src/storage/providers/sqlite/index.d.ts.map +1 -1
  272. package/dist/src/storage/providers/sqlite/index.js +60 -8
  273. package/dist/src/storage/providers/sqlite/index.js.map +1 -1
  274. package/dist/src/storage/providers/sqlite/repos/memory.d.ts +29 -1
  275. package/dist/src/storage/providers/sqlite/repos/memory.d.ts.map +1 -1
  276. package/dist/src/storage/providers/sqlite/repos/memory.js +109 -10
  277. package/dist/src/storage/providers/sqlite/repos/memory.js.map +1 -1
  278. package/dist/src/storage/providers/sqlite/schema.d.ts +3 -0
  279. package/dist/src/storage/providers/sqlite/schema.d.ts.map +1 -1
  280. package/dist/src/storage/providers/sqlite/schema.js +64 -9
  281. package/dist/src/storage/providers/sqlite/schema.js.map +1 -1
  282. package/dist/src/storage/repositories/app.repository.d.ts +15 -0
  283. package/dist/src/storage/repositories/app.repository.d.ts.map +1 -1
  284. package/dist/src/storage/repositories/memory.repository.d.ts +41 -1
  285. package/dist/src/storage/repositories/memory.repository.d.ts.map +1 -1
  286. package/dist/src/storage/repositories/organism.repository.d.ts +2 -1
  287. package/dist/src/storage/repositories/organism.repository.d.ts.map +1 -1
  288. package/dist/static/app-catalog.html +469 -122
  289. package/package.json +2 -1
  290. package/prisma/schema.postgres.prisma +10 -0
  291. package/prisma/schema.prisma +12 -0
@@ -16,10 +16,32 @@
16
16
  * capabilities file a note into the self-organism; FEED capabilities append to the Home feed; anything
17
17
  * else is "unsupported" and dropped (surfaced in the briefing instead of fake-acting). See
18
18
  * docs/plans/2026-06-24-secretary-p1-fix-prompt.md and docs/plans/2026-06-23-secretary-feature.md (§6/§7).
19
- * @structure ACTION_KINDS · actionKind · classifySecretaryActions · hasWorkToDo · ledgerSpentToday ·
20
- * budgetExceeded · (P2-E) tokenize · scoreContexts · routeIntake · learnCorrection · (G1) routeTickNote
21
- * @usage import { classifySecretaryActions, hasWorkToDo, budgetExceeded, routeIntake, routeTickNote } from './secretary-tick.js';
19
+ * @structure ACTION_KINDS · actionKind · classifySecretaryActions · routeRoutineStep ·
20
+ * sanitizeProposedQuickActions · hasWorkToDo · ledgerSpentToday · budgetExceeded · (P2-E) tokenize ·
21
+ * scoreContexts · routeIntake · learnCorrection · (G1) routeTickNote
22
+ * @usage import { classifySecretaryActions, routeRoutineStep, sanitizeProposedQuickActions, hasWorkToDo } from './secretary-tick.js';
22
23
  * @version-history
24
+ * v0.10.0 — 2026-06-28 — TriggerLike.action gains workflowId/specialistName/prompt so a trigger can
25
+ * BIND a workflow/specialist run to its fire (the scheduler tick carries it out).
26
+ * v0.10.0 — 2026-06-30 — Learning loop helpers: selectLessons (A — highest-signal reviewed-decision
27
+ * lessons for the tick prompt) + poorDecisionCluster / POOR_SCORE_THRESHOLD (B — the cluster a gated
28
+ * learned-rule proposal is based on). Both pure + unit-tested in e2e-secretary.
29
+ * v0.9.0 — 2026-06-28 — G4: deriveRoutineActions uses actionKind() (note|feed) as the single
30
+ * capability→kind map for tick-performability + renames runFileSteps→runSteps; the tick carries out
31
+ * briefing/reminders as FEED entries (not notes), aligning all three call sites.
32
+ * v0.8.0 — 2026-06-28 — G2: recurring routines — cadenceMs / routineDueForRearm / rearmRoutine (the
33
+ * tick re-arms a completed routine on its cadence: steps → pending, re-activated, next run scheduled).
34
+ * v0.7.0 — 2026-06-28 — G5: deriveRoutineActions emits a structured `labelKind` + `summary` (not a
35
+ * server-composed English `text`) so the frontend renders the action-item label via t() (en+fi).
36
+ * v0.6.0 — 2026-06-28 — B5: deriveRoutineActions() — band-driven routine advancement for the tick
37
+ * (act+file → run, act+discover/delegate & draft|ask → action-item, delegated → check-result) +
38
+ * actionItemKey() de-dup. routeRoutineStep now has a production caller (the tick), not just E2E.
39
+ * v0.5.0 — 2026-06-27 — B3: sanitizeProposedQuickActions() — the canonical security RULE for dynamic
40
+ * quick actions (brain/secretary may only propose prompt|compose, never a run verb). The frontend
41
+ * (sanitizeQuickActions) enforces it at author time; secretary.config is the owner's own private blob
42
+ * (no server-side write validation), so this is the tested reference spec, asserted in e2e-secretary.
43
+ * v0.4.0 — 2026-06-27 — B2: routeRoutineStep() — pure band-gating for a "What's next" Routine step
44
+ * (act → run · draft|ask → confirm · off → skip), shared by the view + asserted in e2e-secretary.
23
45
  * v0.3.0 — 2026-06-24 — G1: routeTickNote() — the autonomous tick's cross-context note-routing decision.
24
46
  * v0.2.0 — 2026-06-24 — P2-E: cross-context intake routing + corrections-teach (pure, AI-free).
25
47
  * v0.1.0 — 2026-06-24 — P1: tick action loop + idle pre-check + soft budget guard.
@@ -49,6 +71,173 @@ export interface ClassifiedActions {
49
71
  * conservative 'ask' so nothing acts silently. Pure: no storage, no AI — safe to unit-test directly.
50
72
  */
51
73
  export declare function classifySecretaryActions(actions: unknown, bands: Record<string, string> | undefined): ClassifiedActions;
74
+ /** Autonomy bands, least → most restrictive (mirrors public/js/services/secretary-policy.js BANDS). */
75
+ export declare const BANDS: readonly ["act", "draft", "ask", "off"];
76
+ /** How an approved Routine step should be carried out, decided purely from its band (B2). */
77
+ export type StepDisposition = 'run' | 'confirm' | 'skip';
78
+ /** Result of band-gating one Routine step (the "What's next" approve flow). */
79
+ export interface RoutineStepRoute {
80
+ /** The effective band: a valid step-level override wins, else the policy band, else conservative 'ask'. */
81
+ band: string;
82
+ /** run = act (perform when reached) · confirm = draft|ask (owner approves first) · skip = off (not run). */
83
+ disposition: StepDisposition;
84
+ }
85
+ /**
86
+ * Band-gate a single Routine step (B2 "What's next"). A step may carry its own `band` (seeded from the
87
+ * policy taxonomy when the routine is proposed); if absent or invalid, fall back to the context's
88
+ * `policy.bands[capability]`, else the conservative 'ask'. The disposition is band-only — act → run,
89
+ * draft|ask → confirm (owner approves first), off → skip — so it can be unit-tested without storage or AI.
90
+ * (Whether a capability has a B2 executor is a separate, frontend concern; delegation lands in B4.)
91
+ * G6 MIRROR: public/js/services/secretary-rules.js::routeRoutineStep — keep IDENTICAL; e2e-secretary's
92
+ * parity test imports both and asserts they agree on a shared vector table.
93
+ */
94
+ export declare function routeRoutineStep(step: {
95
+ capability?: unknown;
96
+ band?: unknown;
97
+ } | null | undefined, bands: Record<string, string> | undefined): RoutineStepRoute;
98
+ /** Loose shapes for the view-authored Routine + ActionItem records the tick reads/advances (B2/B5). */
99
+ export interface RoutineStepLike {
100
+ id?: string;
101
+ capability?: string;
102
+ summary?: string;
103
+ band?: string;
104
+ status?: string;
105
+ result?: {
106
+ taskId?: string;
107
+ agentName?: string;
108
+ summary?: string;
109
+ } | null;
110
+ }
111
+ export interface RoutineLike {
112
+ id?: string;
113
+ title?: string;
114
+ status?: string;
115
+ steps?: RoutineStepLike[];
116
+ results?: Array<{
117
+ ts?: string;
118
+ summary?: string;
119
+ }>;
120
+ cadence?: string | null;
121
+ lastRunAt?: string | null;
122
+ nextRunAt?: string | null;
123
+ }
124
+ export interface ActionItem {
125
+ id: string;
126
+ labelKind?: string;
127
+ summary?: string;
128
+ text?: string;
129
+ suggestedAction: {
130
+ kind: string;
131
+ routineId?: string;
132
+ stepId?: string;
133
+ };
134
+ source: string;
135
+ createdAt: string;
136
+ status: 'open' | 'done';
137
+ }
138
+ /** An action-item the tick wants to surface, before the tick stamps id/createdAt/status. */
139
+ export interface ActionItemDraft {
140
+ labelKind: 'approve' | 'ready' | 'check-delegate';
141
+ summary: string;
142
+ suggestedAction: {
143
+ kind: 'advance' | 'check-delegate';
144
+ routineId: string;
145
+ stepId?: string;
146
+ };
147
+ source: string;
148
+ }
149
+ /** A reviewed-decision lesson the tick threads into its next prompt (close the loop, not just record it). */
150
+ export interface Lesson {
151
+ score: number;
152
+ decision: string;
153
+ verdict: string;
154
+ }
155
+ /**
156
+ * Select the most relevant LESSONS from the owner's reviewed decisions for one context — the
157
+ * highest-signal ones (a clearly-good or clearly-poor score) first, newest as the tiebreak. The tick
158
+ * injects these into its briefing/action prompt so the next cycle repeats what scored well and avoids
159
+ * what scored poorly, instead of the scores being a dead-end record. Pure (no storage/AI) — unit-tested.
160
+ * `records` are the raw `secretary.decision.*` values; only `status:'reviewed'` with a numeric score count.
161
+ */
162
+ export declare function selectLessons(records: Array<Record<string, unknown>>, contextId: string, limit?: number): Lesson[];
163
+ /** Decisions whose review scored at/below this are "poor" — the basis for a learned-rule proposal (B). */
164
+ export declare const POOR_SCORE_THRESHOLD = 50;
165
+ /**
166
+ * B (learned-rule proposal): the cluster of reviewed decisions a proposal should be based on — those in
167
+ * this context that scored POORLY (≤ threshold) and haven't already fed a proposal (`proposalUsed`).
168
+ * Returns [] unless there's a real cluster (≥ `min`), so a one-off bad decision doesn't trigger a rule.
169
+ * Pure (no storage/AI) — the tick adds the AI call + the gated inbox card around it. Unit-tested.
170
+ */
171
+ export declare function poorDecisionCluster(records: Array<Record<string, unknown>>, contextId: string, min?: number, max?: number): Array<Record<string, unknown>>;
172
+ /** Supported routine cadences → their interval in ms (null = run-once / no recurrence). */
173
+ export declare function cadenceMs(cadence: string | null | undefined): number | null;
174
+ /**
175
+ * Is a routine due to be re-armed (G2)? True iff it has a real cadence, a full run has COMPLETED
176
+ * (status 'done'), and the cadence interval has elapsed since its last run (nextRunAt if set, else
177
+ * lastRunAt + interval). Pure — the tick calls this, then rearmRoutine, then persists.
178
+ */
179
+ export declare function routineDueForRearm(routine: RoutineLike, nowMs: number): boolean;
180
+ /** Re-arm a due routine (G2): reset every step to 'pending' (clearing its result), re-activate the
181
+ * routine, and schedule the next run. The prior run's `results` log is kept. Pure. */
182
+ export declare function rearmRoutine(routine: RoutineLike, nowIso: string, nowMs: number): RoutineLike;
183
+ /** A stable key for an action item (so the tick doesn't re-add the same one every fire). */
184
+ export declare function actionItemKey(a: {
185
+ suggestedAction?: {
186
+ kind?: string;
187
+ routineId?: string;
188
+ stepId?: string;
189
+ };
190
+ source?: string;
191
+ }): string;
192
+ /**
193
+ * B5 — band-driven routine advancement for the autonomous tick. For each ACTIVE routine in a context,
194
+ * decide (purely, from the step's band via routeRoutineStep) what the tick should do with its next
195
+ * pending step, plus surface any delegated step whose result should be checked:
196
+ * - act + a tick-PERFORMABLE capability (G4: actionKind ∈ note|feed — file a note OR append a feed
197
+ * entry; the tick carries out the right one) → `runSteps` (the tick performs it + advances).
198
+ * - act + discover/delegate (needs a target/plumbing the tick lacks) → an "advance" action-item.
199
+ * - draft|ask → an "approve" action-item (the owner decides).
200
+ * - off → nothing.
201
+ * - any step already 'delegated' (a task is out) → a "check-delegate" action-item.
202
+ * Pure: no storage/AI. The tick stamps ids + dedupes against existing open items (actionItemKey).
203
+ */
204
+ export declare function deriveRoutineActions(context: {
205
+ routines?: RoutineLike[];
206
+ policy?: {
207
+ bands?: Record<string, string>;
208
+ };
209
+ }): {
210
+ items: ActionItemDraft[];
211
+ runSteps: Array<{
212
+ routineId: string;
213
+ stepId: string;
214
+ }>;
215
+ };
216
+ /** A dynamic quick action (B3): brain-seeded or secretary-proposed shortcut shown in the quick-action row. */
217
+ export interface QuickAction {
218
+ label: string;
219
+ kind: 'compose' | 'prompt';
220
+ target?: string;
221
+ prompt?: string;
222
+ source: string;
223
+ status: 'proposed' | 'active';
224
+ }
225
+ /**
226
+ * Sanitize brain-seeded / secretary-proposed quick actions (B3). The SECURITY boundary: a non-core
227
+ * action may ONLY be 'prompt' (a canned chat message) or 'compose' (focus an existing input) — never a
228
+ * 'run' verb (those are app-defined core actions). Anything that isn't a well-formed prompt/compose is
229
+ * dropped. Pure: no storage/AI. `id`/`createdAt` are added by the caller (kept out so the function stays
230
+ * deterministic for tests). G6 MIRROR: public/js/services/secretary-rules.js::sanitizeProposedQuickActions
231
+ * — keep IDENTICAL; e2e-secretary's parity test imports both and asserts identical output.
232
+ */
233
+ export declare function sanitizeProposedQuickActions(raw: unknown, source: string, status?: 'proposed' | 'active'): QuickAction[];
234
+ /**
235
+ * G8: true iff a STORED quick action is allowed (a well-formed prompt|compose, never a run verb).
236
+ * Derived from sanitizeProposedQuickActions so the rule has a single definition; the tick uses it to
237
+ * SCRUB secretary.config server-side on write (defense-in-depth — secretary.config is the owner's blob
238
+ * with no generic write validation). MIRROR: public/js/services/secretary-rules.js::isAllowedQuickAction.
239
+ */
240
+ export declare function isAllowedQuickAction(a: unknown): boolean;
52
241
  /**
53
242
  * The cheap "anything to do?" pre-check (P1-B). Returns true iff the active context has any open goals,
54
243
  * any decisions due for review, or any pending intake — i.e. work that justifies the paid tick. When
@@ -124,4 +313,55 @@ export type TickNoteRouting = {
124
313
  * frontend path (public/js/services/secretary-routing.js).
125
314
  */
126
315
  export declare function routeTickNote(text: string, contexts: RoutableContext[], activeId: string, corrections?: RoutingCorrections): TickNoteRouting;
316
+ export interface TriggerLike {
317
+ id?: string;
318
+ kind?: string;
319
+ label?: string;
320
+ contextId?: string;
321
+ status?: string;
322
+ when?: string | null;
323
+ cadence?: string | null;
324
+ nextFireAt?: string | null;
325
+ target?: {
326
+ type?: string;
327
+ id?: string;
328
+ } | null;
329
+ condition?: {
330
+ type?: string;
331
+ prefix?: string;
332
+ op?: string;
333
+ value?: number;
334
+ days?: number;
335
+ } | null;
336
+ action?: {
337
+ kind?: string;
338
+ summary?: string;
339
+ band?: string;
340
+ workflowId?: string;
341
+ specialistName?: string;
342
+ prompt?: string;
343
+ } | null;
344
+ lastFiredAt?: string | null;
345
+ createdBy?: string;
346
+ }
347
+ /** Signals the condition/completion evaluators need (the tick computes these from storage). */
348
+ export interface TriggerSignals {
349
+ memoryCounts?: Record<string, number>;
350
+ lastActivityMs?: Record<string, number>;
351
+ completed?: Record<string, boolean>;
352
+ }
353
+ /** The effective next-fire time (ms) for a time/recurring trigger, or null if not time-based. */
354
+ export declare function triggerNextFireMs(tr: TriggerLike): number | null;
355
+ /** Re-arm a recurring trigger: its next fire = now + cadence. Null for non-recurring. */
356
+ export declare function rearmTriggerAt(tr: TriggerLike, nowMs: number): string | null;
357
+ /** Is a condition trigger's condition currently met? Pure, from the supplied signals. */
358
+ export declare function conditionMet(tr: TriggerLike, sig: TriggerSignals, nowMs: number): boolean;
359
+ /** Pure: which ARMED triggers fire now? The tick then performs each action + re-arms/settles the trigger. */
360
+ export declare function evaluateTriggers(triggers: TriggerLike[], sig: TriggerSignals, nowMs: number): Array<{
361
+ id: string;
362
+ trigger: TriggerLike;
363
+ reason: 'time' | 'completion' | 'condition';
364
+ }>;
365
+ /** After firing: a recurring trigger re-arms (stays armed, new nextFireAt); others settle to 'fired'. */
366
+ export declare function settleFiredTrigger(tr: TriggerLike, nowMs: number): TriggerLike;
127
367
  //# sourceMappingURL=secretary-tick.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"secretary-tick.d.ts","sourceRoot":"","sources":["../../../src/services/secretary-tick.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"secretary-tick.d.ts","sourceRoot":"","sources":["../../../src/services/secretary-tick.ts"],"names":[],"mappings":"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"}
@@ -16,10 +16,32 @@
16
16
  * capabilities file a note into the self-organism; FEED capabilities append to the Home feed; anything
17
17
  * else is "unsupported" and dropped (surfaced in the briefing instead of fake-acting). See
18
18
  * docs/plans/2026-06-24-secretary-p1-fix-prompt.md and docs/plans/2026-06-23-secretary-feature.md (§6/§7).
19
- * @structure ACTION_KINDS · actionKind · classifySecretaryActions · hasWorkToDo · ledgerSpentToday ·
20
- * budgetExceeded · (P2-E) tokenize · scoreContexts · routeIntake · learnCorrection · (G1) routeTickNote
21
- * @usage import { classifySecretaryActions, hasWorkToDo, budgetExceeded, routeIntake, routeTickNote } from './secretary-tick.js';
19
+ * @structure ACTION_KINDS · actionKind · classifySecretaryActions · routeRoutineStep ·
20
+ * sanitizeProposedQuickActions · hasWorkToDo · ledgerSpentToday · budgetExceeded · (P2-E) tokenize ·
21
+ * scoreContexts · routeIntake · learnCorrection · (G1) routeTickNote
22
+ * @usage import { classifySecretaryActions, routeRoutineStep, sanitizeProposedQuickActions, hasWorkToDo } from './secretary-tick.js';
22
23
  * @version-history
24
+ * v0.10.0 — 2026-06-28 — TriggerLike.action gains workflowId/specialistName/prompt so a trigger can
25
+ * BIND a workflow/specialist run to its fire (the scheduler tick carries it out).
26
+ * v0.10.0 — 2026-06-30 — Learning loop helpers: selectLessons (A — highest-signal reviewed-decision
27
+ * lessons for the tick prompt) + poorDecisionCluster / POOR_SCORE_THRESHOLD (B — the cluster a gated
28
+ * learned-rule proposal is based on). Both pure + unit-tested in e2e-secretary.
29
+ * v0.9.0 — 2026-06-28 — G4: deriveRoutineActions uses actionKind() (note|feed) as the single
30
+ * capability→kind map for tick-performability + renames runFileSteps→runSteps; the tick carries out
31
+ * briefing/reminders as FEED entries (not notes), aligning all three call sites.
32
+ * v0.8.0 — 2026-06-28 — G2: recurring routines — cadenceMs / routineDueForRearm / rearmRoutine (the
33
+ * tick re-arms a completed routine on its cadence: steps → pending, re-activated, next run scheduled).
34
+ * v0.7.0 — 2026-06-28 — G5: deriveRoutineActions emits a structured `labelKind` + `summary` (not a
35
+ * server-composed English `text`) so the frontend renders the action-item label via t() (en+fi).
36
+ * v0.6.0 — 2026-06-28 — B5: deriveRoutineActions() — band-driven routine advancement for the tick
37
+ * (act+file → run, act+discover/delegate & draft|ask → action-item, delegated → check-result) +
38
+ * actionItemKey() de-dup. routeRoutineStep now has a production caller (the tick), not just E2E.
39
+ * v0.5.0 — 2026-06-27 — B3: sanitizeProposedQuickActions() — the canonical security RULE for dynamic
40
+ * quick actions (brain/secretary may only propose prompt|compose, never a run verb). The frontend
41
+ * (sanitizeQuickActions) enforces it at author time; secretary.config is the owner's own private blob
42
+ * (no server-side write validation), so this is the tested reference spec, asserted in e2e-secretary.
43
+ * v0.4.0 — 2026-06-27 — B2: routeRoutineStep() — pure band-gating for a "What's next" Routine step
44
+ * (act → run · draft|ask → confirm · off → skip), shared by the view + asserted in e2e-secretary.
23
45
  * v0.3.0 — 2026-06-24 — G1: routeTickNote() — the autonomous tick's cross-context note-routing decision.
24
46
  * v0.2.0 — 2026-06-24 — P2-E: cross-context intake routing + corrections-teach (pure, AI-free).
25
47
  * v0.1.0 — 2026-06-24 — P1: tick action loop + idle pre-check + soft budget guard.
@@ -66,6 +88,182 @@ export function classifySecretaryActions(actions, bands) {
66
88
  }
67
89
  return { acts, asks, dropped };
68
90
  }
91
+ /** Autonomy bands, least → most restrictive (mirrors public/js/services/secretary-policy.js BANDS). */
92
+ export const BANDS = ['act', 'draft', 'ask', 'off'];
93
+ /**
94
+ * Band-gate a single Routine step (B2 "What's next"). A step may carry its own `band` (seeded from the
95
+ * policy taxonomy when the routine is proposed); if absent or invalid, fall back to the context's
96
+ * `policy.bands[capability]`, else the conservative 'ask'. The disposition is band-only — act → run,
97
+ * draft|ask → confirm (owner approves first), off → skip — so it can be unit-tested without storage or AI.
98
+ * (Whether a capability has a B2 executor is a separate, frontend concern; delegation lands in B4.)
99
+ * G6 MIRROR: public/js/services/secretary-rules.js::routeRoutineStep — keep IDENTICAL; e2e-secretary's
100
+ * parity test imports both and asserts they agree on a shared vector table.
101
+ */
102
+ export function routeRoutineStep(step, bands) {
103
+ const capability = String(step?.capability ?? '').trim();
104
+ const override = typeof step?.band === 'string' && BANDS.includes(step.band) ? step.band : null;
105
+ const band = override
106
+ ?? ((bands && typeof bands[capability] === 'string') ? bands[capability] : 'ask');
107
+ const disposition = band === 'off' ? 'skip' : band === 'act' ? 'run' : 'confirm';
108
+ return { band, disposition };
109
+ }
110
+ /**
111
+ * Select the most relevant LESSONS from the owner's reviewed decisions for one context — the
112
+ * highest-signal ones (a clearly-good or clearly-poor score) first, newest as the tiebreak. The tick
113
+ * injects these into its briefing/action prompt so the next cycle repeats what scored well and avoids
114
+ * what scored poorly, instead of the scores being a dead-end record. Pure (no storage/AI) — unit-tested.
115
+ * `records` are the raw `secretary.decision.*` values; only `status:'reviewed'` with a numeric score count.
116
+ */
117
+ export function selectLessons(records, contextId, limit = 6) {
118
+ return records
119
+ .filter((d) => d && d.status === 'reviewed' && typeof d.score === 'number' && (!d.contextId || d.contextId === contextId))
120
+ .map((d) => ({ score: Math.max(0, Math.min(100, Number(d.score))), decision: String(d.decision || ''), verdict: String(d.verdict || ''), reviewedAt: String(d.reviewedAt || '') }))
121
+ .filter((l) => l.decision)
122
+ // Signal = distance from a neutral 50 (a 95 or a 10 teaches more than a 55); newest breaks ties.
123
+ .sort((a, b) => (Math.abs(b.score - 50) - Math.abs(a.score - 50)) || b.reviewedAt.localeCompare(a.reviewedAt))
124
+ .slice(0, Math.max(0, limit))
125
+ .map(({ score, decision, verdict }) => ({ score, decision, verdict }));
126
+ }
127
+ /** Decisions whose review scored at/below this are "poor" — the basis for a learned-rule proposal (B). */
128
+ export const POOR_SCORE_THRESHOLD = 50;
129
+ /**
130
+ * B (learned-rule proposal): the cluster of reviewed decisions a proposal should be based on — those in
131
+ * this context that scored POORLY (≤ threshold) and haven't already fed a proposal (`proposalUsed`).
132
+ * Returns [] unless there's a real cluster (≥ `min`), so a one-off bad decision doesn't trigger a rule.
133
+ * Pure (no storage/AI) — the tick adds the AI call + the gated inbox card around it. Unit-tested.
134
+ */
135
+ export function poorDecisionCluster(records, contextId, min = 3, max = 8) {
136
+ const poor = records.filter((d) => d && d.status === 'reviewed' && typeof d.score === 'number'
137
+ && d.score <= POOR_SCORE_THRESHOLD && (!d.contextId || d.contextId === contextId) && !d.proposalUsed);
138
+ return poor.length >= min ? poor.slice(0, max) : [];
139
+ }
140
+ // ── G2: recurring routines ── the tick re-arms a completed routine on its cadence so it runs again.
141
+ /** Supported routine cadences → their interval in ms (null = run-once / no recurrence). */
142
+ export function cadenceMs(cadence) {
143
+ if (cadence === 'daily')
144
+ return 24 * 3600 * 1000;
145
+ if (cadence === 'weekly')
146
+ return 7 * 24 * 3600 * 1000;
147
+ return null;
148
+ }
149
+ /**
150
+ * Is a routine due to be re-armed (G2)? True iff it has a real cadence, a full run has COMPLETED
151
+ * (status 'done'), and the cadence interval has elapsed since its last run (nextRunAt if set, else
152
+ * lastRunAt + interval). Pure — the tick calls this, then rearmRoutine, then persists.
153
+ */
154
+ export function routineDueForRearm(routine, nowMs) {
155
+ const ms = cadenceMs(routine.cadence);
156
+ if (ms === null)
157
+ return false;
158
+ if (routine.status !== 'done')
159
+ return false;
160
+ const next = routine.nextRunAt ? Date.parse(routine.nextRunAt)
161
+ : (routine.lastRunAt ? Date.parse(routine.lastRunAt) + ms : nowMs);
162
+ return !Number.isNaN(next) && next <= nowMs;
163
+ }
164
+ /** Re-arm a due routine (G2): reset every step to 'pending' (clearing its result), re-activate the
165
+ * routine, and schedule the next run. The prior run's `results` log is kept. Pure. */
166
+ export function rearmRoutine(routine, nowIso, nowMs) {
167
+ const ms = cadenceMs(routine.cadence) ?? 0;
168
+ const steps = (routine.steps || []).map((s) => ({ ...s, status: 'pending', result: null }));
169
+ return { ...routine, steps, status: 'active', lastRunAt: nowIso, nextRunAt: new Date(nowMs + ms).toISOString() };
170
+ }
171
+ /** A stable key for an action item (so the tick doesn't re-add the same one every fire). */
172
+ export function actionItemKey(a) {
173
+ const sa = a.suggestedAction || {};
174
+ return `${sa.kind || ''}:${sa.routineId || a.source || ''}:${sa.stepId || ''}`;
175
+ }
176
+ /**
177
+ * B5 — band-driven routine advancement for the autonomous tick. For each ACTIVE routine in a context,
178
+ * decide (purely, from the step's band via routeRoutineStep) what the tick should do with its next
179
+ * pending step, plus surface any delegated step whose result should be checked:
180
+ * - act + a tick-PERFORMABLE capability (G4: actionKind ∈ note|feed — file a note OR append a feed
181
+ * entry; the tick carries out the right one) → `runSteps` (the tick performs it + advances).
182
+ * - act + discover/delegate (needs a target/plumbing the tick lacks) → an "advance" action-item.
183
+ * - draft|ask → an "approve" action-item (the owner decides).
184
+ * - off → nothing.
185
+ * - any step already 'delegated' (a task is out) → a "check-delegate" action-item.
186
+ * Pure: no storage/AI. The tick stamps ids + dedupes against existing open items (actionItemKey).
187
+ */
188
+ export function deriveRoutineActions(context) {
189
+ const items = [];
190
+ const runSteps = [];
191
+ const bands = context.policy?.bands;
192
+ for (const r of (context.routines || [])) {
193
+ if (r.status !== 'active' || !r.id)
194
+ continue;
195
+ // Delegated steps with a task out → surface a check-result item (the result flowing home).
196
+ for (const s of (r.steps || [])) {
197
+ if (s.status === 'delegated' && s.result?.taskId && s.id) {
198
+ items.push({ labelKind: 'check-delegate', summary: String(s.summary || ''), suggestedAction: { kind: 'check-delegate', routineId: r.id, stepId: s.id }, source: r.id });
199
+ }
200
+ }
201
+ const next = (r.steps || []).find((s) => s.status === 'pending');
202
+ if (!next || !next.id)
203
+ continue;
204
+ const route = routeRoutineStep(next, bands);
205
+ // G4: a step is tick-performable iff actionKind says note OR feed (the single capability→kind map).
206
+ if (route.disposition === 'run' && actionKind(String(next.capability)) !== 'unsupported') {
207
+ runSteps.push({ routineId: r.id, stepId: next.id });
208
+ }
209
+ else if (route.disposition === 'run') {
210
+ items.push({ labelKind: 'ready', summary: String(next.summary || ''), suggestedAction: { kind: 'advance', routineId: r.id, stepId: next.id }, source: r.id });
211
+ }
212
+ else if (route.disposition === 'confirm') {
213
+ items.push({ labelKind: 'approve', summary: String(next.summary || ''), suggestedAction: { kind: 'advance', routineId: r.id, stepId: next.id }, source: r.id });
214
+ }
215
+ // disposition === 'skip' (off) → nothing to surface.
216
+ }
217
+ return { items, runSteps };
218
+ }
219
+ /** Inputs a `compose` quick action may focus (must match the working cards the view renders). */
220
+ const QUICK_COMPOSE_TARGETS = new Set(['plan', 'find', 'note']);
221
+ /**
222
+ * Sanitize brain-seeded / secretary-proposed quick actions (B3). The SECURITY boundary: a non-core
223
+ * action may ONLY be 'prompt' (a canned chat message) or 'compose' (focus an existing input) — never a
224
+ * 'run' verb (those are app-defined core actions). Anything that isn't a well-formed prompt/compose is
225
+ * dropped. Pure: no storage/AI. `id`/`createdAt` are added by the caller (kept out so the function stays
226
+ * deterministic for tests). G6 MIRROR: public/js/services/secretary-rules.js::sanitizeProposedQuickActions
227
+ * — keep IDENTICAL; e2e-secretary's parity test imports both and asserts identical output.
228
+ */
229
+ export function sanitizeProposedQuickActions(raw, source, status = 'proposed') {
230
+ const list = Array.isArray(raw) ? raw : [];
231
+ const out = [];
232
+ for (const r of list) {
233
+ if (!r || typeof r !== 'object')
234
+ continue;
235
+ const o = r;
236
+ const label = String(o.label ?? '').trim().slice(0, 40);
237
+ const kind = String(o.kind ?? '').trim();
238
+ if (!label)
239
+ continue;
240
+ if (kind === 'compose') {
241
+ const target = String(o.target ?? '').trim();
242
+ if (!QUICK_COMPOSE_TARGETS.has(target))
243
+ continue;
244
+ out.push({ label, kind: 'compose', target, source, status });
245
+ }
246
+ else if (kind === 'prompt') {
247
+ const prompt = String(o.prompt ?? '').trim().slice(0, 500);
248
+ if (!prompt)
249
+ continue;
250
+ out.push({ label, kind: 'prompt', prompt, source, status });
251
+ }
252
+ // kind === 'run' (or anything else) → dropped: the explicit security boundary.
253
+ }
254
+ return out.slice(0, 6);
255
+ }
256
+ /**
257
+ * G8: true iff a STORED quick action is allowed (a well-formed prompt|compose, never a run verb).
258
+ * Derived from sanitizeProposedQuickActions so the rule has a single definition; the tick uses it to
259
+ * SCRUB secretary.config server-side on write (defense-in-depth — secretary.config is the owner's blob
260
+ * with no generic write validation). MIRROR: public/js/services/secretary-rules.js::isAllowedQuickAction.
261
+ */
262
+ export function isAllowedQuickAction(a) {
263
+ const src = (a && typeof a === 'object' && 'source' in a) ? String(a.source ?? '') : '';
264
+ // status doesn't affect validity (only the kind/label/target/prompt do) — pass a fixed valid status.
265
+ return sanitizeProposedQuickActions([a], src, 'active').length === 1;
266
+ }
69
267
  /**
70
268
  * The cheap "anything to do?" pre-check (P1-B). Returns true iff the active context has any open goals,
71
269
  * any decisions due for review, or any pending intake — i.e. work that justifies the paid tick. When
@@ -166,4 +364,76 @@ export function routeTickNote(text, contexts, activeId, corrections) {
166
364
  return { action: 'file-routed', targetContextId: r.contextId };
167
365
  return { action: 'ask' };
168
366
  }
367
+ // ── Triggers ── proactive follow-ups the Secretary binds to what it tracks. A trigger is declarative
368
+ // metadata (`secretary.trigger.{id}`); the autonomous tick is the ENGINE that evaluates them each run and
369
+ // fires the bound action band-gated. Four kinds: time (a date), recurring (cadence), completion (a goal/
370
+ // routine reaching done), condition (a memory/workspace state — e.g. a prefix gets ≥N items, or no
371
+ // activity for D days). Pure helpers here (no storage/AI) so the firing decision is unit-testable; the
372
+ // tick computes the signals + performs/persists. Frontend mirror is intentionally avoided — the tick owns firing.
373
+ /** Cadence → interval in ms (recurring triggers). */
374
+ const TRIGGER_CADENCE_MS = { daily: 86400000, weekly: 604800000, monthly: 2592000000 };
375
+ /** The effective next-fire time (ms) for a time/recurring trigger, or null if not time-based. */
376
+ export function triggerNextFireMs(tr) {
377
+ const src = tr.nextFireAt || tr.when;
378
+ if (!src)
379
+ return null;
380
+ const t = Date.parse(src);
381
+ return Number.isNaN(t) ? null : t;
382
+ }
383
+ /** Re-arm a recurring trigger: its next fire = now + cadence. Null for non-recurring. */
384
+ export function rearmTriggerAt(tr, nowMs) {
385
+ const ms = TRIGGER_CADENCE_MS[String(tr.cadence)];
386
+ return ms ? new Date(nowMs + ms).toISOString() : null;
387
+ }
388
+ /** Is a condition trigger's condition currently met? Pure, from the supplied signals. */
389
+ export function conditionMet(tr, sig, nowMs) {
390
+ const c = tr.condition;
391
+ if (!c || !c.prefix)
392
+ return false;
393
+ const counts = sig.memoryCounts || {};
394
+ if (c.type === 'memory_count' || c.type === 'workspace_count') {
395
+ const n = counts[c.prefix] ?? 0;
396
+ const v = Number(c.value) || 0;
397
+ return c.op === '>' ? n > v : n >= v; // default '>='
398
+ }
399
+ if (c.type === 'memory_exists')
400
+ return (counts[c.prefix] ?? 0) > 0;
401
+ if (c.type === 'no_activity') {
402
+ const last = (sig.lastActivityMs || {})[c.prefix];
403
+ if (last == null)
404
+ return false; // nothing there → not "went quiet"
405
+ return (nowMs - last) >= (Number(c.days) || 7) * 86400000;
406
+ }
407
+ return false;
408
+ }
409
+ /** Pure: which ARMED triggers fire now? The tick then performs each action + re-arms/settles the trigger. */
410
+ export function evaluateTriggers(triggers, sig, nowMs) {
411
+ const fired = [];
412
+ for (const tr of (triggers || [])) {
413
+ if (!tr.id || tr.status !== 'armed')
414
+ continue;
415
+ if (tr.kind === 'time' || tr.kind === 'recurring') {
416
+ const next = triggerNextFireMs(tr);
417
+ if (next != null && next <= nowMs)
418
+ fired.push({ id: tr.id, trigger: tr, reason: 'time' });
419
+ }
420
+ else if (tr.kind === 'completion') {
421
+ const tid = tr.target?.id;
422
+ if (tid && (sig.completed || {})[tid])
423
+ fired.push({ id: tr.id, trigger: tr, reason: 'completion' });
424
+ }
425
+ else if (tr.kind === 'condition') {
426
+ if (conditionMet(tr, sig, nowMs))
427
+ fired.push({ id: tr.id, trigger: tr, reason: 'condition' });
428
+ }
429
+ }
430
+ return fired;
431
+ }
432
+ /** After firing: a recurring trigger re-arms (stays armed, new nextFireAt); others settle to 'fired'. */
433
+ export function settleFiredTrigger(tr, nowMs) {
434
+ if (tr.kind === 'recurring') {
435
+ return { ...tr, status: 'armed', lastFiredAt: new Date(nowMs).toISOString(), nextFireAt: rearmTriggerAt(tr, nowMs) };
436
+ }
437
+ return { ...tr, status: 'fired', lastFiredAt: new Date(nowMs).toISOString() };
438
+ }
169
439
  //# sourceMappingURL=secretary-tick.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"secretary-tick.js","sourceRoot":"","sources":["../../../src/services/secretary-tick.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"secretary-tick.js","sourceRoot":"","sources":["../../../src/services/secretary-tick.ts"],"names":[],"mappings":"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"}