@open-agent-toolkit/cli 0.2.64 → 0.2.66

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 (217) hide show
  1. package/assets/bundle-metadata.json +1 -1
  2. package/assets/docs/cli-utilities/configuration.md +19 -1
  3. package/assets/docs/cli-utilities/index.md +3 -0
  4. package/assets/docs/cli-utilities/remote-project-management.md +191 -0
  5. package/assets/docs/contributing/skills.md +15 -5
  6. package/assets/docs/reference/cli-reference.md +12 -1
  7. package/assets/docs/reference/file-locations.md +22 -0
  8. package/assets/docs/reference/oat-directory-structure.md +30 -17
  9. package/assets/docs/reference/troubleshooting.md +44 -0
  10. package/assets/docs/workflows/skills/index.md +33 -0
  11. package/assets/public-package-versions.json +4 -4
  12. package/assets/skills/analyze/SKILL.md +2 -1
  13. package/assets/skills/authoring-docs/SKILL.md +2 -1
  14. package/assets/skills/compare/SKILL.md +2 -1
  15. package/assets/skills/create-agnostic-skill/SKILL.md +2 -1
  16. package/assets/skills/deep-research/SKILL.md +2 -1
  17. package/assets/skills/explainer-kit/SKILL.md +2 -1
  18. package/assets/skills/oat-agent-instructions-analyze/SKILL.md +2 -1
  19. package/assets/skills/oat-agent-instructions-apply/SKILL.md +2 -1
  20. package/assets/skills/oat-brainstorm/SKILL.md +2 -1
  21. package/assets/skills/oat-cursor-cloud-projects/SKILL.md +2 -1
  22. package/assets/skills/oat-dispatch-subagents/SKILL.md +2 -1
  23. package/assets/skills/oat-docs/SKILL.md +2 -1
  24. package/assets/skills/oat-docs-analyze/SKILL.md +2 -1
  25. package/assets/skills/oat-docs-apply/SKILL.md +2 -1
  26. package/assets/skills/oat-docs-authoring/SKILL.md +2 -1
  27. package/assets/skills/oat-docs-bootstrap/SKILL.md +2 -1
  28. package/assets/skills/oat-doctor/SKILL.md +5 -4
  29. package/assets/skills/oat-explainer-kit/SKILL.md +2 -1
  30. package/assets/skills/oat-explainer-kit/scripts/check-core.mjs +322 -2
  31. package/assets/skills/oat-idea-ideate/SKILL.md +2 -1
  32. package/assets/skills/oat-idea-new/SKILL.md +2 -1
  33. package/assets/skills/oat-idea-scratchpad/SKILL.md +2 -1
  34. package/assets/skills/oat-idea-summarize/SKILL.md +2 -1
  35. package/assets/skills/oat-pjm-add-backlog-item/SKILL.md +2 -1
  36. package/assets/skills/oat-pjm-decision/SKILL.md +2 -1
  37. package/assets/skills/oat-pjm-remote/SKILL.md +101 -0
  38. package/assets/skills/oat-pjm-remote/references/external-action-protocol.md +43 -0
  39. package/assets/skills/oat-pjm-review-backlog/SKILL.md +2 -1
  40. package/assets/skills/oat-pjm-update-repo-reference/SKILL.md +2 -1
  41. package/assets/skills/oat-project-autonomous/SKILL.md +2 -1
  42. package/assets/skills/oat-project-capture/SKILL.md +2 -1
  43. package/assets/skills/oat-project-clear-active/SKILL.md +2 -1
  44. package/assets/skills/oat-project-complete/SKILL.md +2 -1
  45. package/assets/skills/oat-project-design/SKILL.md +2 -1
  46. package/assets/skills/oat-project-discover/SKILL.md +2 -1
  47. package/assets/skills/oat-project-dispatch-subagents/SKILL.md +2 -1
  48. package/assets/skills/oat-project-document/SKILL.md +2 -1
  49. package/assets/skills/oat-project-implement/SKILL.md +2 -1
  50. package/assets/skills/oat-project-import-plan/SKILL.md +2 -1
  51. package/assets/skills/oat-project-lite/SKILL.md +2 -1
  52. package/assets/skills/oat-project-new/SKILL.md +2 -1
  53. package/assets/skills/oat-project-next/SKILL.md +2 -1
  54. package/assets/skills/oat-project-open/SKILL.md +2 -1
  55. package/assets/skills/oat-project-plan/SKILL.md +2 -1
  56. package/assets/skills/oat-project-plan-writing/SKILL.md +2 -1
  57. package/assets/skills/oat-project-pr-final/SKILL.md +2 -1
  58. package/assets/skills/oat-project-pr-progress/SKILL.md +2 -1
  59. package/assets/skills/oat-project-progress/SKILL.md +2 -1
  60. package/assets/skills/oat-project-promote-spec-driven/SKILL.md +2 -1
  61. package/assets/skills/oat-project-quick-start/SKILL.md +2 -1
  62. package/assets/skills/oat-project-reconcile/SKILL.md +2 -1
  63. package/assets/skills/oat-project-retro/SKILL.md +2 -1
  64. package/assets/skills/oat-project-retro-file/SKILL.md +2 -1
  65. package/assets/skills/oat-project-review-provide/SKILL.md +2 -1
  66. package/assets/skills/oat-project-review-provide-remote/SKILL.md +2 -1
  67. package/assets/skills/oat-project-review-receive/SKILL.md +2 -1
  68. package/assets/skills/oat-project-review-receive-remote/SKILL.md +2 -1
  69. package/assets/skills/oat-project-revise/SKILL.md +2 -1
  70. package/assets/skills/oat-project-spec/SKILL.md +2 -1
  71. package/assets/skills/oat-project-split/SKILL.md +2 -1
  72. package/assets/skills/oat-project-summary/SKILL.md +2 -1
  73. package/assets/skills/oat-repo-improve/SKILL.md +1 -1
  74. package/assets/skills/oat-repo-knowledge-index/SKILL.md +2 -1
  75. package/assets/skills/oat-repo-maintainability-review/SKILL.md +2 -1
  76. package/assets/skills/oat-review-provide/SKILL.md +2 -1
  77. package/assets/skills/oat-review-provide-remote/SKILL.md +2 -1
  78. package/assets/skills/oat-review-receive/SKILL.md +2 -1
  79. package/assets/skills/oat-review-receive-remote/SKILL.md +2 -1
  80. package/assets/skills/oat-wave-execute/SKILL.md +2 -1
  81. package/assets/skills/oat-wave-program/SKILL.md +2 -1
  82. package/assets/skills/oat-worktree-bootstrap/SKILL.md +2 -1
  83. package/assets/skills/oat-worktree-bootstrap-auto/SKILL.md +2 -1
  84. package/assets/skills/oat-wrap-up/SKILL.md +2 -1
  85. package/assets/skills/recon/SKILL.md +2 -1
  86. package/assets/skills/skeptic/SKILL.md +2 -1
  87. package/assets/skills/subagent-orchestration/SKILL.md +2 -1
  88. package/assets/skills/synthesize/SKILL.md +2 -1
  89. package/dist/commands/backlog/new.d.ts +1 -0
  90. package/dist/commands/backlog/new.d.ts.map +1 -1
  91. package/dist/commands/backlog/new.js +3 -1
  92. package/dist/commands/config/index.d.ts +1 -0
  93. package/dist/commands/config/index.d.ts.map +1 -1
  94. package/dist/commands/config/index.js +232 -1
  95. package/dist/commands/pjm/doctor.d.ts +2 -0
  96. package/dist/commands/pjm/doctor.d.ts.map +1 -1
  97. package/dist/commands/pjm/doctor.js +71 -1
  98. package/dist/commands/pjm/index.d.ts +2 -0
  99. package/dist/commands/pjm/index.d.ts.map +1 -1
  100. package/dist/commands/pjm/index.js +3 -0
  101. package/dist/commands/pjm/remote/__integration__/lifecycle-harness.d.ts +60 -0
  102. package/dist/commands/pjm/remote/__integration__/lifecycle-harness.d.ts.map +1 -0
  103. package/dist/commands/pjm/remote/__integration__/lifecycle-harness.js +151 -0
  104. package/dist/commands/pjm/remote/association.d.ts +27 -0
  105. package/dist/commands/pjm/remote/association.d.ts.map +1 -0
  106. package/dist/commands/pjm/remote/association.js +68 -0
  107. package/dist/commands/pjm/remote/authority.d.ts +210 -0
  108. package/dist/commands/pjm/remote/authority.d.ts.map +1 -0
  109. package/dist/commands/pjm/remote/authority.js +341 -0
  110. package/dist/commands/pjm/remote/batch.d.ts +15 -0
  111. package/dist/commands/pjm/remote/batch.d.ts.map +1 -0
  112. package/dist/commands/pjm/remote/batch.js +126 -0
  113. package/dist/commands/pjm/remote/closeout.d.ts +69 -0
  114. package/dist/commands/pjm/remote/closeout.d.ts.map +1 -0
  115. package/dist/commands/pjm/remote/closeout.js +208 -0
  116. package/dist/commands/pjm/remote/create-binding.d.ts +62 -0
  117. package/dist/commands/pjm/remote/create-binding.d.ts.map +1 -0
  118. package/dist/commands/pjm/remote/create-binding.js +126 -0
  119. package/dist/commands/pjm/remote/credential-safety.d.ts +7 -0
  120. package/dist/commands/pjm/remote/credential-safety.d.ts.map +1 -0
  121. package/dist/commands/pjm/remote/credential-safety.js +21 -0
  122. package/dist/commands/pjm/remote/discussion.d.ts +49 -0
  123. package/dist/commands/pjm/remote/discussion.d.ts.map +1 -0
  124. package/dist/commands/pjm/remote/discussion.js +124 -0
  125. package/dist/commands/pjm/remote/doctor.d.ts +22 -0
  126. package/dist/commands/pjm/remote/doctor.d.ts.map +1 -0
  127. package/dist/commands/pjm/remote/doctor.js +380 -0
  128. package/dist/commands/pjm/remote/external-action.d.ts +208 -0
  129. package/dist/commands/pjm/remote/external-action.d.ts.map +1 -0
  130. package/dist/commands/pjm/remote/external-action.js +367 -0
  131. package/dist/commands/pjm/remote/host-execution.d.ts +28 -0
  132. package/dist/commands/pjm/remote/host-execution.d.ts.map +1 -0
  133. package/dist/commands/pjm/remote/host-execution.js +63 -0
  134. package/dist/commands/pjm/remote/index.d.ts +41 -0
  135. package/dist/commands/pjm/remote/index.d.ts.map +1 -0
  136. package/dist/commands/pjm/remote/index.js +280 -0
  137. package/dist/commands/pjm/remote/jira-adf.d.ts +35 -0
  138. package/dist/commands/pjm/remote/jira-adf.d.ts.map +1 -0
  139. package/dist/commands/pjm/remote/jira-adf.js +169 -0
  140. package/dist/commands/pjm/remote/lifecycle.d.ts +163 -0
  141. package/dist/commands/pjm/remote/lifecycle.d.ts.map +1 -0
  142. package/dist/commands/pjm/remote/lifecycle.js +224 -0
  143. package/dist/commands/pjm/remote/local-projection.d.ts +30 -0
  144. package/dist/commands/pjm/remote/local-projection.d.ts.map +1 -0
  145. package/dist/commands/pjm/remote/local-projection.js +95 -0
  146. package/dist/commands/pjm/remote/managed-markdown.d.ts +30 -0
  147. package/dist/commands/pjm/remote/managed-markdown.d.ts.map +1 -0
  148. package/dist/commands/pjm/remote/managed-markdown.js +128 -0
  149. package/dist/commands/pjm/remote/migrate.d.ts +14 -0
  150. package/dist/commands/pjm/remote/migrate.d.ts.map +1 -0
  151. package/dist/commands/pjm/remote/migrate.js +32 -0
  152. package/dist/commands/pjm/remote/operation-state.d.ts +15 -0
  153. package/dist/commands/pjm/remote/operation-state.d.ts.map +1 -0
  154. package/dist/commands/pjm/remote/operation-state.js +143 -0
  155. package/dist/commands/pjm/remote/outbound-projection-safety.d.ts +25 -0
  156. package/dist/commands/pjm/remote/outbound-projection-safety.d.ts.map +1 -0
  157. package/dist/commands/pjm/remote/outbound-projection-safety.js +99 -0
  158. package/dist/commands/pjm/remote/output.d.ts +60 -0
  159. package/dist/commands/pjm/remote/output.d.ts.map +1 -0
  160. package/dist/commands/pjm/remote/output.js +48 -0
  161. package/dist/commands/pjm/remote/preview.d.ts +88 -0
  162. package/dist/commands/pjm/remote/preview.d.ts.map +1 -0
  163. package/dist/commands/pjm/remote/preview.js +154 -0
  164. package/dist/commands/pjm/remote/provider-conformance.d.ts +13 -0
  165. package/dist/commands/pjm/remote/provider-conformance.d.ts.map +1 -0
  166. package/dist/commands/pjm/remote/provider-conformance.js +37 -0
  167. package/dist/commands/pjm/remote/provider.d.ts +57 -0
  168. package/dist/commands/pjm/remote/provider.d.ts.map +1 -0
  169. package/dist/commands/pjm/remote/provider.js +28 -0
  170. package/dist/commands/pjm/remote/providers/github-publication-safety.d.ts +46 -0
  171. package/dist/commands/pjm/remote/providers/github-publication-safety.d.ts.map +1 -0
  172. package/dist/commands/pjm/remote/providers/github-publication-safety.js +126 -0
  173. package/dist/commands/pjm/remote/providers/github.d.ts +207 -0
  174. package/dist/commands/pjm/remote/providers/github.d.ts.map +1 -0
  175. package/dist/commands/pjm/remote/providers/github.js +1456 -0
  176. package/dist/commands/pjm/remote/providers/jira.d.ts +245 -0
  177. package/dist/commands/pjm/remote/providers/jira.d.ts.map +1 -0
  178. package/dist/commands/pjm/remote/providers/jira.js +1650 -0
  179. package/dist/commands/pjm/remote/providers/linear.d.ts +182 -0
  180. package/dist/commands/pjm/remote/providers/linear.d.ts.map +1 -0
  181. package/dist/commands/pjm/remote/providers/linear.js +1289 -0
  182. package/dist/commands/pjm/remote/purpose-policy.d.ts +29 -0
  183. package/dist/commands/pjm/remote/purpose-policy.d.ts.map +1 -0
  184. package/dist/commands/pjm/remote/purpose-policy.js +118 -0
  185. package/dist/commands/pjm/remote/reconcile.d.ts +42 -0
  186. package/dist/commands/pjm/remote/reconcile.d.ts.map +1 -0
  187. package/dist/commands/pjm/remote/reconcile.js +101 -0
  188. package/dist/commands/pjm/remote/resolution.d.ts +122 -0
  189. package/dist/commands/pjm/remote/resolution.d.ts.map +1 -0
  190. package/dist/commands/pjm/remote/resolution.js +243 -0
  191. package/dist/commands/pjm/remote/schema.d.ts +9309 -0
  192. package/dist/commands/pjm/remote/schema.d.ts.map +1 -0
  193. package/dist/commands/pjm/remote/schema.js +1503 -0
  194. package/dist/commands/pjm/remote/service.d.ts +20 -0
  195. package/dist/commands/pjm/remote/service.d.ts.map +1 -0
  196. package/dist/commands/pjm/remote/service.js +5121 -0
  197. package/dist/commands/pjm/remote/shared-storage.d.ts +36 -0
  198. package/dist/commands/pjm/remote/shared-storage.d.ts.map +1 -0
  199. package/dist/commands/pjm/remote/shared-storage.js +110 -0
  200. package/dist/commands/pjm/remote/snapshot.d.ts +32 -0
  201. package/dist/commands/pjm/remote/snapshot.d.ts.map +1 -0
  202. package/dist/commands/pjm/remote/snapshot.js +140 -0
  203. package/dist/commands/pjm/remote/storage-locator.d.ts +29 -0
  204. package/dist/commands/pjm/remote/storage-locator.d.ts.map +1 -0
  205. package/dist/commands/pjm/remote/storage-locator.js +62 -0
  206. package/dist/commands/pjm/remote/store.d.ts +85 -0
  207. package/dist/commands/pjm/remote/store.d.ts.map +1 -0
  208. package/dist/commands/pjm/remote/store.js +553 -0
  209. package/dist/commands/pjm/remote/verification.d.ts +40 -0
  210. package/dist/commands/pjm/remote/verification.d.ts.map +1 -0
  211. package/dist/commands/pjm/remote/verification.js +100 -0
  212. package/dist/commands/tools/shared/pack-manifest.d.ts.map +1 -1
  213. package/dist/commands/tools/shared/pack-manifest.js +1 -0
  214. package/dist/config/oat-config.d.ts +26 -0
  215. package/dist/config/oat-config.d.ts.map +1 -1
  216. package/dist/config/oat-config.js +186 -2
  217. package/package.json +2 -2
@@ -1,10 +1,11 @@
1
1
  ---
2
2
  name: oat-repo-knowledge-index
3
- version: 1.3.0
4
3
  description: Use when onboarding OAT to a repository or when knowledge artifacts are stale. Generates or refreshes the codebase knowledge index using parallel mapper agents.
5
4
  disable-model-invocation: true
6
5
  user-invocable: true
7
6
  allowed-tools: Read, Write, Bash(git:*), Glob, Grep, AskUserQuestion, Task
7
+ metadata:
8
+ version: 1.3.1
8
9
  ---
9
10
 
10
11
  # Knowledge Base Generation
@@ -1,11 +1,12 @@
1
1
  ---
2
2
  name: oat-repo-maintainability-review
3
- version: 1.3.0
4
3
  description: Use when you need a structured maintainability analysis for a repository or directory target with actionable findings and an optional external-plan handoff.
5
4
  argument-hint: '[--scope repo|directory] [--target <path>] [--mode auto|tracked|local|inline] [--output <path>] [--focus <areas>] [--analysis-mode full] [--fan-out]'
6
5
  disable-model-invocation: true
7
6
  user-invocable: true
8
7
  allowed-tools: Read, Write, Bash, Glob, Grep, AskUserQuestion
8
+ metadata:
9
+ version: 1.3.1
9
10
  ---
10
11
 
11
12
  # Repo Maintainability Review
@@ -1,11 +1,12 @@
1
1
  ---
2
2
  name: oat-review-provide
3
- version: 1.2.3
4
3
  description: Use when you need an ad-hoc review outside an active OAT project lifecycle. Reviews code or artifacts without project phase state, unlike oat-project-review-provide.
5
4
  argument-hint: '[unstaged|staged|base_branch=<branch>|base_sha=<sha>|<sha1>..<sha2>|--files <path1,path2,...>] [--output <path>] [--mode auto|local|tracked|inline]'
6
5
  disable-model-invocation: true
7
6
  user-invocable: true
8
7
  allowed-tools: Read, Write, Bash, Glob, Grep, AskUserQuestion
8
+ metadata:
9
+ version: 1.2.4
9
10
  ---
10
11
 
11
12
  # Ad-Hoc Review
@@ -1,10 +1,11 @@
1
1
  ---
2
2
  name: oat-review-provide-remote
3
- version: 1.1.1
4
3
  description: Use when reviewing a GitHub PR opened on another machine and posting findings back as a single PR review, outside any OAT project context. Fetches the PR via gh, reviews it, and posts via gh api.
5
4
  disable-model-invocation: true
6
5
  user-invocable: true
7
6
  allowed-tools: Read, Write, Bash, Glob, Grep, AskUserQuestion
7
+ metadata:
8
+ version: 1.1.2
8
9
  ---
9
10
 
10
11
  # Remote Review Provide (Ad-hoc GitHub PR)
@@ -1,10 +1,11 @@
1
1
  ---
2
2
  name: oat-review-receive
3
- version: 1.4.0
4
3
  description: Use when processing review findings outside project context. Converts local review artifacts into actionable task lists.
5
4
  disable-model-invocation: true
6
5
  user-invocable: true
7
6
  allowed-tools: Read, Write, Bash, Glob, Grep, AskUserQuestion
7
+ metadata:
8
+ version: 1.4.1
8
9
  ---
9
10
 
10
11
  # Review Receive (Ad-hoc Local)
@@ -1,10 +1,11 @@
1
1
  ---
2
2
  name: oat-review-receive-remote
3
- version: 1.3.0
4
3
  description: Use when processing GitHub PR review comments outside project context. Fetches PR comments via agent-reviews and converts them into actionable task lists.
5
4
  disable-model-invocation: true
6
5
  user-invocable: true
7
6
  allowed-tools: Read, Write, Bash, Glob, Grep, AskUserQuestion
7
+ metadata:
8
+ version: 1.3.1
8
9
  ---
9
10
 
10
11
  # Remote Review Receive (Ad-hoc GitHub PR)
@@ -1,11 +1,12 @@
1
1
  ---
2
2
  name: oat-wave-execute
3
- version: 1.9.0
4
3
  description: Use when executing a wave of external implementation plans as a wrapper OAT project — scaffolding, drift refresh, parallel worktree groups, briefs, gates, merge choreography, and closeout.
5
4
  argument-hint: '<wave-id> [plan-names...] (e.g. wave-2 http-listener-before-indexing ...)'
6
5
  disable-model-invocation: false
7
6
  user-invocable: true
8
7
  allowed-tools: Read, Write, Edit, Bash, Grep, Glob, Task
8
+ metadata:
9
+ version: 1.9.1
9
10
  ---
10
11
 
11
12
  # Execute a Wave of External Plans
@@ -1,11 +1,12 @@
1
1
  ---
2
2
  name: oat-wave-program
3
- version: 1.5.0
4
3
  description: Use when decomposing a corpus of external implementation plans into an ordered wave program — coverage inventory, dependency mapping, wave composition, and the durable execution-program artifact that oat-wave-execute consumes and updates.
5
4
  argument-hint: '[new|refresh|wave-close <wave-id>] (default: refresh against the current artifact)'
6
5
  disable-model-invocation: false
7
6
  user-invocable: true
8
7
  allowed-tools: Read, Write, Edit, Bash, Grep, Glob, Task
8
+ metadata:
9
+ version: 1.5.1
9
10
  ---
10
11
 
11
12
  # Program a Corpus of External Plans into Waves
@@ -1,11 +1,12 @@
1
1
  ---
2
2
  name: oat-worktree-bootstrap
3
- version: 1.3.1
4
3
  description: Use when creating or resuming a git worktree for OAT implementation. Creates or validates a worktree and runs OAT bootstrap checks.
5
4
  argument-hint: '<branch-name> [--base <ref>] [--path <root>] [--existing]'
6
5
  disable-model-invocation: true
7
6
  user-invocable: true
8
7
  allowed-tools: Read, Write, Bash, Glob, Grep, AskUserQuestion
8
+ metadata:
9
+ version: 1.3.2
9
10
  ---
10
11
 
11
12
  # Worktree Bootstrap
@@ -1,11 +1,12 @@
1
1
  ---
2
2
  name: oat-worktree-bootstrap-auto
3
- version: 1.6.1
4
3
  description: Use when an orchestrator/subagent needs autonomous worktree bootstrap. Non-interactive companion to oat-worktree-bootstrap.
5
4
  argument-hint: '<branch-name> [--base <ref>] [--path <root>] [--baseline-policy <strict|allow-failing>]'
6
5
  disable-model-invocation: false
7
6
  user-invocable: false
8
7
  allowed-tools: Read, Write, Bash, Glob, Grep
8
+ metadata:
9
+ version: 1.6.2
9
10
  ---
10
11
 
11
12
  # Autonomous Worktree Bootstrap
@@ -1,11 +1,12 @@
1
1
  ---
2
2
  name: oat-wrap-up
3
- version: 1.0.2
4
3
  description: Use when preparing a shipping digest or weekly/biweekly wrap-up summarizing OAT projects and merged PRs over a time window. Reads local summary files and GitHub PR metadata; writes a version-controlled markdown report.
5
4
  argument-hint: '[--since YYYY-MM-DD] [--until YYYY-MM-DD] [--past-week|--past-2-weeks|--past-month] [--output <path>] [--dry-run]'
6
5
  disable-model-invocation: false
7
6
  allowed-tools: Read, Write, Bash, Glob, Grep, AskUserQuestion
8
7
  user-invocable: true
8
+ metadata:
9
+ version: 1.0.3
9
10
  ---
10
11
 
11
12
  # Wrap-Up
@@ -1,11 +1,12 @@
1
1
  ---
2
2
  name: recon
3
- version: 1.1.0
4
3
  description: Use when a bounded investigation needs source-grounded evidence before analysis or implementation. Produces a validated evidence-packet directory through approved provider-neutral worker waves.
5
4
  argument-hint: '<question-or-target> [--profile quick|standard|thorough] [--scope description] [--context path] [--output directory] [--strict]'
6
5
  disable-model-invocation: true
7
6
  user-invocable: true
8
7
  allowed-tools: Read, Write, Glob, Grep, Bash, AskUserQuestion, Agent, mcp__*
8
+ metadata:
9
+ version: 1.1.1
9
10
  ---
10
11
 
11
12
  # Recon
@@ -1,10 +1,11 @@
1
1
  ---
2
2
  name: skeptic
3
- version: 0.2.0
4
3
  description: Use when the user questions or suspects an agent claim is wrong. Adversarially gathers evidence to verify or refute the claim using the best sources available in the current environment.
5
4
  argument-hint: '[claim to question — optional, defaults to most recent agent assertion]'
6
5
  user-invocable: true
7
6
  allowed-tools: Read, Glob, Grep, Bash, WebSearch, WebFetch, AskUserQuestion, Agent, mcp__*
7
+ metadata:
8
+ version: 0.2.1
8
9
  ---
9
10
 
10
11
  # /skeptic
@@ -1,9 +1,10 @@
1
1
  ---
2
2
  name: subagent-orchestration
3
- version: 1.0.2
4
3
  description: Use when delegating work to subagents or choosing a model for a task — routing by task class, selecting provider-specific models and effort, and verifying subagent claims. Covers OpenAI/Codex, Anthropic/Claude, and Cursor.
5
4
  compatibility: Self-contained; no OAT installation required.
6
5
  user-invocable: true
6
+ metadata:
7
+ version: 1.0.3
7
8
  ---
8
9
 
9
10
  # Subagent Orchestration
@@ -1,10 +1,11 @@
1
1
  ---
2
2
  name: synthesize
3
- version: 0.1.0
4
3
  description: Merge multiple analysis artifacts into a single coherent report with provenance tracking. Reads existing artifacts from /deep-research, /analyze, and /compare.
5
4
  argument-hint: '[directory | file1 file2 ...] [--inline]'
6
5
  user-invocable: true
7
6
  allowed-tools: Read, Glob, Grep, Bash, AskUserQuestion
7
+ metadata:
8
+ version: 0.1.1
8
9
  ---
9
10
 
10
11
  # /synthesize
@@ -13,6 +13,7 @@ export interface CreateBacklogItemOptions {
13
13
  labels?: string[];
14
14
  description?: string;
15
15
  createdAt?: string;
16
+ associatedIssues?: unknown;
16
17
  }
17
18
  export interface CreateBacklogItemResult {
18
19
  id: string;
@@ -1 +1 @@
1
- {"version":3,"file":"new.d.ts","sourceRoot":"","sources":["../../../src/commands/backlog/new.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,eAAe,EACrB,MAAM,+BAA+B,CAAC;AAIvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAC3C,OAAO,EACL,sBAAsB,EACtB,KAAK,4BAA4B,EAClC,MAAM,oBAAoB,CAAC;AAS5B,MAAM,WAAW,wBAAwB;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,eAAe,CAAC;IAC9B,KAAK,EAAE,4BAA4B,CAAC;CACrC;AAED,MAAM,WAAW,6BAA6B;IAC5C,iBAAiB,EAAE,OAAO,iBAAiB,CAAC;IAC5C,sBAAsB,EAAE,OAAO,sBAAsB,CAAC;CACvD;AA2JD,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,wBAAwB,EACjC,SAAS,GAAE,OAAO,CAAC,6BAA6B,CAAM,GACrD,OAAO,CAAC,uBAAuB,CAAC,CAwDlC"}
1
+ {"version":3,"file":"new.d.ts","sourceRoot":"","sources":["../../../src/commands/backlog/new.ts"],"names":[],"mappings":"AAQA,OAAO,EAEL,KAAK,eAAe,EACrB,MAAM,+BAA+B,CAAC;AAIvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAC3C,OAAO,EACL,sBAAsB,EACtB,KAAK,4BAA4B,EAClC,MAAM,oBAAoB,CAAC;AAS5B,MAAM,WAAW,wBAAwB;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,eAAe,CAAC;IAC9B,KAAK,EAAE,4BAA4B,CAAC;CACrC;AAED,MAAM,WAAW,6BAA6B;IAC5C,iBAAiB,EAAE,OAAO,iBAAiB,CAAC;IAC5C,sBAAsB,EAAE,OAAO,sBAAsB,CAAC;CACvD;AAgKD,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,wBAAwB,EACjC,SAAS,GAAE,OAAO,CAAC,6BAA6B,CAAM,GACrD,OAAO,CAAC,uBAAuB,CAAC,CAwDlC"}
@@ -1,5 +1,6 @@
1
1
  import { access, readFile, rm, writeFile } from 'node:fs/promises';
2
2
  import { join } from 'node:path';
3
+ import { parseAssociatedIssues, serializeAssociatedIssues, } from '../pjm/remote/association.js';
3
4
  import { resolvePjmTemplate, } from '../pjm/template-source.js';
4
5
  import { stripTemplateFrontmatter } from '../shared/strip-template-frontmatter.js';
5
6
  import YAML from 'yaml';
@@ -72,6 +73,7 @@ function normalizeInputs(options) {
72
73
  scopeEstimate,
73
74
  labels,
74
75
  description: options.description,
76
+ associatedIssues: serializeAssociatedIssues(parseAssociatedIssues(options.associatedIssues ?? [])),
75
77
  };
76
78
  }
77
79
  function renderBacklogItem(template, values) {
@@ -90,7 +92,7 @@ function renderBacklogItem(template, values) {
90
92
  assignee: null,
91
93
  created: values.timestamp,
92
94
  updated: values.timestamp,
93
- associated_issues: [],
95
+ associated_issues: values.associatedIssues,
94
96
  external_plans: [],
95
97
  }).trimEnd();
96
98
  return `---\n${frontmatter}\n---\n\n${body.trimEnd()}\n`;
@@ -21,6 +21,7 @@ interface ConfigCommandDependencies {
21
21
  resolveEffectiveConfig: (repoRoot: string, userConfigDir: string, env: NodeJS.ProcessEnv) => Promise<ResolvedConfig>;
22
22
  resolveAssetsRoot: () => Promise<string>;
23
23
  readFile: (path: string) => Promise<string>;
24
+ atomicWriteJson: (path: string, data: unknown) => Promise<void>;
24
25
  confirmAction: (message: string, ctx: PromptContext) => Promise<boolean>;
25
26
  validateMatrixCell: (provider: string, value: string, options: ValidateMatrixCellOptions) => Promise<MatrixCellAvailabilityResponse>;
26
27
  createDispatchValidationPassContext: typeof createDispatchValidationPassContext;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/config/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAIhF,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,iCAAiC,CAAC;AAoBzC,OAAO,EAML,KAAK,SAAS,EACd,KAAK,cAAc,EAGnB,KAAK,UAAU,EAkBhB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAEL,KAAK,cAAc,EAEpB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAGL,KAAK,8BAA8B,EACnC,KAAK,yBAAyB,EAC/B,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EACL,mCAAmC,EACnC,0BAA0B,EAC3B,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+GpC,UAAU,yBAAyB;IACjC,mBAAmB,EAAE,CACnB,OAAO,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAAC,CAAC,KAC/C,cAAc,CAAC;IACpB,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IACxD,kCAAkC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IAC7E,2CAA2C,EAAE,CAC3C,QAAQ,EAAE,MAAM,KACb,OAAO,CAAC,SAAS,CAAC,CAAC;IACxB,gDAAgD,EAAE,CAChD,QAAQ,EAAE,MAAM,KACb,OAAO,CAAC,SAAS,CAAC,CAAC;IACxB,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,kBAAkB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IAClE,mBAAmB,EAAE,CACnB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,cAAc,KACnB,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,cAAc,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/D,eAAe,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9E,mBAAmB,EAAE,CACnB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,CAAC,UAAU,KACnB,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,sBAAsB,EAAE,CACtB,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,MAAM,CAAC,UAAU,KACnB,OAAO,CAAC,cAAc,CAAC,CAAC;IAC7B,iBAAiB,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACzC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACzE,kBAAkB,EAAE,CAClB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,yBAAyB,KAC/B,OAAO,CAAC,8BAA8B,CAAC,CAAC;IAC7C,mCAAmC,EAAE,OAAO,mCAAmC,CAAC;IAChF,0BAA0B,EAAE,OAAO,0BAA0B,CAAC;IAC9D,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC;CAC/B;AAwnGD,wBAAgB,mBAAmB,CACjC,SAAS,GAAE,OAAO,CAAC,yBAAyB,CAAM,GACjD,OAAO,CAkMT"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/config/index.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,7 @@ import { parseJsonConfig } from '../../config/json.js';
14
14
  import { VALID_DISPATCH_POLICY_MODES, VALID_MANAGED_DISPATCH_POLICIES, MAX_GATE_TIMEOUT_MS, MIN_GATE_TIMEOUT_MS, isValidGateTimeoutMs, normalizeWorkflowPostImplementSequence, readOatConfig, readOatConfigForDefaultScopeRepair, readOatConfigForDocumentationExcludesRepair, readOatConfigForInstructionPointerExcludesRepair, readOatLocalConfig, readUserConfig, writeOatConfig, writeOatLocalConfig, writeUserConfig, } from '../../config/oat-config.js';
15
15
  import { resolveEffectiveConfig, } from '../../config/resolve.js';
16
16
  import { resolveAssetsRoot } from '../../fs/assets.js';
17
+ import { atomicWriteJson } from '../../fs/io.js';
17
18
  import { resolveProjectRoot } from '../../fs/paths.js';
18
19
  import { normalizeMatrixCellAvailability, validateMatrixCell, } from '../../providers/identity/availability.js';
19
20
  import { createDispatchValidationPassContext, validateDispatchMatrixRefs, } from '../../providers/identity/dispatch-validation.js';
@@ -28,6 +29,31 @@ const DISPATCH_MATRIX_TIERS = [
28
29
  'high',
29
30
  'frontier',
30
31
  ];
32
+ const PJM_REMOTE_PROVIDERS = ['github', 'linear', 'jira'];
33
+ const PJM_REMOTE_OPERATIONS = [
34
+ 'create',
35
+ 'update-fields',
36
+ 'transition',
37
+ 'annotate',
38
+ 'delete',
39
+ 'relink',
40
+ 'detach',
41
+ 'recreate',
42
+ ];
43
+ const PJM_REMOTE_CONFIG_KEYS = [
44
+ 'pjm.remote',
45
+ 'pjm.remote.schemaVersion',
46
+ 'pjm.remote.storage.state',
47
+ 'pjm.remote.policy',
48
+ 'pjm.remote.policy.description',
49
+ 'pjm.remote.policy.authority.default',
50
+ ...PJM_REMOTE_OPERATIONS.map((operation) => `pjm.remote.policy.authority.operations.${operation}`),
51
+ ...PJM_REMOTE_PROVIDERS.flatMap((provider) => [
52
+ `pjm.remote.policy.providers.${provider}.description`,
53
+ `pjm.remote.policy.providers.${provider}.authority.default`,
54
+ ...PJM_REMOTE_OPERATIONS.map((operation) => `pjm.remote.policy.providers.${provider}.authority.operations.${operation}`),
55
+ ]),
56
+ ];
31
57
  const KEY_ORDER = [
32
58
  'activeIdea',
33
59
  'activeProject',
@@ -58,6 +84,7 @@ const KEY_ORDER = [
58
84
  'git.defaultBranch',
59
85
  'projects.root',
60
86
  'projects.defaultScope',
87
+ ...PJM_REMOTE_CONFIG_KEYS,
61
88
  'tools.brainstorm',
62
89
  'tools.core',
63
90
  'tools.docs',
@@ -94,7 +121,45 @@ const KEY_ORDER = [
94
121
  'workflow.gateTimeouts.artifact',
95
122
  'worktrees.root',
96
123
  ];
124
+ const PJM_REMOTE_CONFIG_CATALOG = PJM_REMOTE_CONFIG_KEYS.map((key) => {
125
+ const aggregate = key === 'pjm.remote' || key === 'pjm.remote.policy';
126
+ const schemaVersion = key === 'pjm.remote.schemaVersion';
127
+ const storage = key === 'pjm.remote.storage.state';
128
+ const authority = key.includes('.authority.');
129
+ const description = key.endsWith('.description');
130
+ const type = schemaVersion
131
+ ? 'literal 1'
132
+ : storage
133
+ ? 'local | shared'
134
+ : authority
135
+ ? 'read-only | user-approved | user-authorized | autonomous'
136
+ : description
137
+ ? 'none | managed-section | replace'
138
+ : 'object';
139
+ return {
140
+ key,
141
+ group: 'PJM Remote Shared Policy',
142
+ file: '.oat/config.json',
143
+ scope: 'shared repo',
144
+ type,
145
+ defaultValue: schemaVersion
146
+ ? '1'
147
+ : storage
148
+ ? 'local'
149
+ : authority
150
+ ? 'read-only'
151
+ : description
152
+ ? 'none'
153
+ : 'unset',
154
+ mutability: aggregate || schemaVersion ? 'read-only' : 'read/write',
155
+ owningCommand: aggregate || schemaVersion
156
+ ? 'individual child keys'
157
+ : `oat config set ${key} <value> --shared`,
158
+ description: 'Repository-owned remote storage or mutation policy; host execution is discovered live and cannot broaden it.',
159
+ };
160
+ });
97
161
  const CONFIG_CATALOG = [
162
+ ...PJM_REMOTE_CONFIG_CATALOG,
98
163
  {
99
164
  key: 'projects.root',
100
165
  group: 'Shared Repo (.oat/config.json)',
@@ -893,6 +958,7 @@ const DEFAULT_DEPENDENCIES = {
893
958
  resolveEffectiveConfig,
894
959
  resolveAssetsRoot,
895
960
  readFile: (path) => readFileDefault(path, 'utf8'),
961
+ atomicWriteJson,
896
962
  confirmAction,
897
963
  validateMatrixCell,
898
964
  createDispatchValidationPassContext,
@@ -905,6 +971,9 @@ function isConfigKey(value) {
905
971
  value === 'workflow.dispatchCeiling.providers' ||
906
972
  isDispatchCeilingProviderKey(value));
907
973
  }
974
+ function isPjmRemoteConfigKey(key) {
975
+ return key.startsWith('pjm.remote');
976
+ }
908
977
  function isDispatchCeilingProviderKey(value) {
909
978
  return (value.startsWith(DISPATCH_CEILING_PROVIDER_KEY_PREFIX) &&
910
979
  value.slice(DISPATCH_CEILING_PROVIDER_KEY_PREFIX.length).trim().length > 0);
@@ -1119,6 +1188,12 @@ function validateSurfaceForKey(key, surface) {
1119
1188
  }
1120
1189
  return;
1121
1190
  }
1191
+ if (isPjmRemoteConfigKey(key)) {
1192
+ if (surface !== 'shared') {
1193
+ throw new Error(`Cannot set '${key}' at '${surface}' scope. PJM remote policy and storage can only be set at shared scope.`);
1194
+ }
1195
+ return;
1196
+ }
1122
1197
  if (key.startsWith('explainers.')) {
1123
1198
  const allowed = key === 'explainers.defaults.style' ||
1124
1199
  key === 'explainers.defaults.palette' ||
@@ -1532,6 +1607,98 @@ function formatResolvedValue(value) {
1532
1607
  }
1533
1608
  return String(value);
1534
1609
  }
1610
+ function defaultPjmRemoteSharedConfig() {
1611
+ return {
1612
+ schemaVersion: 1,
1613
+ storage: { state: 'local' },
1614
+ policy: {
1615
+ description: 'none',
1616
+ authority: { default: 'read-only', operations: {} },
1617
+ providers: {},
1618
+ },
1619
+ };
1620
+ }
1621
+ function applyPjmRemoteSharedValue(current, key, rawValue) {
1622
+ if (key === 'pjm.remote' ||
1623
+ key === 'pjm.remote.policy' ||
1624
+ key === 'pjm.remote.schemaVersion') {
1625
+ throw new Error(`Config key '${key}' is read-only; set one of its documented child keys.`);
1626
+ }
1627
+ const remote = structuredClone(current ?? defaultPjmRemoteSharedConfig());
1628
+ if (key === 'pjm.remote.storage.state') {
1629
+ const state = rawValue.trim();
1630
+ if (state !== 'local' && state !== 'shared') {
1631
+ throw new Error(`Invalid value for ${key}: expected one of local | shared, got '${rawValue}'.`);
1632
+ }
1633
+ if (state === 'shared') {
1634
+ throw new Error("Shared operational storage requires 'oat pjm remote storage shared' preview and approval; direct config set is blocked.");
1635
+ }
1636
+ remote.storage = { state };
1637
+ return remote;
1638
+ }
1639
+ const descriptions = [
1640
+ 'none',
1641
+ 'managed-section',
1642
+ 'replace',
1643
+ ];
1644
+ const authorities = [
1645
+ 'read-only',
1646
+ 'user-approved',
1647
+ 'user-authorized',
1648
+ 'autonomous',
1649
+ ];
1650
+ const value = rawValue.trim();
1651
+ if (key === 'pjm.remote.policy.description') {
1652
+ if (!descriptions.includes(value)) {
1653
+ throw new Error(`Invalid value for ${key}: expected one of ${descriptions.join(' | ')}, got '${rawValue}'.`);
1654
+ }
1655
+ remote.policy.description = value;
1656
+ return remote;
1657
+ }
1658
+ if (!authorities.includes(value)) {
1659
+ if (key.endsWith('.description')) {
1660
+ if (!descriptions.includes(value)) {
1661
+ throw new Error(`Invalid value for ${key}: expected one of ${descriptions.join(' | ')}, got '${rawValue}'.`);
1662
+ }
1663
+ }
1664
+ else {
1665
+ throw new Error(`Invalid value for ${key}: expected one of ${authorities.join(' | ')}, got '${rawValue}'.`);
1666
+ }
1667
+ }
1668
+ if (key === 'pjm.remote.policy.authority.default') {
1669
+ remote.policy.authority.default = value;
1670
+ return remote;
1671
+ }
1672
+ const repositoryOperationPrefix = 'pjm.remote.policy.authority.operations.';
1673
+ if (key.startsWith(repositoryOperationPrefix)) {
1674
+ const operation = key.slice(repositoryOperationPrefix.length);
1675
+ remote.policy.authority.operations ??= {};
1676
+ remote.policy.authority.operations[operation] =
1677
+ value;
1678
+ return remote;
1679
+ }
1680
+ const parts = key.split('.');
1681
+ const provider = parts[4];
1682
+ remote.policy.providers ??= {};
1683
+ const providerPolicy = structuredClone(remote.policy.providers[provider] ?? {});
1684
+ if (parts[5] === 'description') {
1685
+ providerPolicy.description = value;
1686
+ }
1687
+ else {
1688
+ providerPolicy.authority ??= {};
1689
+ if (parts[6] === 'default') {
1690
+ providerPolicy.authority.default = value;
1691
+ }
1692
+ else {
1693
+ providerPolicy.authority.operations ??= {};
1694
+ const operation = parts[7];
1695
+ providerPolicy.authority.operations[operation] =
1696
+ value;
1697
+ }
1698
+ }
1699
+ remote.policy.providers[provider] = providerPolicy;
1700
+ return remote;
1701
+ }
1535
1702
  async function getConfigValue(repoRoot, userConfigDir, key, dependencies, preserveRawObject = false) {
1536
1703
  const resolved = await dependencies.resolveEffectiveConfig(repoRoot, userConfigDir, dependencies.processEnv);
1537
1704
  const entry = resolved.resolved[key];
@@ -1600,6 +1767,19 @@ async function listConfigKeys(repoRoot, userConfigDir, dependencies) {
1600
1767
  async function setConfigValue(repoRoot, userConfigDir, key, rawValue, surface, dependencies, warn) {
1601
1768
  validateSurfaceForKey(key, surface);
1602
1769
  const effectiveSurface = surface === 'auto' ? defaultSurfaceForKey(key) : surface;
1770
+ if (isPjmRemoteConfigKey(key)) {
1771
+ const config = await dependencies.readOatConfig(repoRoot);
1772
+ const remote = applyPjmRemoteSharedValue(config.pjm?.remote, key, rawValue);
1773
+ await dependencies.writeOatConfig(repoRoot, {
1774
+ ...config,
1775
+ pjm: { ...config.pjm, remote },
1776
+ });
1777
+ return {
1778
+ key,
1779
+ value: rawValue.trim(),
1780
+ source: 'shared',
1781
+ };
1782
+ }
1603
1783
  if (isWorkflowKey(key)) {
1604
1784
  const parsedValue = parseWorkflowValue(key, rawValue);
1605
1785
  const displayValue = formatResolvedValue(parsedValue);
@@ -1990,7 +2170,8 @@ function configPathForKey(key) {
1990
2170
  }
1991
2171
  if (key.startsWith('explainers.') ||
1992
2172
  key.startsWith('documentation.') ||
1993
- key.startsWith('archive.')) {
2173
+ key.startsWith('archive.') ||
2174
+ isPjmRemoteConfigKey(key)) {
1994
2175
  return key.split('.');
1995
2176
  }
1996
2177
  if (key === 'git.defaultBranch' ||
@@ -2024,6 +2205,15 @@ function configPathForKey(key) {
2024
2205
  */
2025
2206
  async function unsetConfigValue(repoRoot, userConfigDir, key, surface, dependencies, warn) {
2026
2207
  validateSurfaceForKey(key, surface);
2208
+ // These are structural views (and, for schemaVersion, the discriminator
2209
+ // that makes the remote policy readable), just as they are for `set`.
2210
+ // Refuse them before resolving config so an unset attempt can never be
2211
+ // mistaken for permission to remove the whole policy boundary.
2212
+ if (key === 'pjm.remote' ||
2213
+ key === 'pjm.remote.policy' ||
2214
+ key === 'pjm.remote.schemaVersion') {
2215
+ throw new Error(`Config key '${key}' is read-only; unset one of its documented child keys.`);
2216
+ }
2027
2217
  const resolved = await dependencies.resolveEffectiveConfig(repoRoot, userConfigDir, dependencies.processEnv);
2028
2218
  const envShadowed = resolved.resolved[key]?.source === 'env';
2029
2219
  if (key === 'activeProject' || key === 'lastPausedProject') {
@@ -2107,6 +2297,22 @@ async function removeFromSurface(repoRoot, userConfigDir, key, effectiveSurface,
2107
2297
  return false;
2108
2298
  }
2109
2299
  const configPath = join(repoRoot, '.oat', 'config.json');
2300
+ if (isPjmRemoteConfigKey(key)) {
2301
+ // PJM remote normalization materializes fail-closed defaults such as
2302
+ // policy.description=none and authority.default=read-only. Removing a
2303
+ // leaf from that normalized object and sending it through writeOatConfig
2304
+ // would therefore write the leaf straight back while reporting success.
2305
+ // The config has already passed the strict shared-policy reader in
2306
+ // resolveEffectiveConfig, so perform this removal against the validated raw
2307
+ // document and atomically persist only the requested structural change.
2308
+ const repaired = await removeConfigPathOnDisk(configPath, path);
2309
+ if (!repaired) {
2310
+ return false;
2311
+ }
2312
+ preservePjmRemotePolicyBoundary(repaired, path);
2313
+ await dependencies.atomicWriteJson(configPath, repaired);
2314
+ return true;
2315
+ }
2110
2316
  const sharedConfig = key === 'documentation.excludes'
2111
2317
  ? await dependencies.readOatConfigForDocumentationExcludesRepair(repoRoot)
2112
2318
  : key === 'documentation.instructionPointerExcludes'
@@ -2126,6 +2332,31 @@ async function removeFromSurface(repoRoot, userConfigDir, key, effectiveSurface,
2126
2332
  }
2127
2333
  return false;
2128
2334
  }
2335
+ /**
2336
+ * Keep the required PJM remote policy object when unsetting its final leaf.
2337
+ *
2338
+ * The recursive remover normally prunes empty parents. For this one schema,
2339
+ * however, `policy` is the structural boundary that keeps sibling remote state
2340
+ * (notably `storage.state=shared`) readable. An empty policy is valid and
2341
+ * normalizes to the fail-closed defaults; an absent policy makes the complete
2342
+ * remote object unreadable.
2343
+ */
2344
+ function preservePjmRemotePolicyBoundary(config, path) {
2345
+ if (path[0] !== 'pjm' || path[1] !== 'remote' || path[2] !== 'policy') {
2346
+ return;
2347
+ }
2348
+ const pjm = config.pjm;
2349
+ if (!isRecord(pjm)) {
2350
+ return;
2351
+ }
2352
+ const remote = pjm.remote;
2353
+ if (!isRecord(remote)) {
2354
+ return;
2355
+ }
2356
+ if (!Object.prototype.hasOwnProperty.call(remote, 'policy')) {
2357
+ remote.policy = {};
2358
+ }
2359
+ }
2129
2360
  /**
2130
2361
  * Remove `path` from the raw JSON on disk, ignoring normalization.
2131
2362
  *
@@ -1,8 +1,10 @@
1
1
  import type { DoctorCheck } from '../../ui/output.js';
2
2
  import { type PjmAdoption } from './adoption.js';
3
+ import { type RemoteDoctorInput } from './remote/doctor.js';
3
4
  export interface PjmDoctorOptions {
4
5
  projectRoot?: string;
5
6
  adoption?: PjmAdoption;
7
+ remote?: RemoteDoctorInput;
6
8
  }
7
9
  export declare function runPjmDoctorChecks(repoRoot: string, options?: PjmDoctorOptions): Promise<DoctorCheck[]>;
8
10
  //# sourceMappingURL=doctor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../../src/commands/pjm/doctor.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,OAAO,EAAsB,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AA4MlE,MAAM,WAAW,gBAAgB;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,WAAW,CAAC;CACxB;AAED,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,WAAW,EAAE,CAAC,CA2UxB"}
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../../src/commands/pjm/doctor.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,OAAO,EAAsB,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAElE,OAAO,EAAyB,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AA8MhF,MAAM,WAAW,gBAAgB;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,MAAM,CAAC,EAAE,iBAAiB,CAAC;CAC5B;AAED,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,WAAW,EAAE,CAAC,CAmVxB"}