oh-my-opencode 4.19.1 → 4.19.3

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 (268) hide show
  1. package/.agents/command/publish.md +95 -28
  2. package/.agents/skills/publish/SKILL.md +20 -6
  3. package/.opencode/command/publish.md +95 -28
  4. package/README.ja.md +2 -2
  5. package/README.ko.md +2 -2
  6. package/README.md +2 -2
  7. package/README.ru.md +2 -2
  8. package/README.zh-cn.md +2 -2
  9. package/THIRD-PARTY-NOTICES.md +7 -7
  10. package/dist/agents/atlas/agent.d.ts +4 -2
  11. package/dist/agents/explore.d.ts +4 -2
  12. package/dist/agents/hephaestus/agent.d.ts +4 -2
  13. package/dist/agents/librarian.d.ts +4 -2
  14. package/dist/agents/metis.d.ts +4 -2
  15. package/dist/agents/momus.d.ts +3 -2
  16. package/dist/agents/multimodal-looker.d.ts +4 -2
  17. package/dist/agents/oracle.d.ts +4 -2
  18. package/dist/agents/sisyphus/claude-opus-5.d.ts +33 -0
  19. package/dist/agents/sisyphus/index.d.ts +2 -0
  20. package/dist/agents/sisyphus-agent-factory.d.ts +5 -2
  21. package/dist/agents/sisyphus-junior/agent.d.ts +4 -1
  22. package/dist/agents/sisyphus-runtime-prompt-reconciler.d.ts +1 -1
  23. package/dist/agents/types.d.ts +2 -2
  24. package/dist/cli/config-migrate.d.ts +8 -0
  25. package/dist/cli/doctor/checks/legacy-config-leftovers.d.ts +10 -0
  26. package/dist/cli/doctor/checks/model-resolution-config.d.ts +1 -1
  27. package/dist/cli/doctor/checks/tools-lsp.d.ts +1 -1
  28. package/dist/cli/doctor/framework/constants.d.ts +1 -1
  29. package/dist/cli/index.js +95391 -88524
  30. package/dist/cli-node/index.js +95504 -88637
  31. package/dist/config/schema/agent-names.d.ts +26 -26
  32. package/dist/config/schema/agent-overrides.d.ts +400 -400
  33. package/dist/config/schema/browser-automation.d.ts +2 -2
  34. package/dist/config/schema/categories.d.ts +36 -36
  35. package/dist/config/schema/commands.d.ts +2 -2
  36. package/dist/config/schema/dynamic-context-pruning.d.ts +1 -1
  37. package/dist/config/schema/experimental.d.ts +1 -1
  38. package/dist/config/schema/fallback-models.d.ts +25 -25
  39. package/dist/config/schema/hooks.d.ts +43 -43
  40. package/dist/config/schema/internal/permission.d.ts +9 -9
  41. package/dist/config/schema/keyword-detector.d.ts +6 -6
  42. package/dist/config/schema/oh-my-opencode-config.d.ts +402 -402
  43. package/dist/config/schema/tmux.d.ts +6 -6
  44. package/dist/config/validate.d.ts +2 -1
  45. package/dist/config-migration/deep-diff.d.ts +1 -0
  46. package/dist/config-migration/discovery-paths.d.ts +11 -0
  47. package/dist/config-migration/discovery-roots.d.ts +7 -0
  48. package/dist/config-migration/discovery.d.ts +4 -0
  49. package/dist/config-migration/index.d.ts +9 -0
  50. package/dist/config-migration/legacy-history.d.ts +3 -0
  51. package/dist/config-migration/migration-executor.d.ts +4 -0
  52. package/dist/config-migration/migration-plans.d.ts +14 -0
  53. package/dist/config-migration/record-values.d.ts +4 -0
  54. package/dist/config-migration/schema-url.d.ts +1 -0
  55. package/dist/config-migration/transform-config-jsonc.d.ts +2 -0
  56. package/dist/config-migration/transform-opencode.d.ts +2 -0
  57. package/dist/config-migration/transform-types.d.ts +24 -0
  58. package/dist/config-migration/types.d.ts +39 -0
  59. package/dist/create-hooks.d.ts +35 -35
  60. package/dist/features/background-agent/spawner/tmux-callback-invoker.d.ts +11 -0
  61. package/dist/features/builtin-commands/templates/hyperplan.d.ts +1 -1
  62. package/dist/features/builtin-commands/templates/start-work.d.ts +1 -1
  63. package/dist/features/claude-tasks/types.d.ts +4 -4
  64. package/dist/features/team-mode/team-runtime/shutdown-helpers.d.ts +1 -1
  65. package/dist/features/team-mode/team-runtime/shutdown-test-fixtures.d.ts +4 -4
  66. package/dist/features/team-mode/tools/lifecycle-test-fixture.d.ts +42 -42
  67. package/dist/features/tmux-subagent/environment-eligibility.d.ts +2 -0
  68. package/dist/features/tmux-subagent/index.d.ts +1 -0
  69. package/dist/features/tmux-subagent/tracked-session-state.d.ts +1 -0
  70. package/dist/features/tui-sidebar/snapshot-schema.d.ts +6 -6
  71. package/dist/help/schema/acp.d.ts +3 -3
  72. package/dist/help/schema/doctor.d.ts +4 -4
  73. package/dist/help/schema/status.d.ts +3 -3
  74. package/dist/hooks/auto-update-checker/constants.d.ts +3 -3
  75. package/dist/hooks/goal/types.d.ts +5 -5
  76. package/dist/hooks/non-interactive-env/constants.d.ts +4 -1
  77. package/dist/hooks/start-work/parse-user-request.d.ts +2 -0
  78. package/dist/hooks/start-work/worktree-block.d.ts +5 -0
  79. package/dist/index.js +35450 -28257
  80. package/dist/mcp/types.d.ts +3 -3
  81. package/dist/oh-my-opencode.schema.json +1 -1
  82. package/dist/plugin/chat-message/loop-commands.d.ts +1 -0
  83. package/dist/plugin/command-execute-before.d.ts +3 -3
  84. package/dist/plugin/hooks/create-core-hooks.d.ts +25 -25
  85. package/dist/plugin-config/omo-config-chain.d.ts +14 -0
  86. package/dist/plugin-config/unknown-key-diagnostics.d.ts +5 -0
  87. package/dist/plugin-config.d.ts +2 -2
  88. package/dist/shared/agent-display-names.d.ts +1 -1
  89. package/dist/shared/jsonc-parser.d.ts +1 -1
  90. package/dist/shared/migration.d.ts +5 -1
  91. package/dist/shared/opencode-config-dir-types.d.ts +0 -1
  92. package/dist/shared/plugin-identity.d.ts +6 -8
  93. package/dist/shared/project-discovery-dirs.d.ts +0 -1
  94. package/dist/shared/tmux/tmux-utils/environment.d.ts +1 -1
  95. package/dist/shared/tmux/tmux-utils.d.ts +1 -1
  96. package/dist/shared/typescript-native-source-parser.d.ts +7 -0
  97. package/dist/skills/coding-agent-sessions/SKILL.md +5 -2
  98. package/dist/skills/coding-agent-sessions/references/all-platforms.md +3 -1
  99. package/dist/skills/coding-agent-sessions/references/senpi.md +15 -5
  100. package/dist/skills/coding-agent-sessions/scripts/agent_sessions/pi_family.py +46 -0
  101. package/dist/skills/coding-agent-sessions/scripts/agent_sessions/scanners.py +19 -10
  102. package/dist/skills/debugging/SKILL.md +2 -1
  103. package/dist/skills/debugging/references/methodology/03-flaky-triage.md +47 -0
  104. package/dist/skills/frontend/ATTRIBUTION.md +7 -0
  105. package/dist/skills/frontend/SKILL.md +4 -1
  106. package/dist/skills/frontend/references/design/README.md +8 -0
  107. package/dist/skills/frontend/references/design/_INDEX.md +14 -1
  108. package/dist/skills/frontend/references/design/interaction-skill.md +144 -0
  109. package/dist/skills/programming/SKILL.md +11 -1
  110. package/dist/skills/programming/references/logging.md +6 -1
  111. package/dist/skills/programming/scripts/typescript/check-no-excuse-rules.ts +51 -17
  112. package/dist/skills/start-work/SKILL.md +12 -2
  113. package/dist/skills/ulw-plan/SKILL.md +1 -1
  114. package/dist/skills/ulw-plan/references/full-workflow.md +12 -1
  115. package/dist/skills/ulw-plan/references/intent-clear.md +1 -1
  116. package/dist/startup-migration.d.ts +28 -0
  117. package/dist/testing/create-plugin-module.d.ts +4 -0
  118. package/dist/tools/task/types.d.ts +10 -10
  119. package/dist/tui.js +31812 -26849
  120. package/package.json +14 -14
  121. package/packages/lsp-core/src/lsp/client-diagnostics-freshness.integration.test.ts +21 -5
  122. package/packages/lsp-core/src/lsp/fixtures/workspace-edit-server.mjs +11 -2
  123. package/packages/omo-codex/THIRD-PARTY-NOTICES.md +2 -2
  124. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  125. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +8 -4
  126. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  127. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  128. package/packages/omo-codex/plugin/components/codegraph/AGENTS.md +11 -5
  129. package/packages/omo-codex/plugin/components/codegraph/NOTICE +1 -1
  130. package/packages/omo-codex/plugin/components/codegraph/dist/cli.js +10272 -2600
  131. package/packages/omo-codex/plugin/components/codegraph/dist/serve.js +7341 -562
  132. package/packages/omo-codex/plugin/components/codegraph/package.json +2 -2
  133. package/packages/omo-codex/plugin/components/codegraph/src/hook-input.ts +33 -0
  134. package/packages/omo-codex/plugin/components/codegraph/src/hook-types.ts +36 -10
  135. package/packages/omo-codex/plugin/components/codegraph/src/hook.ts +170 -186
  136. package/packages/omo-codex/plugin/components/codegraph/src/post-tool-use-hook.ts +34 -0
  137. package/packages/omo-codex/plugin/components/codegraph/src/serve.ts +22 -5
  138. package/packages/omo-codex/plugin/components/codegraph/src/session-start-command.ts +106 -0
  139. package/packages/omo-codex/plugin/components/codegraph/src/session-start-cooldown.ts +145 -0
  140. package/packages/omo-codex/plugin/components/codegraph/src/session-start-hook-runtime.ts +21 -0
  141. package/packages/omo-codex/plugin/components/codegraph/src/session-start-lock.ts +139 -0
  142. package/packages/omo-codex/plugin/components/codegraph/src/session-start-outcome.ts +15 -0
  143. package/packages/omo-codex/plugin/components/codegraph/src/session-start-paths.ts +32 -0
  144. package/packages/omo-codex/plugin/components/codegraph/src/session-start-project.ts +109 -0
  145. package/packages/omo-codex/plugin/components/codegraph/src/session-start-worker-result.ts +148 -0
  146. package/packages/omo-codex/plugin/components/codegraph/src/session-start-worker.ts +126 -186
  147. package/packages/omo-codex/plugin/components/codegraph/test/hook-exclusion.test.ts +9 -4
  148. package/packages/omo-codex/plugin/components/codegraph/test/hook-session-start-guard.test.ts +160 -0
  149. package/packages/omo-codex/plugin/components/codegraph/test/hook-store-upgrade.test.ts +12 -110
  150. package/packages/omo-codex/plugin/components/codegraph/test/hook.test.ts +29 -20
  151. package/packages/omo-codex/plugin/components/codegraph/test/mcp-bridge-fixtures.ts +3 -3
  152. package/packages/omo-codex/plugin/components/codegraph/test/package-runtime.test.ts +2 -2
  153. package/packages/omo-codex/plugin/components/codegraph/test/provisioned-node-guard.test.ts +11 -5
  154. package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-bridge.test.ts +3 -3
  155. package/packages/omo-codex/plugin/components/codegraph/test/serve-mcp-facade.test.ts +2 -1
  156. package/packages/omo-codex/plugin/components/codegraph/test/serve-provision.test.ts +50 -5
  157. package/packages/omo-codex/plugin/components/codegraph/test/serve-unavailable.test.ts +3 -2
  158. package/packages/omo-codex/plugin/components/codegraph/test/serve.test.ts +24 -13
  159. package/packages/omo-codex/plugin/components/codegraph/test/session-start-node-support.test.ts +70 -13
  160. package/packages/omo-codex/plugin/components/codegraph/test/session-start-project.test.ts +58 -0
  161. package/packages/omo-codex/plugin/components/codegraph/test/session-start-state.test.ts +104 -0
  162. package/packages/omo-codex/plugin/components/codegraph/test/session-start-trust-boundary.test.ts +4 -2
  163. package/packages/omo-codex/plugin/components/codegraph/test/session-start-worker-cooldown.test.ts +116 -0
  164. package/packages/omo-codex/plugin/components/codegraph/test/session-start-worker-flow.test.ts +114 -119
  165. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  166. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  167. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  168. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  169. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  170. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  171. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +2 -2
  172. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  173. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  174. package/packages/omo-codex/plugin/components/rules/dist/cli.js +31 -14
  175. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  176. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  177. package/packages/omo-codex/plugin/components/start-work-continuation/directive.md +1 -1
  178. package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +2 -2
  179. package/packages/omo-codex/plugin/components/start-work-continuation/package.json +1 -1
  180. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  181. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  182. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  183. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  184. package/packages/omo-codex/plugin/components/ultrawork/directive.md +12 -7
  185. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  186. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  187. package/packages/omo-codex/plugin/components/ultrawork/skills/ultrawork/SKILL.md +12 -7
  188. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/SKILL.md +1 -1
  189. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/full-workflow.md +12 -1
  190. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/references/intent-clear.md +1 -1
  191. package/packages/omo-codex/plugin/components/ulw-loop/directive.md +12 -7
  192. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +4 -4
  193. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  194. package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/SKILL.md +19 -1
  195. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  196. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  197. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  198. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-codegraph-init-guidance.json +1 -1
  199. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  200. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  201. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  202. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  203. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  204. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  205. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  206. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  207. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  208. package/packages/omo-codex/plugin/hooks/session-start-checking-codegraph-bootstrap.json +1 -1
  209. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  210. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  211. package/packages/omo-codex/plugin/hooks/stop-checking-start-work-continuation.json +1 -1
  212. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  213. package/packages/omo-codex/plugin/hooks/subagent-stop-checking-start-work-continuation.json +1 -1
  214. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  215. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  216. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  217. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  218. package/packages/omo-codex/plugin/package-lock.json +42 -41
  219. package/packages/omo-codex/plugin/package.json +1 -1
  220. package/packages/omo-codex/plugin/shared/src/config-loader.ts +165 -16
  221. package/packages/omo-codex/plugin/shared/src/config-migration.ts +162 -0
  222. package/packages/omo-codex/plugin/shared/test/config-loader.test.ts +196 -18
  223. package/packages/omo-codex/plugin/skills/coding-agent-sessions/SKILL.md +5 -2
  224. package/packages/omo-codex/plugin/skills/coding-agent-sessions/references/all-platforms.md +3 -1
  225. package/packages/omo-codex/plugin/skills/coding-agent-sessions/references/senpi.md +15 -5
  226. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/pi_family.py +46 -0
  227. package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/scanners.py +19 -10
  228. package/packages/omo-codex/plugin/skills/debugging/SKILL.md +2 -1
  229. package/packages/omo-codex/plugin/skills/debugging/references/methodology/03-flaky-triage.md +47 -0
  230. package/packages/omo-codex/plugin/skills/frontend/ATTRIBUTION.md +7 -0
  231. package/packages/omo-codex/plugin/skills/frontend/SKILL.md +4 -1
  232. package/packages/omo-codex/plugin/skills/frontend/references/design/README.md +8 -0
  233. package/packages/omo-codex/plugin/skills/frontend/references/design/_INDEX.md +14 -1
  234. package/packages/omo-codex/plugin/skills/frontend/references/design/interaction-skill.md +144 -0
  235. package/packages/omo-codex/plugin/skills/programming/SKILL.md +11 -1
  236. package/packages/omo-codex/plugin/skills/programming/references/logging.md +6 -1
  237. package/packages/omo-codex/plugin/skills/programming/scripts/typescript/check-no-excuse-rules.ts +51 -17
  238. package/packages/omo-codex/plugin/skills/start-work/SKILL.md +12 -2
  239. package/packages/omo-codex/plugin/skills/ultrawork/SKILL.md +12 -7
  240. package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +19 -1
  241. package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +1 -1
  242. package/packages/omo-codex/plugin/skills/ulw-plan/references/full-workflow.md +12 -1
  243. package/packages/omo-codex/plugin/skills/ulw-plan/references/intent-clear.md +1 -1
  244. package/packages/omo-codex/plugin/test/sync-skills-orchestration.test.mjs +22 -0
  245. package/packages/omo-codex/scripts/install-dist/install-local.mjs +1 -1
  246. package/packages/shared-skills/skills/coding-agent-sessions/SKILL.md +5 -2
  247. package/packages/shared-skills/skills/coding-agent-sessions/references/all-platforms.md +3 -1
  248. package/packages/shared-skills/skills/coding-agent-sessions/references/senpi.md +15 -5
  249. package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/pi_family.py +46 -0
  250. package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/scanners.py +19 -10
  251. package/packages/shared-skills/skills/debugging/SKILL.md +2 -1
  252. package/packages/shared-skills/skills/debugging/references/methodology/03-flaky-triage.md +47 -0
  253. package/packages/shared-skills/skills/frontend/ATTRIBUTION.md +7 -0
  254. package/packages/shared-skills/skills/frontend/SKILL.md +4 -1
  255. package/packages/shared-skills/skills/frontend/references/design/README.md +8 -0
  256. package/packages/shared-skills/skills/frontend/references/design/_INDEX.md +14 -1
  257. package/packages/shared-skills/skills/frontend/references/design/interaction-skill.md +144 -0
  258. package/packages/shared-skills/skills/programming/SKILL.md +11 -1
  259. package/packages/shared-skills/skills/programming/references/logging.md +6 -1
  260. package/packages/shared-skills/skills/programming/scripts/typescript/check-no-excuse-rules.ts +51 -17
  261. package/packages/shared-skills/skills/start-work/SKILL.md +12 -2
  262. package/packages/shared-skills/skills/ulw-plan/SKILL.md +1 -1
  263. package/packages/shared-skills/skills/ulw-plan/references/full-workflow.md +12 -1
  264. package/packages/shared-skills/skills/ulw-plan/references/intent-clear.md +1 -1
  265. package/dist/plugin-config/layered-config-loader.d.ts +0 -2
  266. package/dist/plugin-config/single-config-loader.d.ts +0 -4
  267. package/dist/shared/migrate-legacy-config-file.d.ts +0 -1
  268. package/dist/shared/migration/config-migration.d.ts +0 -1
@@ -1,10 +1,10 @@
1
1
  import { z } from "zod";
2
2
  export declare const McpNameSchema: z.ZodEnum<{
3
- lsp: "lsp";
4
- websearch: "websearch";
3
+ codegraph: "codegraph";
5
4
  context7: "context7";
6
5
  grep_app: "grep_app";
7
- codegraph: "codegraph";
6
+ lsp: "lsp";
7
+ websearch: "websearch";
8
8
  }>;
9
9
  export type McpName = z.infer<typeof McpNameSchema>;
10
10
  export declare const AnyMcpNameSchema: z.ZodString;
@@ -6557,7 +6557,7 @@
6557
6557
  "type": "boolean"
6558
6558
  },
6559
6559
  "daemon": {
6560
- "default": false,
6560
+ "default": true,
6561
6561
  "type": "boolean"
6562
6562
  },
6563
6563
  "enabled": {
@@ -6,4 +6,5 @@ export declare function handleGoalMessage(args: {
6
6
  readonly output: ChatMessageHandlerOutput;
7
7
  readonly isFirstMessage: boolean;
8
8
  readonly pluginConfig: OhMyOpenCodeConfig;
9
+ readonly nativeGoalCommand: boolean;
9
10
  }): void;
@@ -10,11 +10,11 @@ type CommandExecuteBeforeOutput = {
10
10
  text?: string;
11
11
  [key: string]: unknown;
12
12
  }>;
13
- message?: Record<string, unknown>;
14
13
  };
15
- declare const NATIVE_LOOP_TRIGGERED_FLAG = "__omoNativeLoopTriggered";
14
+ export declare function markNativeGoalCommand(parts: CommandExecuteBeforeOutput["parts"]): void;
15
+ export declare function consumeNativeGoalCommandMarker(parts: CommandExecuteBeforeOutput["parts"]): boolean;
16
16
  export declare function createCommandExecuteBeforeHandler(args: {
17
17
  directory: string;
18
18
  hooks: CreatedHooks;
19
19
  }): (input: CommandExecuteBeforeInput, output: CommandExecuteBeforeOutput) => Promise<void>;
20
- export { NATIVE_LOOP_TRIGGERED_FLAG };
20
+ export {};
@@ -14,31 +14,6 @@ export declare function createCoreHooks(args: {
14
14
  isHookEnabled: (hookName: HookName) => boolean;
15
15
  safeHookEnabled: boolean;
16
16
  }): {
17
- claudeCodeHooks: ReturnType<typeof import("../../hooks").createClaudeCodeHooksHook> | null;
18
- keywordDetector: ReturnType<typeof import("../../hooks").createKeywordDetectorHook> | null;
19
- contextInjectorMessagesTransform: ReturnType<typeof import("../../features/context-injector").createContextInjectorMessagesTransformHook>;
20
- teamModeStatusInjector: ReturnType<typeof import("../../hooks").createTeamModeStatusInjector> | null;
21
- teamMailboxInjector: ReturnType<typeof import("../../hooks").createTeamMailboxInjector> | null;
22
- toolPairValidator: ReturnType<typeof import("../../hooks").createToolPairValidatorHook> | null;
23
- monitorStatusInjector: ReturnType<typeof import("../../hooks").createMonitorStatusInjectorHook> | null;
24
- commentChecker: ReturnType<typeof import("../../hooks").createCommentCheckerHooks> | null;
25
- toolOutputTruncator: ReturnType<typeof import("../../hooks").createToolOutputTruncatorHook> | null;
26
- directoryAgentsInjector: ReturnType<typeof import("../../hooks").createDirectoryAgentsInjectorHook> | null;
27
- directoryReadmeInjector: ReturnType<typeof import("../../hooks").createDirectoryReadmeInjectorHook> | null;
28
- emptyTaskResponseDetector: ReturnType<typeof import("../../hooks").createEmptyTaskResponseDetectorHook> | null;
29
- rulesInjector: ReturnType<typeof import("../../hooks").createRulesInjectorHook> | null;
30
- tasksTodowriteDisabler: ReturnType<typeof import("../../hooks").createTasksTodowriteDisablerHook> | null;
31
- writeExistingFileGuard: ReturnType<typeof import("../../hooks").createWriteExistingFileGuardHook> | null;
32
- bashFileReadGuard: ReturnType<typeof import("../../hooks").createBashFileReadGuardHook> | null;
33
- hashlineReadEnhancer: ReturnType<typeof import("../../hooks").createHashlineReadEnhancerHook> | null;
34
- jsonErrorRecovery: ReturnType<typeof import("../../hooks").createJsonErrorRecoveryHook> | null;
35
- readImageResizer: ReturnType<typeof import("../../hooks").createReadImageResizerHook> | null;
36
- todoDescriptionOverride: ReturnType<typeof import("../../hooks").createTodoDescriptionOverrideHook> | null;
37
- webfetchRedirectGuard: ReturnType<typeof import("../../hooks").createWebFetchRedirectGuardHook> | null;
38
- fsyncSkipWarning: ReturnType<typeof import("../../hooks").createFsyncSkipWarningHook> | null;
39
- teamToolGating: ReturnType<typeof import("../../hooks").createTeamToolGating> | null;
40
- notepadWriteGuard: ReturnType<typeof import("../../hooks").createNotepadWriteGuardHook> | null;
41
- planFormatValidator: ReturnType<typeof import("../../hooks").createPlanFormatValidatorHook> | null;
42
17
  preemptiveCompaction: ReturnType<typeof import("../../hooks").createPreemptiveCompactionHook> | null;
43
18
  sessionNotification: ReturnType<typeof import("../../hooks").createSessionNotification> | null;
44
19
  thinkMode: ReturnType<typeof import("../../hooks").createThinkModeHook> | null;
@@ -63,4 +38,29 @@ export declare function createCoreHooks(args: {
63
38
  taskResumeInfo: ReturnType<typeof import("../../hooks").createTaskResumeInfoHook> | null;
64
39
  runtimeFallback: ReturnType<typeof import("../../hooks").createRuntimeFallbackHook> | null;
65
40
  legacyPluginToast: ReturnType<typeof import("../../hooks").createLegacyPluginToastHook> | null;
41
+ commentChecker: ReturnType<typeof import("../../hooks").createCommentCheckerHooks> | null;
42
+ toolOutputTruncator: ReturnType<typeof import("../../hooks").createToolOutputTruncatorHook> | null;
43
+ directoryAgentsInjector: ReturnType<typeof import("../../hooks").createDirectoryAgentsInjectorHook> | null;
44
+ directoryReadmeInjector: ReturnType<typeof import("../../hooks").createDirectoryReadmeInjectorHook> | null;
45
+ emptyTaskResponseDetector: ReturnType<typeof import("../../hooks").createEmptyTaskResponseDetectorHook> | null;
46
+ rulesInjector: ReturnType<typeof import("../../hooks").createRulesInjectorHook> | null;
47
+ tasksTodowriteDisabler: ReturnType<typeof import("../../hooks").createTasksTodowriteDisablerHook> | null;
48
+ writeExistingFileGuard: ReturnType<typeof import("../../hooks").createWriteExistingFileGuardHook> | null;
49
+ bashFileReadGuard: ReturnType<typeof import("../../hooks").createBashFileReadGuardHook> | null;
50
+ hashlineReadEnhancer: ReturnType<typeof import("../../hooks").createHashlineReadEnhancerHook> | null;
51
+ jsonErrorRecovery: ReturnType<typeof import("../../hooks").createJsonErrorRecoveryHook> | null;
52
+ readImageResizer: ReturnType<typeof import("../../hooks").createReadImageResizerHook> | null;
53
+ todoDescriptionOverride: ReturnType<typeof import("../../hooks").createTodoDescriptionOverrideHook> | null;
54
+ webfetchRedirectGuard: ReturnType<typeof import("../../hooks").createWebFetchRedirectGuardHook> | null;
55
+ fsyncSkipWarning: ReturnType<typeof import("../../hooks").createFsyncSkipWarningHook> | null;
56
+ teamToolGating: ReturnType<typeof import("../../hooks").createTeamToolGating> | null;
57
+ notepadWriteGuard: ReturnType<typeof import("../../hooks").createNotepadWriteGuardHook> | null;
58
+ planFormatValidator: ReturnType<typeof import("../../hooks").createPlanFormatValidatorHook> | null;
59
+ claudeCodeHooks: ReturnType<typeof import("../../hooks").createClaudeCodeHooksHook> | null;
60
+ keywordDetector: ReturnType<typeof import("../../hooks").createKeywordDetectorHook> | null;
61
+ contextInjectorMessagesTransform: ReturnType<typeof import("../../features/context-injector").createContextInjectorMessagesTransformHook>;
62
+ teamModeStatusInjector: ReturnType<typeof import("../../hooks").createTeamModeStatusInjector> | null;
63
+ teamMailboxInjector: ReturnType<typeof import("../../hooks").createTeamMailboxInjector> | null;
64
+ toolPairValidator: ReturnType<typeof import("../../hooks").createToolPairValidatorHook> | null;
65
+ monitorStatusInjector: ReturnType<typeof import("../../hooks").createMonitorStatusInjectorHook> | null;
66
66
  };
@@ -0,0 +1,14 @@
1
+ import { type OmoConfigEnv } from "@oh-my-opencode/omo-config-core";
2
+ export type OmoOpenCodeConfigView = {
3
+ readonly config: Record<string, unknown>;
4
+ readonly path: string;
5
+ };
6
+ export type OmoOpenCodeConfigChain = {
7
+ readonly diagnostics: readonly {
8
+ readonly message: string;
9
+ readonly path: string;
10
+ }[];
11
+ readonly protectedUserView: Record<string, unknown>;
12
+ readonly views: readonly OmoOpenCodeConfigView[];
13
+ };
14
+ export declare function loadOmoOpenCodeConfigChain(directory: string, environment?: OmoConfigEnv): OmoOpenCodeConfigChain;
@@ -0,0 +1,5 @@
1
+ import * as z from "zod";
2
+ export type UnknownKeyPath = readonly PropertyKey[];
3
+ type Schema = z.core.$ZodType;
4
+ export declare function findUnknownKeyPaths(schema: Schema, value: unknown): readonly UnknownKeyPath[];
5
+ export {};
@@ -1,3 +1,3 @@
1
- export { loadPluginConfig } from "./plugin-config/layered-config-loader";
1
+ import type { OhMyOpenCodeConfig } from "./config";
2
2
  export { mergeConfigs } from "./plugin-config/config-merger";
3
- export { loadConfigFromPath, parseConfigPartially, } from "./plugin-config/single-config-loader";
3
+ export declare function loadPluginConfig(directory: string, _context: unknown): OhMyOpenCodeConfig;
@@ -19,7 +19,7 @@ export declare function stripAgentListSortPrefix(agentName: string): string;
19
19
  *
20
20
  * @param overrides - Optional per-agent overrides map. If the agent has a `displayName`
21
21
  * field set, it takes precedence over the hardcoded AGENT_DISPLAY_NAMES entry.
22
- * This enables i18n: `agents.sisyphus.displayName = "总指挥"` in oh-my-openagent.json.
22
+ * This enables i18n: `agents.sisyphus.displayName = "总指挥"` in .omo/omo.jsonc.
23
23
  */
24
24
  export declare function getAgentDisplayName(configKey: string, overrides?: Record<string, {
25
25
  displayName?: string;
@@ -1 +1 @@
1
- export { clearPluginConfigFileDetectionCache, detectConfigFile, detectPluginConfigFile, parseJsonc, parseJsoncSafe, readJsoncFile, type DetectPluginConfigFileOptions, type JsoncParseResult, } from "@oh-my-opencode/utils";
1
+ export { detectConfigFile, parseJsonc, parseJsoncSafe, readJsoncFile, type JsoncParseResult, } from "@oh-my-opencode/utils";
@@ -1 +1,5 @@
1
- export * from "@oh-my-opencode/utils/migration";
1
+ export { AGENT_NAME_MAP, BUILTIN_AGENT_NAMES, migrateAgentNames } from "@oh-my-opencode/utils/migration/agent-names";
2
+ export { migrateAgentConfigToCategory, MODEL_TO_CATEGORY_MAP, shouldDeleteAgentConfig } from "@oh-my-opencode/utils/migration/agent-category";
3
+ export { HOOK_NAME_MAP, migrateHookNames } from "@oh-my-opencode/utils/migration/hook-names";
4
+ export { getSidecarPath, readAppliedMigrations, writeAppliedMigrations } from "@oh-my-opencode/utils/migration/migrations-sidecar";
5
+ export { migrateModelVersions, MODEL_VERSION_MAP } from "@oh-my-opencode/utils/migration/model-versions";
@@ -9,5 +9,4 @@ export type OpenCodeConfigPaths = {
9
9
  configJson: string;
10
10
  configJsonc: string;
11
11
  packageJson: string;
12
- omoConfig: string;
13
12
  };
@@ -1,8 +1,6 @@
1
- export declare const PLUGIN_NAME: string;
2
- export declare const LEGACY_PLUGIN_NAME: string;
3
- export declare const PUBLISHED_PACKAGE_NAME: string;
4
- export declare const ACCEPTED_PACKAGE_NAMES: readonly string[];
5
- export declare const CONFIG_BASENAME: string;
6
- export declare const LEGACY_CONFIG_BASENAME: string;
7
- export declare const LOG_FILENAME: string;
8
- export declare const CACHE_DIR_NAME: string;
1
+ export declare const PLUGIN_NAME = "oh-my-openagent";
2
+ export declare const LEGACY_PLUGIN_NAME = "oh-my-opencode";
3
+ export declare const PUBLISHED_PACKAGE_NAME = "oh-my-openagent";
4
+ export declare const ACCEPTED_PACKAGE_NAMES: string[];
5
+ export declare const LOG_FILENAME = "oh-my-opencode.log";
6
+ export declare const CACHE_DIR_NAME = "oh-my-opencode";
@@ -4,4 +4,3 @@ export declare function findProjectClaudeSkillDirs(startDirectory: string, stopD
4
4
  export declare function findProjectAgentsSkillDirs(startDirectory: string, stopDirectory?: string): string[];
5
5
  export declare function findProjectOpencodeSkillDirs(startDirectory: string, stopDirectory?: string): string[];
6
6
  export declare function findProjectOpencodeCommandDirs(startDirectory: string, stopDirectory?: string): string[];
7
- export declare function findProjectOpencodePluginConfigFiles(startDirectory: string, stopDirectory?: string): string[];
@@ -1,2 +1,2 @@
1
- export { getCurrentPaneId, isInsideTmux, isInsideTmuxEnvironment, } from "@oh-my-opencode/tmux-core";
1
+ export { getCurrentPaneId, isInsideTmux, isInsideTmuxEnvironment, isNativeTmux, isNativeTmuxEnvironment, isTmuxPaneCompatible, isTmuxPaneCompatibleEnvironment, } from "@oh-my-opencode/tmux-core";
2
2
  export type { SplitDirection } from "@oh-my-opencode/tmux-core";
@@ -1,4 +1,4 @@
1
- export { isInsideTmux, getCurrentPaneId } from "./tmux-utils/environment";
1
+ export { isInsideTmux, isNativeTmux, isTmuxPaneCompatible, getCurrentPaneId } from "./tmux-utils/environment";
2
2
  export type { SplitDirection } from "./tmux-utils/environment";
3
3
  export { isServerRunning, resetServerCheck, markServerRunningInProcess } from "./tmux-utils/server-health";
4
4
  export { getPaneDimensions } from "./tmux-utils/pane-dimensions";
@@ -0,0 +1,7 @@
1
+ import type { SourceFile } from "typescript/unstable/ast";
2
+ export declare class TypeScriptSourceParser {
3
+ #private;
4
+ constructor(cwd: string);
5
+ parse(filePaths: readonly string[]): Promise<ReadonlyMap<string, SourceFile>>;
6
+ close(): Promise<void>;
7
+ }
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: coding-agent-sessions
3
- description: "MUST USE when asked to find, read, list, search, inspect, fetch, export, or reconstruct coding-agent sessions across Codex, Claude Code/Desktop, OpenCode, Senpi/pi, OpenClaw, Factory Droid, Amp, Gemini/Kimi/Qwen CLIs, Codebuff, Roo/Kilo/Cline, Kodu, Cursor CLI, Aider, or unknown local agent logs. Covers transcripts, session IDs, rollout JSONL, state SQLite, Claude projects/pre-compact histories, OpenCode messages/parts, child/subagent linkage, cwd/model/time/token filters, archives, and cost clues. Expands fuzzy recall into parallel query lanes and first probes known stores so absent platforms are skipped cheaply. Triggers: coding agent sessions, Codex/Claude/OpenCode/Senpi/pi/OpenClaw/Droid/Amp/Kodu/Cursor/Aider sessions, transcript search, session history, session ID, read transcript, token usage, subagent sessions, what did I do yesterday, did we already do this."
3
+ description: "MUST USE when asked to find, read, list, search, inspect, fetch, export, or reconstruct coding-agent sessions across Codex, Claude Code/Desktop, OpenCode, Senpi/pi, oh-my-pi (omp), gajae-code (gjc), OpenClaw, Factory Droid, Amp, Gemini/Kimi/Qwen CLIs, Codebuff, Roo/Kilo/Cline, Kodu, Cursor CLI, Aider, or unknown local agent logs. Covers transcripts, session IDs, rollout JSONL, state SQLite, Claude projects/pre-compact histories, OpenCode messages/parts, child/subagent linkage, cwd/model/time/token filters, archives, and cost clues. Expands fuzzy recall into parallel query lanes and first probes known stores so absent platforms are skipped cheaply. Triggers: coding agent sessions, Codex/Claude/OpenCode/Senpi/pi/oh-my-pi/omp/gajae-code/gjc/OpenClaw/Droid/Amp/Kodu/Cursor/Aider sessions, transcript search, session history, session ID, read transcript, token usage, subagent sessions, what did I do yesterday, did we already do this."
4
4
  ---
5
5
 
6
6
  # Coding Agent Sessions
@@ -16,6 +16,7 @@ Find local coding-agent sessions across agent products before answering from mem
16
16
  | Codex / OpenAI Codex CLI | `references/codex.md` |
17
17
  | Claude Code / Claude Desktop histories | `references/claude.md` |
18
18
  | Senpi / pi coding-agent logs | `references/senpi.md` |
19
+ | oh-my-pi (`omp`, `~/.omp`) and gajae-code (`gjc`, `~/.gjc`) logs | `references/senpi.md` |
19
20
  | OpenCode / oh-my-openagent (formerly oh-my-opencode) storage | `references/opencode.md` |
20
21
  | OpenClaw, Droid, Amp, Gemini, Kimi, Qwen, Codebuff, Roo/Kilo/Cline, Kodu, Cursor CLI, Aider, Kiro, Goose, Hermes, Crush, Zed | `references/all-platforms.md` |
21
22
  | Unknown / "any session" / cross-agent search | `references/all-platforms.md` |
@@ -28,6 +29,7 @@ When the user remembers a task vaguely ("that OpenCode bug", "the dashboard PR",
28
29
  python3 scripts/find-agent-sessions.py list --limit 20
29
30
  python3 scripts/find-agent-sessions.py find "commit" --from 7d --platform senpi --platform opencode
30
31
  python3 scripts/find-agent-sessions.py find "proxy" --platform openclaw --platform droid --platform amp
32
+ python3 scripts/find-agent-sessions.py find "refactor" --platform oh-my-pi --platform gajae-code
31
33
  python3 scripts/find-agent-sessions.py find --query "deploy" --query "token usage" --workers 64
32
34
  python3 scripts/find-agent-sessions.py find --query "opencode bug" --query "fix opencode" --query "OpenCode parent session" --include-subagents --workers 64
33
35
  python3 scripts/find-agent-sessions.py read <session-id>
@@ -49,7 +51,7 @@ The finder prints JSON for stdout and `jq`. Every result includes:
49
51
 
50
52
  | Field | Meaning |
51
53
  |---|---|
52
- | `platform` | Registered platform key such as `codex`, `claude`, `opencode`, `openclaw`, `droid`, `amp`, `kodu`, `cursor-cli`, `aider`, `roo-code`, `kilo-code`, `kilo-cli`, or `kiro` |
54
+ | `platform` | Registered platform key such as `codex`, `claude`, `senpi`, `oh-my-pi`, `gajae-code`, `opencode`, `openclaw`, `droid`, `amp`, `kodu`, `cursor-cli`, `aider`, `roo-code`, `kilo-code`, `kilo-cli`, or `kiro` |
53
55
  | `id` | Session ID or stable file-derived ID |
54
56
  | `path` | Raw transcript/index file |
55
57
  | `cwd` | Working directory when recoverable |
@@ -117,6 +119,7 @@ Use `references/codex.md` for Codex storage details.
117
119
  | Problem | Fix |
118
120
  |---|---|
119
121
  | Missing Codex sessions | Set `CODEX_HOME` or pass `--root /path/to/.codex`. |
122
+ | Missing oh-my-pi / gajae-code sessions | Those stores live in `~/.omp/agent/sessions` and `~/.gjc/agent/sessions`. For a custom `PI_CONFIG_DIR` / `PI_CODING_AGENT_DIR`, pass that agent dir with `--root`. |
120
123
  | Missing OpenCode sessions | Pass the data dir that contains `messages/` and `parts/`, often `~/.opencode` or `~/.local/share/opencode`. |
121
124
  | Missing Claude sessions | Search `~/.claude/projects`, `~/.claude/transcripts`, and `~/.claude/pre-compact-session-histories`; use `--root` for nonstandard config dirs. |
122
125
  | Missing optional platform sessions | Check `references/all-platforms.md` for the exact local store. For project-local tools such as Aider, pass `--root /path/to/workspace` if the repo is outside the bounded default roots. |
@@ -4,13 +4,15 @@
4
4
 
5
5
  Search these first, then add user-supplied roots with `--root`:
6
6
 
7
- Registered platform keys: `codex`, `claude`, `senpi`, `opencode`, `openclaw`, `droid`, `amp`, `gemini`, `kimi`, `qwen`, `codebuff`, `roo-code`, `kilo-code`, `cline`, `kodu`, `cursor-cli`, `aider`, `kilo-cli`, `hermes`, `goose`, `crush`, `zed`, `kiro`.
7
+ Registered platform keys: `codex`, `claude`, `senpi`, `oh-my-pi`, `gajae-code`, `opencode`, `openclaw`, `droid`, `amp`, `gemini`, `kimi`, `qwen`, `codebuff`, `roo-code`, `kilo-code`, `cline`, `kodu`, `cursor-cli`, `aider`, `kilo-cli`, `hermes`, `goose`, `crush`, `zed`, `kiro`.
8
8
 
9
9
  | Platform | Unix/macOS | Windows |
10
10
  |---|---|---|
11
11
  | Codex | `$CODEX_HOME`, `~/.codex` | `%CODEX_HOME%`, `%USERPROFILE%\.codex` |
12
12
  | Claude | `~/.claude` | `%USERPROFILE%\.claude`, `%APPDATA%\Claude` |
13
13
  | Senpi / pi | `~/.senpi/agent`, `~/.pi/agent` | `%USERPROFILE%\.senpi\agent`, `%USERPROFILE%\.pi\agent` |
14
+ | oh-my-pi (`omp`) | `~/.omp/agent`, `~/.omp/profiles/*/agent`, `$XDG_DATA_HOME/omp` | `%USERPROFILE%\.omp\agent` |
15
+ | gajae-code (`gjc`) | `~/.gjc/agent`, `~/.gjc/profiles/*/agent`, `$XDG_DATA_HOME/gjc` | `%USERPROFILE%\.gjc\agent` |
14
16
  | OpenCode | `$OPENCODE_HOME`, `~/.opencode`, `~/.local/share/opencode` | `%OPENCODE_HOME%`, `%APPDATA%\opencode`, `%USERPROFILE%\.opencode` |
15
17
  | OpenClaw | `~/.openclaw/agents/*/sessions`, `~/.openclaw/session-backups` | pass `--root` |
16
18
  | Factory Droid | `~/.factory/sessions/*/*.jsonl` | pass `--root` |
@@ -1,10 +1,20 @@
1
- # Senpi / pi Coding-Agent Sessions
1
+ # Senpi / pi Family Coding-Agent Sessions
2
2
 
3
- Observed Senpi layout:
3
+ The pi family (Senpi, oh-my-pi, gajae-code) shares one session format, so one scanner serves all three under separate platform keys.
4
4
 
5
- - `~/.senpi/agent/sessions/<encoded-cwd>/<timestamp>_<uuid>.jsonl`
6
- - `~/.senpi/agent/settings.json`, `models.json`, and `auth.json` provide environment context.
7
- - `~/.pi/agent/sessions/**` can use the same family of JSONL formats.
5
+ | Platform key | Aliases | Config root | Sessions |
6
+ |---|---|---|---|
7
+ | `senpi` | - | `~/.senpi`, `~/.pi` | `<root>/agent/sessions/<encoded-cwd>/<timestamp>_<uuid>.jsonl` |
8
+ | `oh-my-pi` | `omp`, `ohmypi` | `~/.omp` | `~/.omp/agent/sessions/<encoded-cwd>/<timestamp>_<uuid>.jsonl` |
9
+ | `gajae-code` | `gjc`, `gajae` | `~/.gjc` | `~/.gjc/agent/sessions/<encoded-cwd>/<timestamp>_<uuid>.jsonl` |
10
+
11
+ Extra roots scanned for every pi-family platform:
12
+
13
+ - Named profiles: `<config-root>/profiles/<profile>/agent/sessions/**`.
14
+ - XDG stores (macOS/Linux, default profile): `$XDG_DATA_HOME/<app>/sessions/**` and `$XDG_DATA_HOME/<app>/profiles/<profile>/sessions/**`, where `<app>` is `senpi`, `omp`, or `gjc`. XDG flattens the `agent/` path segment.
15
+ - A custom `PI_CONFIG_DIR` / `PI_CODING_AGENT_DIR` / `GJC_CONFIG_DIR` store: pass that agent directory with `--root`.
16
+
17
+ `~/.senpi/agent/settings.json`, `models.json`, and `auth.json` provide environment context; oh-my-pi and gajae-code keep the same files plus `config.yml` and `models.yml` next to their sessions directory.
8
18
 
9
19
  Common event types:
10
20
 
@@ -0,0 +1,46 @@
1
+ from __future__ import annotations
2
+
3
+ from pathlib import Path
4
+
5
+ from .transcript import env_path, existing, jsonl_parallel, recent, stem_id
6
+ from .types import Session
7
+
8
+ SENPI_CONFIG_DIRS = (".senpi", ".pi")
9
+ OH_MY_PI_CONFIG_DIRS = (".omp",)
10
+ GAJAE_CODE_CONFIG_DIRS = (".gjc",)
11
+
12
+ __all__ = ["scan_gajae_code", "scan_oh_my_pi", "scan_senpi"]
13
+
14
+
15
+ def scan_senpi(extra_roots: tuple[Path, ...], workers: int) -> list[Session]:
16
+ return _scan_pi_family("senpi", SENPI_CONFIG_DIRS, "senpi", extra_roots, workers)
17
+
18
+
19
+ def scan_oh_my_pi(extra_roots: tuple[Path, ...], workers: int) -> list[Session]:
20
+ return _scan_pi_family("oh-my-pi", OH_MY_PI_CONFIG_DIRS, "omp", extra_roots, workers)
21
+
22
+
23
+ def scan_gajae_code(extra_roots: tuple[Path, ...], workers: int) -> list[Session]:
24
+ return _scan_pi_family("gajae-code", GAJAE_CODE_CONFIG_DIRS, "gjc", extra_roots, workers)
25
+
26
+
27
+ def _scan_pi_family(platform: str, config_dirs: tuple[str, ...], xdg_app: str, extra_roots: tuple[Path, ...], workers: int) -> list[Session]:
28
+ roots = _pi_family_roots(config_dirs, xdg_app, extra_roots)
29
+ paths = [path for root in roots for path in (root / "sessions").rglob("*.jsonl")]
30
+ return jsonl_parallel(recent(paths), workers, platform, lambda path: stem_id(path, "_"))
31
+
32
+
33
+ def _pi_family_roots(config_dirs: tuple[str, ...], xdg_app: str, extra_roots: tuple[Path, ...]) -> list[Path]:
34
+ home = Path.home()
35
+ roots: list[Path] = []
36
+ for config_dir in config_dirs:
37
+ base = home / config_dir
38
+ roots.append(base / "agent")
39
+ roots.extend(sorted(base.glob("profiles/*/agent")))
40
+ xdg_data = env_path("XDG_DATA_HOME")
41
+ if xdg_data is not None:
42
+ app_root = xdg_data / xdg_app
43
+ roots.append(app_root)
44
+ roots.extend(sorted(app_root.glob("profiles/*")))
45
+ roots.extend(extra_roots)
46
+ return existing(roots)
@@ -21,9 +21,9 @@ from .file_scanners import (
21
21
  )
22
22
  from .kiro_scanner import scan_kiro
23
23
  from .opencode import scan_opencode
24
+ from .pi_family import scan_gajae_code, scan_oh_my_pi, scan_senpi
24
25
  from .sqlite_optional_scanners import scan_crush, scan_goose, scan_hermes, scan_kilo_cli, scan_zed
25
26
  from .sqlite_scanners import scan_cursor_cli, scan_kodu
26
- from .transcript import existing, jsonl_parallel, recent, stem_id
27
27
  from .types import Session
28
28
 
29
29
  Scanner: TypeAlias = Callable[[tuple[Path, ...], int], list[Session]]
@@ -31,7 +31,9 @@ Scanner: TypeAlias = Callable[[tuple[Path, ...], int], list[Session]]
31
31
  PLATFORM_SCANNERS: dict[str, Scanner] = {
32
32
  "codex": scan_codex,
33
33
  "claude": scan_claude,
34
- "senpi": lambda roots, workers: scan_senpi(roots, workers),
34
+ "senpi": scan_senpi,
35
+ "oh-my-pi": scan_oh_my_pi,
36
+ "gajae-code": scan_gajae_code,
35
37
  "opencode": scan_opencode,
36
38
  "openclaw": scan_openclaw,
37
39
  "droid": scan_droid,
@@ -54,9 +56,22 @@ PLATFORM_SCANNERS: dict[str, Scanner] = {
54
56
  "kiro": scan_kiro,
55
57
  }
56
58
  DEFAULT_PLATFORMS = frozenset(PLATFORM_SCANNERS)
57
- PLATFORM_ALIASES = {"cursor": "cursor-cli", "factory": "droid", "roo": "roo-code", "roocode": "roo-code", "kilocode": "kilo-code", "kilo": "kilo-cli"}
59
+ PLATFORM_ALIASES = {
60
+ "cursor": "cursor-cli",
61
+ "factory": "droid",
62
+ "roo": "roo-code",
63
+ "roocode": "roo-code",
64
+ "kilocode": "kilo-code",
65
+ "kilo": "kilo-cli",
66
+ "omp": "oh-my-pi",
67
+ "ohmypi": "oh-my-pi",
68
+ "oh_my_pi": "oh-my-pi",
69
+ "gjc": "gajae-code",
70
+ "gajae": "gajae-code",
71
+ "gajaecode": "gajae-code",
72
+ }
58
73
 
59
- __all__ = ["DEFAULT_PLATFORMS", "PLATFORM_SCANNERS", "scan", "scan_claude", "scan_codex", "scan_opencode", "scan_senpi"]
74
+ __all__ = ["DEFAULT_PLATFORMS", "PLATFORM_SCANNERS", "scan", "scan_claude", "scan_codex", "scan_gajae_code", "scan_oh_my_pi", "scan_opencode", "scan_senpi"]
60
75
 
61
76
 
62
77
  def scan(platforms: frozenset[str], roots: tuple[Path, ...], workers: int) -> list[Session]:
@@ -72,12 +87,6 @@ def scan(platforms: frozenset[str], roots: tuple[Path, ...], workers: int) -> li
72
87
  return _dedupe(sessions)
73
88
 
74
89
 
75
- def scan_senpi(extra_roots: tuple[Path, ...], workers: int) -> list[Session]:
76
- roots = existing([Path.home() / ".senpi" / "agent", Path.home() / ".pi" / "agent", *extra_roots])
77
- paths = [path for root in roots for path in (root / "sessions").rglob("*.jsonl")]
78
- return jsonl_parallel(recent(paths), workers, "senpi", lambda path: stem_id(path, "_"))
79
-
80
-
81
90
  def _dedupe(sessions: list[Session]) -> list[Session]:
82
91
  found: dict[tuple[str, str], Session] = {}
83
92
  for session in sessions:
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: debugging
3
- description: "MUST USE for any real runtime debugging across ANY language or binary — crashes, silent failures, wrong responses, stuck processes, memory leaks, async misbehavior, unexplained timing, reverse engineering. Runs a hypothesis-driven loop: form ≥3 hypotheses, investigate in parallel, after 2 failed rounds spawn Oracles from orthogonal angles, confirm root cause, lock with a failing test, fix minimally, QA by actually USING the system, scrub artifacts. The actual HOW lives in `references/` — READ THEM. Triggers: 'debug this', 'why is X not working', 'hanging', 'attach a debugger', 'reverse engineer', 'pwndbg', 'gdb', 'lldb', 'node inspect', 'tsx debug', 'pdb', 'dlv', 'delve', 'rust-gdb', 'set a breakpoint', 'context window exploded', 'why is the response empty', 'attach the debugger', 'debug it', 'why is this happening', 'trace this bug', 'reproduce and fix', 'silent failure', 'HTTP 200 but empty', 'why did it stop', 'inspect the binary', 'reverse engineering', 'playwright'."
3
+ description: "MUST USE for any real runtime debugging across ANY language or binary — crashes, silent failures, wrong responses, stuck processes, memory leaks, async misbehavior, unexplained timing, reverse engineering. Runs a hypothesis-driven loop: form ≥3 hypotheses, investigate in parallel, after 2 failed rounds spawn Oracles from orthogonal angles, confirm root cause, lock with a failing test, fix minimally, QA by actually USING the system, scrub artifacts. The actual HOW lives in `references/` — READ THEM. Triggers: 'debug this', 'why is X not working', 'hanging', 'attach a debugger', 'reverse engineer', 'pwndbg', 'gdb', 'lldb', 'node inspect', 'tsx debug', 'pdb', 'dlv', 'delve', 'rust-gdb', 'set a breakpoint', 'context window exploded', 'why is the response empty', 'why is this happening', 'trace this bug', 'reproduce and fix', 'silent failure', 'HTTP 200 but empty', 'why did it stop', 'inspect the binary', 'playwright', 'flaky test', 'fails intermittently', 'passes in isolation', 'only fails in CI'."
4
4
  ---
5
5
 
6
6
  # Debugging
@@ -84,6 +84,7 @@ These are not phases — read them when the situation calls for them:
84
84
 
85
85
  | Situation | Reference |
86
86
  |---|---|
87
+ | The failure is intermittent — fails sometimes, a different test each run, passes in isolation, or only fails in CI | 📖 **[references/methodology/03-flaky-triage.md](references/methodology/03-flaky-triage.md)** — read BEFORE Phase 2; the failure signature usually collapses the search space in one round |
87
88
  | You cannot run the actual operation (paid API, blocked network, missing hardware) but still need runtime evidence | 📖 **[references/methodology/partial-runtime-evidence.md](references/methodology/partial-runtime-evidence.md)** |
88
89
  | You're about to declare an extraction / audit / reverse-engineering task done and want a skeptical pass | 📖 **[references/methodology/partial-runtime-evidence.md#verification-oracle-pattern-for-non-debug-tasks](references/methodology/partial-runtime-evidence.md#verification-oracle-pattern-for-non-debug-tasks)** (Verification Oracle is *not* the same as Oracle Triple — read the file) |
89
90
 
@@ -0,0 +1,47 @@
1
+ # Intermittent / Flaky Failure Triage
2
+
3
+ Read this when a failure does not reproduce on every run — "fails sometimes", "a different test each run", "passes in isolation", "only fails in CI". Do not enter the hypothesis loop blind: **intermittence itself is evidence.** This triage usually collapses the search space in one round, before Phase 2 hypothesis formation.
4
+
5
+ ---
6
+
7
+ ## Step 1 — Capture the failure signature (three cheap reruns)
8
+
9
+ Run these before forming any hypothesis. Journal each result.
10
+
11
+ | Rerun | Command shape | Question it answers |
12
+ |---|---|---|
13
+ | Same scope, same command | exactly what just failed | Does the SAME test fail again, or a different one? |
14
+ | Failing test in isolation | single file / test filter | Does it pass alone? |
15
+ | Full scope on a quiet machine | stop concurrent builds, suites, background agents first | Does the whole suite go green when nothing else runs? |
16
+ | (When order is suspect) shuffled | `-shuffle=on` / `pytest-randomly` / runner's random seed | Does a specific order reproduce it? Record the seed. |
17
+
18
+ ## Step 2 — Read the signature
19
+
20
+ | Signature | Dominant hypothesis | Next move |
21
+ |---|---|---|
22
+ | Same test fails intermittently, everywhere | Real race in the code under test, or an async test bug (fixed sleep, unawaited promise, poll-for-time) | Standard phase loop from `02-investigate.md`; reproduce deterministically by subscribing to the completion event or injecting a clock |
23
+ | **A different test/file each run; each passes in isolation; quiet machine is green** | **Environment contention between concurrent runs — not the code** | Step 3 checklist |
24
+ | Always the same test, but only in the full suite; isolation green | Test-order dependence / fixture leak (unreset module state, leaked env var, shared singleton) | Bisect with the shuffle seed; find the test that leaks, fix its teardown |
25
+ | Fails only on CI, never locally | Resource ceilings (slower disk/CPU → timeouts), different parallelism defaults, container clock | Reproduce locally under constraint (`taskset`, low `--maxWorkers`); raise the *signal* not the sleep |
26
+ | Green on plain rerun of the same commit | Still a flake — classify it with this table before ignoring it; an unclassified flake is a hidden bug report | Step 1 again with journaling |
27
+
28
+ ## Step 3 — Concurrent-run contention checklist
29
+
30
+ The classic modern cause: **two checkouts or worktrees of the same repo — or one checkout plus a background agent — running suites at the same time while sharing a global mutable resource.** Multi-agent workstations make this the default failure mode, not an exotic one. Check each:
31
+
32
+ - **Shared tmp roots** — a sandbox/cache dir derived from a *fixed* tmpdir path (`$TMPDIR/<project>-fixed-name`) instead of a per-run `mktemp`. Both runs read/write the same tree; the loser sees half-deleted state.
33
+ - **Fixed ports** — hardcoded listen ports in test servers. Two suites race to bind; the loser gets 404/ECONNREFUSED mid-run, in whichever file happened to be running.
34
+ - **Global env / config mutation** — tests writing process-external state (dotfiles, shared config, global env) the other run reads.
35
+ - **Shared containers / databases** — same-named containers, same schema, same volume.
36
+ - **Caches and locks** — package-manager caches, lockfiles, `.git` index contention.
37
+
38
+ Evidence to capture while it is live: `lsof -i :<port>` during the failure window, a listing of the shared tmp path, a process list showing the concurrent runners.
39
+
40
+ ## Step 4 — Fix policy
41
+
42
+ - **Environment contention** → fix the **test infrastructure**, never the individual test: namespace every suite-global resource per run — `mktemp` for roots, port `0`/ephemeral allocation, unique container names. The bar: *two checkouts of this repo running the suite concurrently must not interfere.* (The programming skill's test-isolation rules own this bar.)
43
+ - **Order dependence** → find the leaking fixture via the recorded shuffle seed; reset at teardown; re-run shuffled until the seed class is clean.
44
+ - **Real race** → normal phase loop (`02-investigate.md` onward); the fix ships with a failing-first test that reproduces deterministically.
45
+ - **Forbidden regardless of cause**: retry wrappers around the test, enlarged sleeps, `.retry(N)`, quarantining, or deleting the test. Each one buries a bug report.
46
+
47
+ A flake you classified but did not fix is a **finding to report**, not to hide: journal the signature, the evidence, and the classification, and say it in your final report.
@@ -210,6 +210,13 @@ no Lazyweb source, documentation text, or screenshot content is vendored. Lazywe
210
210
  remain the property of their owner, and the guide grants no license to ship, trace, or
211
211
  commit reference screenshots harvested through it.
212
212
 
213
+ `frontend/references/design/interaction-skill.md` is a project-original, curl-only
214
+ operating guide for consulting the beui.dev animated-component registry during interaction
215
+ and motion work, written from live endpoint verification; no beui.dev source code,
216
+ documentation text, or component implementations are vendored. beui.dev names remain the
217
+ property of their owner, and the guide instructs reading component source for mechanism
218
+ extraction only, not vendoring it into references or projects.
219
+
213
220
  `frontend/references/design/clone-from-url.md` is a project-original runtime-extraction
214
221
  workflow guide. Its browser + `getComputedStyle` clone approach follows the same
215
222
  MIT-licensed `JCodesMore/ai-website-cloner-template` clone-website workflow that `aside.md`
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: frontend
3
- description: "MUST USE for frontend/web UI/UX/visual work: building, styling, redesigning pages/components, React setup, performance audits, visual QA, taste, and polish. Routes four rulesets: design taste router and brand references; perfection for Playwright/Chromium Lighthouse/Core Web Vitals; ui-ux-db palettes/fonts/guidelines; designpowers personas/accessibility/critique/handoff; plus curl-only lazyweb real-app-screen research for design direction. Triggers: frontend, UI, UX, design, redesign, styling, layout, animation, motion, premium, luxury, minimal, brutalist, Awwwards, DESIGN.md, mockup, React, Lighthouse, accessibility, WCAG, Core Web Vitals, looks generic, make it pretty, like X brand, lazyweb, design research."
3
+ description: "MUST USE for frontend/web UI/UX/visual work: building, styling, redesigning pages/components, React setup, performance audits, visual QA, taste, and polish. Routes four rulesets: design taste router and brand references; perfection for Playwright/Chromium Lighthouse/Core Web Vitals; ui-ux-db palettes/fonts/guidelines; designpowers personas/accessibility/critique/handoff; plus curl-only lazyweb real-app-screen research and the beui.dev interaction catalog. Triggers: frontend, UI, UX, design, redesign, styling, layout, animation, motion, interaction, micro-interaction, make it feel alive, premium, luxury, minimal, brutalist, Awwwards, DESIGN.md, mockup, React, Lighthouse, accessibility, WCAG, Core Web Vitals, looks generic, make it pretty, like X brand, lazyweb, design research."
4
4
  ---
5
5
 
6
6
  # Frontend
@@ -14,6 +14,7 @@ This file is a router, not a rulebook. The rules live in four rulesets under `re
14
14
  | Request involves… | Read |
15
15
  |---|---|
16
16
  | ANY UI implementation, styling, redesign, mockup, or visual decision | `references/design/README.md` FIRST. It enforces two mandatory gates — the Design System Gate (a `DESIGN.md` must exist before any component is written) and the React Dev Tooling Gate (react-grab / react-scan / react-doctor installed by default) — then routes to the taste and brand references below. |
17
+ | Interaction or motion work — micro-interactions, animated components, transitions, gestures, hover/press/state feedback, "make it feel alive" | ALSO `references/design/interaction-skill.md`. The beui.dev catalog is the mandatory interaction reference: find the nearest pattern, read its real source through the file's curl recipe, and adapt the mechanism to `DESIGN.md` motion tokens. It stacks on the routed style skill — never replaces it. |
17
18
  | Writing or modifying frontend code, OR auditing performance / SEO / accessibility / quality | ALSO `references/perfection/README.md`. Lighthouse 100 in every category, measured on real Playwright Chromium (never the `lighthouse` CLI), achieved through architecture — never by dropping animations or hiding content. |
18
19
  | Looking up a concrete style, color palette, font pairing, chart type, landing-page structure, or UX guideline — or generating a project design system from keywords | `references/ui-ux-db/README.md`. A searchable CSV database with a CLI; a lookup tool, not a posture. Load on demand; `design` stays the source of truth for taste and the `DESIGN.md` contract. |
19
20
  | ANY implementation or redesign that creates or updates `DESIGN.md` — plus explicit operating-layer asks (personas, critique, debt, handoff, synthetic user testing) | `references/designpowers/README.md` + `references/designpowers/lane-c-review.md`. An internal frontend ruleset, not a separate skill: lane-c is the Phase Final flatness/critique reviewer, and its accessibility-constraints and accepted-debt language fills the required `DESIGN.md` sections. Load other lanes only when their phase applies. |
@@ -61,6 +62,7 @@ The reference library has one architecture file, 12 taste skills (Layer A — *h
61
62
  | `image-to-code-skill.md` | "Generate the design first, then code it." Pair with one imagegen file below. |
62
63
  | `output-skill.md` | Stacks on any style skill when output is incomplete — placeholders, `// TODO`, half-done components. |
63
64
  | `stitch-skill.md` | Stacks on any style skill for Google Stitch compatibility or a `DESIGN.md` doc export. A complete worked export ships as `stitch-design-example.md`. |
65
+ | `interaction-skill.md` | Stacks on any style skill when work adds or changes interaction or motion. beui.dev-anchored: read the mapped component's source before designing an interaction; reduced motion always. |
64
66
  | `imagegen-frontend-web.md` / `imagegen-frontend-mobile.md` / `imagegen-brandkit.md` | Image-only output (mockup, app-screen concepts, brand board). These NEVER write code — switch to `image-to-code-skill.md` if code is wanted. |
65
67
 
66
68
  ### Layer B — brand design systems (orthogonal to Layer A; stack freely)
@@ -113,6 +115,7 @@ Domains: `product` `style` `typography` `color` `landing` `chart` `ux` `react` `
113
115
  | "Linear-style landing page" | `design/README.md` + `design/linear.app.md` + `design/taste-skill.md` + `perfection/README.md` |
114
116
  | "Premium SaaS hero like Stripe" | `design/README.md` + `design/stripe.md` + `design/soft-skill.md` + `perfection/README.md` |
115
117
  | "Improve this existing dashboard" | `design/README.md` + `design/redesign-skill.md` + `perfection/README.md` |
118
+ | "Add micro-interactions" / "animate this" / "make it feel alive" / "polish the interactions" | `design/README.md` + `design/interaction-skill.md` on top of the current style skill + `perfection/README.md` |
116
119
  | "Build this screenshot / Imagen mock / Stitch output exactly" | `design/README.md` + `design/image-to-code-skill.md` + `perfection/README.md` + `/visual-qa` reference-fidelity mode |
117
120
  | "Audit my site" / "make this page faster" | `perfection/README.md` (+ `perfection/react-perf-tooling.md` if React) |
118
121
  | "Mockup image of a fintech app" — no code | `design/imagegen-frontend-mobile.md` (+ a Layer B brand if named) |
@@ -175,6 +175,12 @@ Triggers: dashboard, settings, mail/inbox, list-detail, command surface, split p
175
175
 
176
176
  **Action:** Add `layout-skill.md` on top of whatever style skill you selected in Steps 1-2. It carries scroll-ownership doctrine, the two silently-failing CSS contracts (`min-block-size: 0` scroll shells, `minmax(min(…),100%)` grids), the named-primitive vocabulary, container-vs-viewport routing, and the content-stress matrix. It adds no visual direction — the style skill still owns taste. Skip it for pure scroll-the-document marketing pages, where `taste-skill` layout guidance already fits.
177
177
 
178
+ ### Step 9 — Does the work add or change interaction or motion?
179
+
180
+ Triggers: micro-interactions, animated components, transitions, gestures, hover/press/focus/state feedback, loading/success/error morphs, animated tabs/menus/modals/drawers/toasts — or "make it feel alive", "polish the interactions", "add micro-interactions".
181
+
182
+ **Action:** Add `interaction-skill.md` on top of whatever style skill you selected. It anchors interaction design to the beui.dev catalog: find the nearest pattern, read its real source through the file's curl recipe, extract the mechanism (spring config, layout strategy, enter/exit order, reduced-motion path), and adapt the values to `DESIGN.md`. It owns interaction mechanics only — no visual direction — so it stacks cleanly, like `layout-skill.md`.
183
+
178
184
  ## Stacking rules (read this once, internalize it)
179
185
 
180
186
  1. **At most one Layer A *style* skill at a time.** A layout cannot be both `minimalist-skill` and `brutalist-skill` simultaneously — they encode opposite spacing and typography philosophies. Pick one.
@@ -184,6 +190,7 @@ Triggers: dashboard, settings, mail/inbox, list-detail, command surface, split p
184
190
  5. **`image-to-code-skill.md` pairs with one imagegen skill** for the full flow.
185
191
  6. **Layer B (brand DESIGN.md) is orthogonal to Layer A.** You can pair any Layer A skill with any Layer B brand. Use Layer B as the source of color/type/component tokens; let Layer A drive the execution discipline.
186
192
  7. **`layout-skill.md` stacks on top of any style skill** for app-shell / dashboard / split-pane work. It owns spatial structure and scroll ownership only — no visual direction — so it never conflicts with the style skill you picked.
193
+ 8. **`interaction-skill.md` stacks on top of any style skill** for interaction/motion work. It owns interaction mechanics — springs, layout morphs, enter/exit orchestration, reduced motion — and no visual direction, so it never conflicts with the style skill either.
187
194
 
188
195
  ## Anti-patterns — do not do these
189
196
 
@@ -227,6 +234,7 @@ Once references are loaded, before writing any UI code:
227
234
  | "Also output a DESIGN.md doc" | Add `stitch-skill.md` to current stack |
228
235
  | "Build a dashboard / settings / inbox / app shell" | one style skill (usually `taste-skill.md`) + `layout-skill.md` |
229
236
  | "Panel won't scroll / footer pushed off-screen / mobile overflow" | Add `layout-skill.md` to current stack |
237
+ | "Add micro-interactions / animate this / make it feel alive" | Add `interaction-skill.md` to current stack |
230
238
 
231
239
  ## Phase Final — Design QA (MANDATORY, runs after implementation)
232
240
 
@@ -5,7 +5,7 @@ All reference files live flat in this directory. Three layers:
5
5
  - **Layer A — taste skills** (12 files): how to execute. Discipline, motion, spacing, anti-slop, output completeness.
6
6
  - **Layer B — design systems** (70 files): what it should look like. Brand-specific color/type/component tokens.
7
7
 
8
- **Phase 0 runs first** (check/create `DESIGN.md`), then most non-trivial tasks load **one Layer A + one Layer B** together. See the routing flow in the sibling `README.md`.
8
+ **Phase 0 runs first** (check/create `DESIGN.md`), then most non-trivial tasks load **one Layer A + one Layer B** together. See the routing flow in the sibling `README.md`. Specialized phases (interaction and motion, app-shell layout, URL clones, real-product screen research) load the matching project-original operating reference — see the final section of this index.
9
9
 
10
10
  ---
11
11
 
@@ -52,6 +52,19 @@ From [Leonxlnx/taste-skill](https://github.com/Leonxlnx/taste-skill).
52
52
 
53
53
  ---
54
54
 
55
+ ## Operating references — interaction, layout, and research workflows (project-original)
56
+
57
+ Beyond the 12-file Layer A library, the design ruleset carries project-original operating references for specialized phases. They stack on the routed Layer A + Layer B pair; they never replace a style skill, and they are not counted in the library totals above.
58
+
59
+ | File | Purpose | Load when |
60
+ |---|---|---|
61
+ | `interaction-skill.md` | Interaction mechanics anchored to the beui.dev catalog: find the nearest pattern, read its real source through the curl recipe, extract the mechanism (spring config, layout strategy, enter/exit order, reduced-motion path), and adapt it to `DESIGN.md` motion tokens. | Any work adding or changing interaction or motion — micro-interactions, animated components, transitions, gestures, hover/press/state feedback, loading/success/error morphs, "make it feel alive". |
62
+ | `layout-skill.md` | Layout mechanics: scroll ownership, the two silent CSS contracts, named primitives, content-stress matrix. Zero visual direction. | App shells, dashboards, split panes, or a layout that breaks under real content. |
63
+ | `lazyweb.md` | Curl-only real-product screen research for design direction. | Greenfield design research lanes. |
64
+ | `clone-from-url.md` | Runtime extraction workflow (browser + `getComputedStyle`) for cloning a named site. | A live site or URL is the visual reference. |
65
+
66
+ ---
67
+
55
68
  ## Layer B — Design Systems (70)
56
69
 
57
70
  Most Layer B files are materialized from [VoltAgent/awesome-design-md](https://github.com/VoltAgent/awesome-design-md), based on [Google Stitch DESIGN.md format](https://stitch.withgoogle.com/docs/design-md/overview/). Project-original entries such as `aside.md` are listed here only when `ATTRIBUTION.md` and `frontend-refs-manifest.mjs` mark them as original. Each file captures one website's complete visual language: color palette, typography, components, layout principles, depth, do/don't, responsive behavior, and an agent prompt guide.