@odla-ai/cli 0.30.0 → 0.30.2
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 +24 -7
- package/dist/bin.cjs +154 -155
- package/dist/bin.cjs.map +1 -1
- package/dist/bin.js +1 -1
- package/dist/{chunk-PPSXHZJI.js → chunk-3HFNKDZV.js} +120 -129
- package/dist/chunk-3HFNKDZV.js.map +1 -0
- package/dist/{cli-CKBUVTJM.js → cli-BGSX5Z4C.js} +2 -2
- package/dist/index.cjs +133 -142
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +8 -7
- package/dist/index.d.ts +8 -7
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/skills/odla/SKILL.md +6 -4
- package/skills/odla/references/pm-work-intake.md +11 -2
- package/skills/odla/references/pm.md +35 -0
- package/dist/chunk-PPSXHZJI.js.map +0 -1
- /package/dist/{cli-CKBUVTJM.js.map → cli-BGSX5Z4C.js.map} +0 -0
package/dist/index.d.cts
CHANGED
|
@@ -594,9 +594,8 @@ interface ProvisionOptions {
|
|
|
594
594
|
* true records an explicit request; false is the only production suppression. */
|
|
595
595
|
open?: boolean;
|
|
596
596
|
/** Cap the handshake-approval wait, in seconds. When it elapses the command
|
|
597
|
-
* exits
|
|
598
|
-
*
|
|
599
|
-
* everywhere else (agent tool shells kill long-running commands). */
|
|
597
|
+
* exits pending; rerunning requests a new code. Defaults to the handshake's
|
|
598
|
+
* own expiry on an interactive terminal and 90 seconds everywhere else. */
|
|
600
599
|
wait?: number;
|
|
601
600
|
/** Test/embedding override for opening the approval URL. Defaults to the OS browser opener. */
|
|
602
601
|
openApprovalUrl?: (url: string) => Promise<void>;
|
|
@@ -629,6 +628,8 @@ interface ProvisionPlan {
|
|
|
629
628
|
interface SmokeOptions {
|
|
630
629
|
configPath: string;
|
|
631
630
|
env?: string;
|
|
631
|
+
/** Verify the deployed Worker without reading local db/o11y credentials. */
|
|
632
|
+
runtime?: boolean;
|
|
632
633
|
/** Developer-token override used only for owner-visible calendar health. */
|
|
633
634
|
token?: string;
|
|
634
635
|
/** Existing odla account email used only when a fresh device handshake is required. */
|
|
@@ -1255,10 +1256,10 @@ declare function installSkill(options?: SkillInstallOptions): SkillInstallResult
|
|
|
1255
1256
|
* Verify a live, already-provisioned environment end-to-end. Resolves the target
|
|
1256
1257
|
* env (`options.env`, else `dev`, else the first declared env). Explicit `prod`
|
|
1257
1258
|
* remains addressable after one-shot `provision --live` even when ordinary
|
|
1258
|
-
* provision defaults stay dev-only.
|
|
1259
|
-
*
|
|
1260
|
-
*
|
|
1261
|
-
*
|
|
1259
|
+
* provision defaults stay dev-only. Local mode reads the private service
|
|
1260
|
+
* credentials and performs direct db checks. `runtime` mode never reads those
|
|
1261
|
+
* values: it verifies Registry state, the deployed Worker link, anonymous
|
|
1262
|
+
* integration probes, and owner-visible calendar health instead.
|
|
1262
1263
|
*
|
|
1263
1264
|
* It then makes service-aware network calls: fetches the registry public-config
|
|
1264
1265
|
* (and, when `ai.provider` is configured, asserts the live provider matches);
|
package/dist/index.d.ts
CHANGED
|
@@ -594,9 +594,8 @@ interface ProvisionOptions {
|
|
|
594
594
|
* true records an explicit request; false is the only production suppression. */
|
|
595
595
|
open?: boolean;
|
|
596
596
|
/** Cap the handshake-approval wait, in seconds. When it elapses the command
|
|
597
|
-
* exits
|
|
598
|
-
*
|
|
599
|
-
* everywhere else (agent tool shells kill long-running commands). */
|
|
597
|
+
* exits pending; rerunning requests a new code. Defaults to the handshake's
|
|
598
|
+
* own expiry on an interactive terminal and 90 seconds everywhere else. */
|
|
600
599
|
wait?: number;
|
|
601
600
|
/** Test/embedding override for opening the approval URL. Defaults to the OS browser opener. */
|
|
602
601
|
openApprovalUrl?: (url: string) => Promise<void>;
|
|
@@ -629,6 +628,8 @@ interface ProvisionPlan {
|
|
|
629
628
|
interface SmokeOptions {
|
|
630
629
|
configPath: string;
|
|
631
630
|
env?: string;
|
|
631
|
+
/** Verify the deployed Worker without reading local db/o11y credentials. */
|
|
632
|
+
runtime?: boolean;
|
|
632
633
|
/** Developer-token override used only for owner-visible calendar health. */
|
|
633
634
|
token?: string;
|
|
634
635
|
/** Existing odla account email used only when a fresh device handshake is required. */
|
|
@@ -1255,10 +1256,10 @@ declare function installSkill(options?: SkillInstallOptions): SkillInstallResult
|
|
|
1255
1256
|
* Verify a live, already-provisioned environment end-to-end. Resolves the target
|
|
1256
1257
|
* env (`options.env`, else `dev`, else the first declared env). Explicit `prod`
|
|
1257
1258
|
* remains addressable after one-shot `provision --live` even when ordinary
|
|
1258
|
-
* provision defaults stay dev-only.
|
|
1259
|
-
*
|
|
1260
|
-
*
|
|
1261
|
-
*
|
|
1259
|
+
* provision defaults stay dev-only. Local mode reads the private service
|
|
1260
|
+
* credentials and performs direct db checks. `runtime` mode never reads those
|
|
1261
|
+
* values: it verifies Registry state, the deployed Worker link, anonymous
|
|
1262
|
+
* integration probes, and owner-visible calendar health instead.
|
|
1262
1263
|
*
|
|
1263
1264
|
* It then makes service-aware network calls: fetches the registry public-config
|
|
1264
1265
|
* (and, when `ai.provider` is configured, asserts the live provider matches);
|
package/dist/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@odla-ai/cli",
|
|
3
|
-
"version": "0.30.
|
|
3
|
+
"version": "0.30.2",
|
|
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
|
@@ -113,9 +113,8 @@ guessing which platform/credential steps need manual work. Then:
|
|
|
113
113
|
control, open that exact URL now.** If you do not, give it to the human
|
|
114
114
|
verbatim; never wait silently or start a substitute handshake. Outside an
|
|
115
115
|
interactive terminal the wait is capped (90s default,
|
|
116
|
-
`--wait <seconds>`); exit code 75 means still pending
|
|
117
|
-
|
|
118
|
-
resumes the same code and collects the token. It creates the app,
|
|
116
|
+
`--wait <seconds>`); exit code 75 means still pending. The device code is
|
|
117
|
+
not cached: rerunning always opens a fresh code for human review. It creates the app,
|
|
119
118
|
consuming a one-time exact-id reservation when the approved app is new,
|
|
120
119
|
enables services, issues or reuses configured credentials (db key + o11y
|
|
121
120
|
ingest token when enabled), composes declared integration schema/rules and
|
|
@@ -280,7 +279,10 @@ If approval is not available, comment on the runbook instead so an admin can fix
|
|
|
280
279
|
it later.
|
|
281
280
|
|
|
282
281
|
`npx @odla-ai/cli doctor` is an offline config check anytime;
|
|
283
|
-
`npx @odla-ai/cli smoke --env dev` verifies a live deployment
|
|
282
|
+
`npx @odla-ai/cli smoke --env dev` verifies a live deployment from local
|
|
283
|
+
service credentials. After `provision --push-secrets`, use
|
|
284
|
+
`npx @odla-ai/cli smoke --env dev --runtime`; it verifies the Worker and
|
|
285
|
+
anonymous integration routes without retrieving its db/o11y secrets.
|
|
284
286
|
Use `calendar status --json` for safe connection state (`bookable`, booking
|
|
285
287
|
and availability calendars) and `calendar calendars --json` to discover ids
|
|
286
288
|
after consent; update checked-in config and re-provision. Disconnect always
|
|
@@ -81,10 +81,19 @@ do not retry with a guessed revision. Once claimed, use the repository's
|
|
|
81
81
|
worktree procedure and mention the PM references in the execution chat:
|
|
82
82
|
|
|
83
83
|
```text
|
|
84
|
-
|
|
85
|
-
|
|
84
|
+
[Task title](https://odla.ai/studio/pm/board/<task-id>)
|
|
85
|
+
[Goal title](https://odla.ai/studio/pm/goals/<goal-id>)
|
|
86
86
|
```
|
|
87
87
|
|
|
88
|
+
In user-facing chat, a UUID is never the record's label. Name the type and title
|
|
89
|
+
as a Markdown link to Studio, then add the state, consequence, or next action. A
|
|
90
|
+
useful handoff says, for example, `Ready task: [Replace UUID-only PM
|
|
91
|
+
handoffs](https://odla.ai/studio/pm/board/<task-id>) — ready to claim`, not
|
|
92
|
+
`Ready task: <task-id>`. When several records are related, explain that
|
|
93
|
+
relationship instead of returning an id inventory. Create and lifecycle
|
|
94
|
+
commands print the title-first link directly; `pm ... link <id>` reproduces it
|
|
95
|
+
later. Reserve `pm ... ref <id>` for structured odla Discussion markup.
|
|
96
|
+
|
|
88
97
|
## 5. Execute, review, and complete
|
|
89
98
|
|
|
90
99
|
- Keep the task description/acceptance criteria current under its revision.
|
|
@@ -188,6 +188,41 @@ npx @odla-ai/cli pm task comments <task-id>
|
|
|
188
188
|
Use `pm:task`, `pm:goal`, `pm:decision`, `pm:bug`, and `pm:runbook`. The message
|
|
189
189
|
is communication; the referenced PM row remains the lifecycle authority.
|
|
190
190
|
|
|
191
|
+
### Human-readable handoffs
|
|
192
|
+
|
|
193
|
+
A PM id is an implementation handle, not a useful description of work. In every
|
|
194
|
+
chat update, final response, review request, or handoff, lead with the record's
|
|
195
|
+
type and title as an ordinary Markdown link to its Studio record, then say what
|
|
196
|
+
happened or what the recipient should do. The UUID belongs in the link target,
|
|
197
|
+
not in the prose. Typed `pm:*` references are for odla Discussion, where they
|
|
198
|
+
render as PM chips; do not expose that internal markup in ordinary chat.
|
|
199
|
+
|
|
200
|
+
Do not write:
|
|
201
|
+
|
|
202
|
+
```text
|
|
203
|
+
Accepted decision: 019fd392-1217-754c-a61d-3b0470bcd269
|
|
204
|
+
Ready task: 019fd392-dd02-7312-86d6-d255c5a983e7
|
|
205
|
+
Backup bug: 20f38d3d-7c02-54b5-8e33-f8b82e4ab125
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
Write a compact semantic handoff instead:
|
|
209
|
+
|
|
210
|
+
```text
|
|
211
|
+
Accepted decision: [Keep the legacy fallback through migration](https://odla.ai/studio/pm/decisions/<decision-id>) — rules out deleting it before production evidence is clean.
|
|
212
|
+
Ready task: [Replace UUID-only PM handoffs](https://odla.ai/studio/pm/board/<task-id>) — implementation is bounded and ready to claim.
|
|
213
|
+
Tracked bug: [PM create output hides the record title](https://odla.ai/studio/pm/bugs/<bug-id>) — retained if the task does not cover every output path.
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
The CLI reinforces this convention: successful creates and lifecycle changes
|
|
217
|
+
print title-first, copy-ready links, such as
|
|
218
|
+
`created bug: [Checkout 500s on retry](https://odla.ai/studio/pm/bugs/<bug-id>)`
|
|
219
|
+
and `decision: [Keep the fallback](https://odla.ai/studio/pm/decisions/<decision-id>)
|
|
220
|
+
→ accepted`. Use `pm ... link <id>` to regenerate an ordinary Markdown link
|
|
221
|
+
later; use `pm ... ref <id>` only for structured odla Discussion markup.
|
|
222
|
+
Summarize the relationship between records instead of merely listing them; PM
|
|
223
|
+
contains the detail, while chat should make the state and next action
|
|
224
|
+
understandable before the recipient follows a link.
|
|
225
|
+
|
|
191
226
|
In Studio, open any PM item and choose **Discuss** to open the owning project's
|
|
192
227
|
Discussion composer with the same stable reference already inserted. The draft
|
|
193
228
|
is retained in the URL across reload/back navigation but is not a write: review,
|