@open-agent-toolkit/cli 0.0.70 → 0.1.1

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.
@@ -28,6 +28,8 @@ Tracks managed mappings so the CLI can:
28
28
 
29
29
  Install-triggered auto-sync narrows that removal scope further: after `oat tools install <pack>`, the follow-up sync only plans removals for canonical entries from the installed pack. This protects unrelated provider views if the current worktree has stale manifest entries for other packs whose canonical assets are missing locally.
30
30
 
31
+ Autonomous worktree bootstrap also treats sync output as setup state. `oat-worktree-bootstrap-auto` checks inherited cleanliness before the all-scope sync run, then commits dirty sync-managed output as `chore: run sync` when needed. The commit is scoped to existing or tracked sync paths (`.oat/sync/manifest.json`, `.claude`, `.cursor`, `.codex`) and reports the result as `sync_commit: pass | fail | skip` in its structured status.
32
+
31
33
  For transformed mappings such as project-scoped rules, the manifest stores hashes for the rendered provider output that was actually written, not the canonical source markdown. This keeps drift detection aligned with the on-disk managed file.
32
34
 
33
35
  ## Drift states
@@ -75,6 +75,8 @@ oat_plan_parallel_groups: [['p02', 'p03'], ['p04', 'p05']]
75
75
  ### How a parallel group runs
76
76
 
77
77
  1. **Bootstrap worktrees** via `oat-worktree-bootstrap-auto`, one per phase, branch name `{project-name}/{pNN}`.
78
+ - The bootstrap checks inherited git cleanliness before the all-scope provider sync sweep.
79
+ - If that sync leaves `.oat/sync/manifest.json` or provider directories dirty, bootstrap commits only existing or tracked sync-managed paths (`.oat/sync/manifest.json`, `.claude`, `.cursor`, `.codex`) as `chore: run sync` and reports `sync_commit: pass | fail | skip`.
78
80
  - If any bootstrap fails, cancel successful worktrees and **degrade the entire group** to sequential inline execution.
79
81
  2. **Concurrent dispatch** of `oat-phase-implementer` into each worktree (Tier 1 only — Tier 2 cannot run concurrently and also degrades to sequential).
80
82
  3. **Wait for terminal verdicts** (`pass` or `failed`) across every phase in the group.
@@ -110,7 +110,7 @@ See [Implementation Execution](implementation-execution.md) for the full executi
110
110
 
111
111
  ### Quick lane diagram
112
112
 
113
- 1. `oat-project-quick-start` (adaptive discovery — provide a project name and optional description; if only the name is provided, quick-start asks for the missing description before discovery. Well-understood requests synthesize quickly, exploratory requests invest in solution space exploration)
113
+ 1. `oat-project-quick-start` (adaptive discovery — provide a project name and optional description; if only the name is provided, quick-start asks for the missing description before discovery. Well-understood requests synthesize quickly, exploratory requests invest in solution space exploration. Before scaffolding, the skill checks inherited git state and asks whether to commit, proceed, or abort when the worktree is already dirty.)
114
114
  2. Decision point: straight to plan, optional lightweight `design.md`, or promote to spec-driven
115
115
  3. Implement: `oat-project-implement` (sequential by default; parallel when `oat_plan_parallel_groups` is declared)
116
116
  4. `oat-project-review-provide` / `oat-project-pr-final`
@@ -118,7 +118,7 @@ See [Implementation Execution](implementation-execution.md) for the full executi
118
118
 
119
119
  ### Import lane diagram
120
120
 
121
- 1. `oat-project-import-plan`
121
+ 1. `oat-project-import-plan` (checks inherited git state before import scaffolding so sync-generated or unrelated dirty files do not silently roll into project bookkeeping)
122
122
  2. Implement: `oat-project-implement` (sequential by default; parallel when `oat_plan_parallel_groups` is declared)
123
123
  3. `oat-project-review-provide` / `oat-project-pr-final`
124
124
  4. Optional `oat-project-promote-spec-driven` to switch project mode to spec-driven lifecycle
@@ -198,6 +198,7 @@ Capture lane progression:
198
198
  - Keep `state.md`, `plan.md`, and `implementation.md` synchronized.
199
199
  - Stop at configured HiLL checkpoints.
200
200
  - Do not move lifecycle forward when required review gates are unresolved.
201
+ - Project entry skills (`oat-project-new`, `oat-project-quick-start`, and `oat-project-import-plan`) surface inherited dirty git state before scaffolding. If the dirty list includes `.oat/sync/manifest.json`, `.claude/`, `.cursor/`, or `.codex/`, the skill calls out that those paths are typically sync output and offers Commit now, Proceed anyway, or Abort.
201
202
 
202
203
  ## Reducing lifecycle friction with workflow preferences
203
204
 
@@ -1,6 +1,6 @@
1
1
  {
2
- "cli": "0.0.70",
3
- "docs-config": "0.0.70",
4
- "docs-theme": "0.0.70",
5
- "docs-transforms": "0.0.70"
2
+ "cli": "0.1.1",
3
+ "docs-config": "0.1.1",
4
+ "docs-theme": "0.1.1",
5
+ "docs-transforms": "0.1.1"
6
6
  }
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: oat-project-import-plan
3
- version: 1.2.1
3
+ version: 1.3.0
4
4
  description: Use when you have an external markdown plan to execute with OAT. Preserves the source plan and normalizes it into canonical plan.md format.
5
5
  argument-hint: '<path-to-plan.md> [--provider codex|cursor|claude] [--project <name>]'
6
6
  disable-model-invocation: true
@@ -56,15 +56,33 @@ When executing this skill, provide lightweight progress feedback so the user can
56
56
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
57
57
 
58
58
  - Before multi-step work, print step indicators, e.g.:
59
- - `[1/5] Resolving project + source plan…`
60
- - `[2/5] Preserving imported source…`
61
- - `[3/5] Normalizing plan to OAT task structure…`
62
- - `[4/5] Updating project metadata + state…`
63
- - `[5/5] Refreshing dashboard…`
59
+ - `[0/6] Checking inherited git state...`
60
+ - `[1/6] Resolving project + source plan…`
61
+ - `[2/6] Preserving imported source…`
62
+ - `[3/6] Normalizing plan to OAT task structure…`
63
+ - `[4/6] Updating project metadata + state…`
64
+ - `[5/6] Refreshing dashboard…`
65
+ - `[6/6] Ensuring implementation tracker…`
64
66
 
65
67
  ## Process
66
68
 
67
- ### Step 0: Resolve Active Project
69
+ ### Step 0 (Preflight): Inherited Git State
70
+
71
+ Before scaffolding, surface the working tree state so unrelated changes don't get carried into the project workflow's bookkeeping commits.
72
+
73
+ 1. Run `git status --porcelain`. If empty, continue silently to the next step.
74
+ 2. If non-empty, present the dirty list to the user.
75
+ 3. If `.oat/sync/manifest.json` or paths under `.claude/`, `.cursor/`, `.codex/` appear in the list, note: "These are generated by `oat sync` (often by `pnpm run worktree:init` or `oat-worktree-bootstrap-auto`) and are typically safe to commit as `chore: run sync`."
76
+ 4. Offer three choices via `AskUserQuestion`:
77
+ - **Commit now** (recommended when only sync output is dirty) — stage and commit. For sync-only diffs, default the message to `chore: run sync`; otherwise ask the user for the commit message.
78
+ - **Proceed anyway** — start the project workflow with the dirty state acknowledged.
79
+ - **Abort** — exit the skill so the user can clean up manually.
80
+
81
+ > **Tool availability is not the same as interactivity.** If `AskUserQuestion` is unavailable but chat is available, present the three choices as a plain chat message and wait for the user's reply. Only fall back to "Proceed anyway" when `OAT_NON_INTERACTIVE=1` is set or there is no user-response channel at all.
82
+
83
+ Do not advance past this gate without an explicit choice.
84
+
85
+ ### Step 0.5: Resolve Active Project
68
86
 
69
87
  ```bash
70
88
  PROJECT_PATH=$(oat config get activeProject 2>/dev/null || true)
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  name: oat-project-new
3
- version: 1.2.0
3
+ version: 1.3.0
4
4
  description: Use when starting a spec-driven OAT project from scratch. Scaffolds a new project under PROJECTS_ROOT and sets it active.
5
5
  argument-hint: '<project-name> [--force]'
6
6
  disable-model-invocation: true
7
7
  user-invocable: true
8
- allowed-tools: Read, Write, Bash(pnpm:*), Glob, Grep, AskUserQuestion
8
+ allowed-tools: Read, Write, Bash, Glob, Grep, AskUserQuestion
9
9
  ---
10
10
 
11
11
  # New OAT Project
@@ -21,13 +21,30 @@ Create a new OAT project directory, scaffold standard artifacts from `.oat/templ
21
21
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
22
22
 
23
23
  - Before multi-step work, print step indicators, e.g.:
24
+ - `[0/3] Checking inherited git state...`
24
25
  - `[1/3] Validating project name…`
25
26
  - `[2/3] Scaffolding project artifacts…`
26
27
  - `[3/3] Refreshing dashboard…`
27
28
 
28
29
  ## Process
29
30
 
30
- ### Step 0: Resolve Projects Root
31
+ ### Step 0 (Preflight): Inherited Git State
32
+
33
+ Before scaffolding, surface the working tree state so unrelated changes don't get carried into the project workflow's bookkeeping commits.
34
+
35
+ 1. Run `git status --porcelain`. If empty, continue silently to the next step.
36
+ 2. If non-empty, present the dirty list to the user.
37
+ 3. If `.oat/sync/manifest.json` or paths under `.claude/`, `.cursor/`, `.codex/` appear in the list, note: "These are generated by `oat sync` (often by `pnpm run worktree:init` or `oat-worktree-bootstrap-auto`) and are typically safe to commit as `chore: run sync`."
38
+ 4. Offer three choices via `AskUserQuestion`:
39
+ - **Commit now** (recommended when only sync output is dirty) — stage and commit. For sync-only diffs, default the message to `chore: run sync`; otherwise ask the user for the commit message.
40
+ - **Proceed anyway** — start the project workflow with the dirty state acknowledged.
41
+ - **Abort** — exit the skill so the user can clean up manually.
42
+
43
+ > **Tool availability is not the same as interactivity.** If `AskUserQuestion` is unavailable but chat is available, present the three choices as a plain chat message and wait for the user's reply. Only fall back to "Proceed anyway" when `OAT_NON_INTERACTIVE=1` is set or there is no user-response channel at all.
44
+
45
+ Do not advance past this gate without an explicit choice.
46
+
47
+ ### Step 0.5: Resolve Projects Root
31
48
 
32
49
  Resolve `{PROJECTS_ROOT}` (same order as other OAT skills):
33
50
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: oat-project-quick-start
3
- version: 2.0.2
3
+ version: 2.1.0
4
4
  description: Use when a task is small enough for quick mode or rapid iteration is preferred. Scaffolds a lightweight OAT project from discovery directly to a runnable plan, with optional brainstorming and lightweight design.
5
5
  argument-hint: '<project-name> ["project description"]'
6
6
  disable-model-invocation: true
@@ -57,6 +57,7 @@ When executing this skill, provide lightweight progress feedback so the user can
57
57
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
58
58
 
59
59
  - Before multi-step work, print step indicators, e.g.:
60
+ - `[0/6] Checking inherited git state...`
60
61
  - `[1/6] Scaffolding quick-mode project…`
61
62
  - `[2/6] Exploring solution space + capturing discovery…`
62
63
  - `[3/6] Decision point: design depth…`
@@ -74,7 +75,23 @@ When executing this skill, provide lightweight progress feedback so the user can
74
75
 
75
76
  ## Process
76
77
 
77
- ### Step 0: Resolve Active Project
78
+ ### Step 0 (Preflight): Inherited Git State
79
+
80
+ Before scaffolding, surface the working tree state so unrelated changes don't get carried into the project workflow's bookkeeping commits.
81
+
82
+ 1. Run `git status --porcelain`. If empty, continue silently to the next step.
83
+ 2. If non-empty, present the dirty list to the user.
84
+ 3. If `.oat/sync/manifest.json` or paths under `.claude/`, `.cursor/`, `.codex/` appear in the list, note: "These are generated by `oat sync` (often by `pnpm run worktree:init` or `oat-worktree-bootstrap-auto`) and are typically safe to commit as `chore: run sync`."
85
+ 4. Offer three choices via `AskUserQuestion`:
86
+ - **Commit now** (recommended when only sync output is dirty) — stage and commit. For sync-only diffs, default the message to `chore: run sync`; otherwise ask the user for the commit message.
87
+ - **Proceed anyway** — start the project workflow with the dirty state acknowledged.
88
+ - **Abort** — exit the skill so the user can clean up manually.
89
+
90
+ > **Tool availability is not the same as interactivity.** If `AskUserQuestion` is unavailable but chat is available, present the three choices as a plain chat message and wait for the user's reply. Only fall back to "Proceed anyway" when `OAT_NON_INTERACTIVE=1` is set or there is no user-response channel at all.
91
+
92
+ Do not advance past this gate without an explicit choice.
93
+
94
+ ### Step 0.5: Resolve Active Project
78
95
 
79
96
  ```bash
80
97
  PROJECT_PATH=$(oat config get activeProject 2>/dev/null || true)
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: oat-worktree-bootstrap-auto
3
- version: 1.2.2
3
+ version: 1.3.0
4
4
  description: Use when an orchestrator/subagent needs autonomous worktree bootstrap. Non-interactive companion to oat-worktree-bootstrap.
5
5
  argument-hint: '<branch-name> [--base <ref>] [--path <root>] [--baseline-policy <strict|allow-failing>]'
6
6
  disable-model-invocation: true
@@ -158,9 +158,13 @@ Execute in the target worktree directory:
158
158
  pnpm run worktree:init # install + build + sync
159
159
  oat status --scope project
160
160
  pnpm test
161
- git status --porcelain
162
161
  ```
163
162
 
163
+ Continue to Step 4 for provider directory setup, the `git_clean` baseline
164
+ check, and the all-scope sync. The `git_clean` check must run after provider
165
+ directory creation but before the all-scope sync sweep, so it measures inherited
166
+ worktree state plus setup output rather than the sync sweep's generated output.
167
+
164
168
  Check behavior per baseline policy:
165
169
 
166
170
  **strict mode:**
@@ -175,21 +179,38 @@ Check behavior per baseline policy:
175
179
  - If active project with `implementation.md` exists → append timestamped baseline-failure note.
176
180
  - Otherwise → console output only (no fallback file creation).
177
181
 
178
- ### Step 4: Create Provider Directories
182
+ ### Step 4: Create Provider Directories and Sync
179
183
 
180
- Worktrees do not inherit gitignored provider directories. Create them if missing:
184
+ Worktrees do not inherit gitignored provider directories. Create them if
185
+ missing, run the `git_clean` baseline check, and then run sync:
181
186
 
182
187
  ```bash
183
188
  mkdir -p "{target-path}/.claude/skills"
184
189
  mkdir -p "{target-path}/.cursor/rules"
190
+ git status --porcelain
191
+ oat sync --scope all
185
192
  ```
186
193
 
187
- Then re-run sync to establish symlinks:
194
+ After sync completes, commit sync-managed output if any scoped path is dirty:
188
195
 
189
196
  ```bash
190
- oat sync --scope all
197
+ SYNC_PATHS=(.oat/sync/manifest.json .claude .cursor .codex)
198
+ SYNC_STAGE_PATHS=(existing-or-tracked sync paths)
199
+ git status --porcelain -- "${SYNC_STAGE_PATHS[@]}"
200
+ git add -A -- "${SYNC_STAGE_PATHS[@]}"
201
+ STAGED_SYNC_FILES=(staged sync-managed files from git diff --cached)
202
+ git commit -m "chore: run sync" -- "${STAGED_SYNC_FILES[@]}"
191
203
  ```
192
204
 
205
+ Use a staged-diff guard so no empty commit is created. After scoped staging,
206
+ derive the concrete staged sync-managed files from
207
+ `git diff --cached --name-only --no-renames -- "${SYNC_STAGE_PATHS[@]}"` and
208
+ commit only those file paths. Do not pass provider directory pathspecs to
209
+ `git commit`, because empty provider directories can make the commit fail. This
210
+ file-list isolation is what keeps `chore: run sync` limited to sync-managed
211
+ paths even if unrelated files were already staged. If no scoped path is dirty,
212
+ or staging produces no diff, report `sync_commit: skip`.
213
+
193
214
  ### Step 5: Return Structured Status
194
215
 
195
216
  Return a structured status object (for orchestrator consumption):
@@ -207,6 +228,7 @@ checks:
207
228
  tests: pass | fail | skip
208
229
  git_clean: pass | fail | skip
209
230
  provider_sync: pass | fail | skip
231
+ sync_commit: pass | fail | skip
210
232
  warnings: [] # List of warning messages (allow-failing mode)
211
233
  error: null # Error message (strict mode failure)
212
234
  reason: null # Structured reason on failure (e.g., base-mismatch)
@@ -221,6 +243,8 @@ baseline_policy: strict | allow-failing
221
243
  - `success`: All checks passed and Step 2.7 base-resolution verification passed.
222
244
  - `warning`: Some checks failed under `allow-failing` policy (Step 2.7 still passed).
223
245
  - `error`: A baseline check failed under `strict` policy, or worktree creation failed.
246
+ - `error`: `sync_commit` failed under `strict` policy.
247
+ - `warning`: `sync_commit` failed under `allow-failing` policy.
224
248
  - `failed` (with `reason: base-mismatch`): Step 2.7 base-resolution verification failed. Callers should treat this distinctly from a generic baseline error — it is a contract violation, not a flaky check.
225
249
 
226
250
  ## Error Handling
@@ -152,11 +152,12 @@ fi
152
152
 
153
153
  run_check "project_status" oat status --scope project
154
154
  run_check "tests" pnpm test
155
- run_check "git_clean" test -z "$(git status --porcelain)"
156
155
 
157
156
  # ─── Step 4: Create Provider Directories ────────────────────────────────────
158
157
  mkdir -p "$TARGET_PATH/.claude/skills"
159
158
  mkdir -p "$TARGET_PATH/.cursor/rules"
159
+ run_check "git_clean" test -z "$(git status --porcelain)"
160
+
160
161
  if oat sync --scope all >/dev/null 2>&1; then
161
162
  CHECK_RESULTS["provider_sync"]="pass"
162
163
  else
@@ -168,6 +169,46 @@ else
168
169
  fi
169
170
  fi
170
171
 
172
+ # ─── Step 4.5: Commit Sync Output ───────────────────────────────────────────
173
+ SYNC_PATHS=(.oat/sync/manifest.json .claude .cursor .codex)
174
+ SYNC_STAGE_PATHS=()
175
+ for sync_path in "${SYNC_PATHS[@]}"; do
176
+ if [[ -e "$sync_path" ]] || [[ -n "$(git ls-files -- "$sync_path")" ]]; then
177
+ SYNC_STAGE_PATHS+=("$sync_path")
178
+ fi
179
+ done
180
+
181
+ SYNC_DIRTY=""
182
+ if [[ ${#SYNC_STAGE_PATHS[@]} -gt 0 ]]; then
183
+ SYNC_DIRTY=$(git status --porcelain -- "${SYNC_STAGE_PATHS[@]}" 2>/dev/null || true)
184
+ fi
185
+ if [[ -n "$SYNC_DIRTY" ]]; then
186
+ git add -A -- "${SYNC_STAGE_PATHS[@]}" 2>/dev/null || true
187
+ if ! git diff --cached --quiet -- "${SYNC_STAGE_PATHS[@]}"; then
188
+ STAGED_SYNC_FILES=()
189
+ while IFS= read -r -d '' staged_sync_file; do
190
+ STAGED_SYNC_FILES+=("$staged_sync_file")
191
+ done < <(git diff --cached --name-only -z --no-renames -- "${SYNC_STAGE_PATHS[@]}")
192
+
193
+ if [[ ${#STAGED_SYNC_FILES[@]} -eq 0 ]]; then
194
+ CHECK_RESULTS["sync_commit"]="skip"
195
+ elif git commit -m "chore: run sync" -- "${STAGED_SYNC_FILES[@]}" >/dev/null 2>&1; then
196
+ CHECK_RESULTS["sync_commit"]="pass"
197
+ else
198
+ CHECK_RESULTS["sync_commit"]="fail"
199
+ if [[ "$BASELINE_POLICY" == "strict" ]]; then
200
+ HAS_ERROR=true
201
+ else
202
+ WARNINGS+=("sync_commit: commit failed")
203
+ fi
204
+ fi
205
+ else
206
+ CHECK_RESULTS["sync_commit"]="skip"
207
+ fi
208
+ else
209
+ CHECK_RESULTS["sync_commit"]="skip"
210
+ fi
211
+
171
212
  # ─── Step 5: Return Structured Status ───────────────────────────────────────
172
213
  if [[ "$HAS_ERROR" == true ]]; then
173
214
  STATUS="error"
@@ -188,6 +229,7 @@ checks:
188
229
  tests: ${CHECK_RESULTS[tests]:-skip}
189
230
  git_clean: ${CHECK_RESULTS[git_clean]:-skip}
190
231
  provider_sync: ${CHECK_RESULTS[provider_sync]:-skip}
232
+ sync_commit: ${CHECK_RESULTS[sync_commit]:-skip}
191
233
  warnings: [$(IFS=','; echo "${WARNINGS[*]:-}")]
192
234
  error: ${HAS_ERROR:+baseline check failed under strict policy}
193
235
  baseline_policy: $BASELINE_POLICY
@@ -1 +1 @@
1
- {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../../src/rules/canonical/render.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AAUxD,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,EAC3C,IAAI,EAAE,MAAM,GACX,MAAM,CASR;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,aAAa,CAAC,EAAE,MAAM,GACrB,MAAM,CAMR;AAED,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,wBAAwB,EACrC,IAAI,EAAE,MAAM,GACX,MAAM,CAUR"}
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../../src/rules/canonical/render.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AAUxD,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,EAC3C,IAAI,EAAE,MAAM,GACX,MAAM,CAcR;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,aAAa,CAAC,EAAE,MAAM,GACrB,MAAM,CAMR;AAED,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,wBAAwB,EACrC,IAAI,EAAE,MAAM,GACX,MAAM,CAUR"}
@@ -11,7 +11,12 @@ export function renderMarkdownWithFrontmatter(frontmatter, body) {
11
11
  if (!frontmatter || Object.keys(frontmatter).length === 0) {
12
12
  return normalizedBody;
13
13
  }
14
- const frontmatterYaml = YAML.stringify(frontmatter).trimEnd();
14
+ // singleQuote keeps generated YAML frontmatter aligned with oxfmt/Prettier
15
+ // formatting (singleQuote: true) so consumer repos don't see drift between
16
+ // `oat sync` output and their markdown formatter on each commit.
17
+ const frontmatterYaml = YAML.stringify(frontmatter, {
18
+ singleQuote: true,
19
+ }).trimEnd();
15
20
  return `---\n${frontmatterYaml}\n---\n\n${normalizedBody}`;
16
21
  }
17
22
  export function appendGeneratedMarker(content, canonicalPath) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@open-agent-toolkit/cli",
3
- "version": "0.0.70",
3
+ "version": "0.1.1",
4
4
  "private": false,
5
5
  "description": "Open Agent Toolkit CLI",
6
6
  "homepage": "https://github.com/voxmedia/open-agent-toolkit/tree/main/packages/cli",
@@ -33,7 +33,7 @@
33
33
  "ora": "^9.0.0",
34
34
  "yaml": "2.8.2",
35
35
  "zod": "^3.25.76",
36
- "@open-agent-toolkit/control-plane": "0.0.70"
36
+ "@open-agent-toolkit/control-plane": "0.1.1"
37
37
  },
38
38
  "devDependencies": {
39
39
  "@types/node": "^22.10.0",