@odla-ai/cli 0.43.0 → 0.44.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -4
- package/dist/bin.cjs +537 -396
- package/dist/bin.cjs.map +1 -1
- package/dist/bin.js +1 -1
- package/dist/{chunk-WDWJ7HC7.js → chunk-7MUWCSGP.js} +517 -399
- package/dist/chunk-7MUWCSGP.js.map +1 -0
- package/dist/{cli-OITEPXW4.js → cli-ZQBZT6YF.js} +2 -2
- package/dist/index.cjs +510 -392
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/skills/odla/SKILL.md +10 -3
- package/skills/odla/references/pm-work-intake.md +33 -11
- package/skills/odla/references/pm.md +23 -12
- package/dist/chunk-WDWJ7HC7.js.map +0 -1
- /package/dist/{cli-OITEPXW4.js.map → cli-ZQBZT6YF.js.map} +0 -0
package/dist/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@odla-ai/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.44.0",
|
|
4
4
|
"description": "Agent-operable CLI for odla provisioning, calendar consent and connection lifecycle, System AI administration, Worker secrets, security jobs, and smoke checks.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://odla.ai/docs/packages/cli",
|
package/skills/odla/SKILL.md
CHANGED
|
@@ -214,17 +214,24 @@ on the app. It is platform-side: there is nothing PM-specific to install or
|
|
|
214
214
|
provision. Start a session by reading it, and keep it current while you build:
|
|
215
215
|
|
|
216
216
|
```cmd
|
|
217
|
-
npx --yes @odla-ai/cli@latest pm next --app <appId>
|
|
217
|
+
npx --yes @odla-ai/cli@latest pm next --app <appId> # open goals, Ready, Doing
|
|
218
|
+
npx --yes @odla-ai/cli@latest pm start --app <appId> # claim the top Ready task
|
|
218
219
|
```
|
|
219
220
|
|
|
221
|
+
`pm next` ends by naming the command to run next, and `pm start` claims Ready
|
|
222
|
+
work in one call — it reads the current revision and compare-and-swaps against
|
|
223
|
+
it server-side, so you never carry a revision between commands. It cannot mark
|
|
224
|
+
work Ready: that contract is reviewed separately.
|
|
225
|
+
|
|
220
226
|
For a durable supervisor loop, establish and persist an exact-project PM cursor:
|
|
221
227
|
|
|
222
228
|
```cmd
|
|
223
229
|
npx --yes @odla-ai/cli@latest pm watch --app <appId> --entity task --jsonl
|
|
224
230
|
```
|
|
225
231
|
|
|
226
|
-
A Ready event is a wake-up signal, not permission:
|
|
227
|
-
|
|
232
|
+
A Ready event is a wake-up signal, not permission: re-read `pm next` and win the
|
|
233
|
+
atomic claim before starting — `pm start` does both, against the revision that
|
|
234
|
+
is current when it runs rather than the one the event carried. PM-attached
|
|
228
235
|
comments use the same cursor (`--action comment.created`); general Discussion
|
|
229
236
|
topics and mentions still use `discuss watch`.
|
|
230
237
|
|
|
@@ -16,14 +16,19 @@ for the current chat and should name the PM goal and task references.
|
|
|
16
16
|
## 1. Resolve context and read authoritative state
|
|
17
17
|
|
|
18
18
|
```cmd
|
|
19
|
-
npx --yes @odla-ai/cli@latest context show --context <profile>
|
|
20
19
|
npx --yes @odla-ai/cli@latest pm next --app <appId> --json
|
|
21
|
-
npx --yes @odla-ai/cli@latest pm handoff --app <appId> --json
|
|
22
20
|
```
|
|
23
21
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
22
|
+
`pm next` is the whole intake read: open goals, Ready candidates, and work
|
|
23
|
+
already in Doing, filtered by the server and projected to the fields you act on.
|
|
24
|
+
It ends with a `next:` line naming the exact command to run — follow that rather
|
|
25
|
+
than reconstructing the sequence from memory.
|
|
26
|
+
|
|
27
|
+
Add `pm handoff --app <appId> --json` when you need the fuller unresolved
|
|
28
|
+
picture (Backlog and Review as well, plus open bugs), and `--verbose` to either
|
|
29
|
+
when you need whole records with their audit trail. Read any existing Doing task
|
|
30
|
+
before selecting another. If the current chat has a Codex Goal, confirm that its
|
|
31
|
+
objective and verification still match these records.
|
|
27
32
|
|
|
28
33
|
## 2. Check alignment
|
|
29
34
|
|
|
@@ -68,16 +73,33 @@ Claim and release require `pm.execute`. Planning authority alone is
|
|
|
68
73
|
intentionally insufficient, so the principal that approves a task does not
|
|
69
74
|
silently become its executor.
|
|
70
75
|
|
|
71
|
-
|
|
76
|
+
Start the work in one call:
|
|
72
77
|
|
|
73
78
|
```cmd
|
|
74
|
-
npx --yes @odla-ai/cli@latest pm
|
|
75
|
-
npx --yes @odla-ai/cli@latest pm
|
|
79
|
+
npx --yes @odla-ai/cli@latest pm start --app <appId> --json
|
|
80
|
+
npx --yes @odla-ai/cli@latest pm start --app <appId> <task-id> --json # a specific task
|
|
76
81
|
```
|
|
77
82
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
83
|
+
`pm start` claims the top-ranked Ready task — the board's own order, not a
|
|
84
|
+
tie-break it invents — and narrows to one outcome with `--goal <goal-id>`. It
|
|
85
|
+
reads the current revision and compare-and-swaps against it server-side, so you
|
|
86
|
+
never carry a revision between commands, and it reloads once if the task moved
|
|
87
|
+
in between. It returns the claimed task, its goal, and the acceptance criteria
|
|
88
|
+
to work against, so starting work costs one command rather than four.
|
|
89
|
+
|
|
90
|
+
Only one concurrent caller can win. If the task is taken while starting it,
|
|
91
|
+
`pm start` says so and stops rather than retrying blindly; run it again to take
|
|
92
|
+
the next Ready task.
|
|
93
|
+
|
|
94
|
+
`pm start` deliberately cannot mark work Ready. That contract is reviewed
|
|
95
|
+
separately (step 3), so an agent cannot authorize its own work: starting
|
|
96
|
+
something that is not Ready refuses and names the command that readies it.
|
|
97
|
+
|
|
98
|
+
`pm task claim <id> --expected-revision <n>` still exists for a caller that has
|
|
99
|
+
already read the revision itself and wants the bare transition.
|
|
100
|
+
|
|
101
|
+
Once claimed, use the repository's worktree procedure and mention the PM
|
|
102
|
+
references in the execution chat:
|
|
81
103
|
|
|
82
104
|
```text
|
|
83
105
|
[Task title](https://odla.ai/studio/pm/board/<task-id>)
|
|
@@ -61,7 +61,7 @@ npx --yes @odla-ai/cli@latest pm next --app <appId>
|
|
|
61
61
|
```
|
|
62
62
|
|
|
63
63
|
```cmd
|
|
64
|
-
npx --yes @odla-ai/cli@latest pm
|
|
64
|
+
npx --yes @odla-ai/cli@latest pm start --app <appId>
|
|
65
65
|
```
|
|
66
66
|
|
|
67
67
|
```cmd
|
|
@@ -87,15 +87,23 @@ npx --yes @odla-ai/cli@latest pm decision list --q "stripe"
|
|
|
87
87
|
authorized immutable event log retains the deletion snapshot for recovery and
|
|
88
88
|
audit until the exact project lifetime is purged.
|
|
89
89
|
- `next --app <appId>` is the read-only intake view: open goals, current Doing
|
|
90
|
-
work, and Ready candidates. It never claims or mutates work
|
|
90
|
+
work, and Ready candidates. It never claims or mutates work, and its `next:`
|
|
91
|
+
line names the exact command to run next. Records are projected to the fields
|
|
92
|
+
you act on; `--verbose` returns whole records with their audit trail.
|
|
93
|
+
- `start --app <appId> [<task-id>]` claims Ready work in one call: it reads the
|
|
94
|
+
current revision and compare-and-swaps against it server-side, reloads once if
|
|
95
|
+
the task moved, and returns the task, its goal, and the acceptance criteria.
|
|
96
|
+
`--goal <id>` narrows the candidates. It cannot mark work Ready.
|
|
91
97
|
- `watch --app <appId> --jsonl` establishes and resumes an exact-project PM
|
|
92
98
|
lifecycle cursor. Persist checkpoint records, deduplicate at-least-once
|
|
93
99
|
delivery by `eventId`, and use `--entity`, `--state`, `--by`, or `--self` for
|
|
94
100
|
one stable consumer policy.
|
|
95
101
|
- `task ready <id> --expected-revision <n>` validates and records the Ready
|
|
96
|
-
contract. `task
|
|
97
|
-
|
|
98
|
-
|
|
102
|
+
contract. `task release` explicitly returns an active claim to Ready. A stale
|
|
103
|
+
revision or concurrent claim is a conflict, so reload instead of overwriting
|
|
104
|
+
it — `pm start` does that reload for you. `task claim <id> --expected-revision
|
|
105
|
+
<n>` remains for a caller that has already read the revision and wants the
|
|
106
|
+
bare transition.
|
|
99
107
|
|
|
100
108
|
Task lifecycle maintenance uses app/project PM mutation authority. `pm.plan`,
|
|
101
109
|
`pm.execute`, and legacy `pm.write` all carry ordinary PM-write access, so their
|
|
@@ -114,13 +122,14 @@ the request in PM but do not require them to repeat it with a Ready transition.
|
|
|
114
122
|
write:
|
|
115
123
|
|
|
116
124
|
```cmd
|
|
117
|
-
npx --yes @odla-ai/cli@latest context show --context <profile>
|
|
118
125
|
npx --yes @odla-ai/cli@latest pm next --app <appId>
|
|
119
126
|
```
|
|
120
127
|
|
|
121
|
-
|
|
122
|
-
`pm
|
|
123
|
-
|
|
128
|
+
That one read is open goals, Ready candidates, and Doing work, and it ends by
|
|
129
|
+
naming the command to run next. Then read `pm bug list --app <appId> --status
|
|
130
|
+
open` and `pm decision list --app <appId> --limit 10`, plus the linked goal and
|
|
131
|
+
its comments — `pm start` returns the task and goal you claim, so you do not
|
|
132
|
+
need to fetch those separately first. That is the state of the
|
|
124
133
|
project—including anything a *different* agent left behind.
|
|
125
134
|
|
|
126
135
|
Before project-mutating work, decide whether the request aligns to an existing
|
|
@@ -142,9 +151,11 @@ goal links and comments rather than sharing a working tree or status document.
|
|
|
142
151
|
an actionable description and acceptance criteria, then run `pm task ready
|
|
143
152
|
<id> --expected-revision <n>`. The stored column is still `todo` for API
|
|
144
153
|
compatibility, but every product surface calls it Ready.
|
|
145
|
-
- An agent starts
|
|
146
|
-
compare-and-set claim assigns the
|
|
147
|
-
|
|
154
|
+
- An agent starts with `pm start --app <appId>`, which takes the top-ranked
|
|
155
|
+
Ready task (or the one you name). The compare-and-set claim assigns the
|
|
156
|
+
authenticated principal and moves the task to Doing; `pm start` performs that
|
|
157
|
+
swap against the revision it just read. Never use `pm task set --column doing`
|
|
158
|
+
to bypass it.
|
|
148
159
|
- Use one claimed task and one owned worktree/branch. If you must stop before
|
|
149
160
|
review, run `pm task release <id> --expected-revision <n>` and comment with
|
|
150
161
|
the recovery point. Move to Review when evidence is ready; mark Done only
|