crewly 1.8.12 → 1.9.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/config/roles/orchestrator/prompt.md +53 -0
- package/config/roles/product-manager/prompt.md +40 -0
- package/config/roles/team-leader/prompt.md +33 -0
- package/config/skills/orchestrator/decompose-okr/SKILL.md +107 -0
- package/config/skills/orchestrator/decompose-okr/execute.sh +142 -0
- package/config/skills/registry.json +52 -6
- package/dist/backend/backend/src/controllers/mission/kr.controller.d.ts +8 -0
- package/dist/backend/backend/src/controllers/mission/kr.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/mission/kr.controller.js +17 -0
- package/dist/backend/backend/src/controllers/mission/kr.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/mission/mission-policy.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/mission/mission-policy.routes.js +198 -26
- package/dist/backend/backend/src/controllers/mission/mission-policy.routes.js.map +1 -1
- package/dist/backend/backend/src/services/v3/kr-tracking.service.d.ts +92 -1
- package/dist/backend/backend/src/services/v3/kr-tracking.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/kr-tracking.service.js +169 -1
- package/dist/backend/backend/src/services/v3/kr-tracking.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/mission-period.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/mission-period.service.js +7 -1
- package/dist/backend/backend/src/services/v3/mission-period.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/okr-cascade.service.d.ts +217 -0
- package/dist/backend/backend/src/services/v3/okr-cascade.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/okr-cascade.service.js +417 -0
- package/dist/backend/backend/src/services/v3/okr-cascade.service.js.map +1 -0
- package/dist/backend/backend/src/services/v3/okr-review.service.d.ts +11 -0
- package/dist/backend/backend/src/services/v3/okr-review.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/okr-review.service.js +50 -0
- package/dist/backend/backend/src/services/v3/okr-review.service.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-migrate.service.d.ts +91 -0
- package/dist/backend/backend/src/services/wiki/wiki-migrate.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-migrate.service.js +180 -0
- package/dist/backend/backend/src/services/wiki/wiki-migrate.service.js.map +1 -1
- package/dist/backend/backend/src/types/v2/index.d.ts +4 -4
- package/dist/backend/backend/src/types/v2/index.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/index.js +2 -2
- package/dist/backend/backend/src/types/v2/index.js.map +1 -1
- package/dist/backend/backend/src/types/v2/key-result.types.d.ts +84 -0
- package/dist/backend/backend/src/types/v2/key-result.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/key-result.types.js +73 -3
- package/dist/backend/backend/src/types/v2/key-result.types.js.map +1 -1
- package/dist/backend/backend/src/types/v2/mission.types.d.ts +235 -0
- package/dist/backend/backend/src/types/v2/mission.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/mission.types.js +230 -0
- package/dist/backend/backend/src/types/v2/mission.types.js.map +1 -1
- package/package.json +1 -1
|
@@ -700,6 +700,24 @@ even if the user hasn't asked anything in that turn. The escalation
|
|
|
700
700
|
|
|
701
701
|
## Bridge-auto WorkItems — DO NOT bulk-delete (2026-05-27)
|
|
702
702
|
|
|
703
|
+
> **⚠️ SUPERSEDES any "silent containment / suppress / hold wiki maintenance" learning (2026-05-30).**
|
|
704
|
+
> The 2026-05-27/28 wiki *volume runaway* is **fixed in crewly@1.8.12**: the bridge now
|
|
705
|
+
> counts NET-NEW pages only (migrate WIs are small — single digits, not 500/scan), the
|
|
706
|
+
> bookkeep/reflect reminder spam is fixed (net-new + persisted state), and triggers no
|
|
707
|
+
> longer re-burst on restart. Therefore any earlier orc memory/gotcha that says to
|
|
708
|
+
> *silently cancel, "contain", or hold* bridge-auto wiki WIs as "false-positives" is
|
|
709
|
+
> **obsolete — do not act on it.** Specifically:
|
|
710
|
+
> - **PROCESS `wiki_quality_cleanup` WIs** via `wiki-cleanup` (archive-before-delete to
|
|
711
|
+
> `VAULT/.wiki-cleanup-archive.json`, fully reversible). Steve greenlit draining the
|
|
712
|
+
> existing agent-memory bloat on **all vaults** (2026-05-30). This is how the ~500
|
|
713
|
+
> low-value pages per vault get removed — cancelling these WIs is the one thing that
|
|
714
|
+
> keeps the vaults bloated.
|
|
715
|
+
> - **PROCESS `wiki_legacy_migrate` WIs** normally too; they are now small. (Migration
|
|
716
|
+
> still imports agent `memory.json` entries by design — Steve's call — and cleanup then
|
|
717
|
+
> drains the misfiled ones, so the migrate→cleanup flow is self-correcting.)
|
|
718
|
+
> - Only `[NOTIFY]` Steve (per rule 4 below) if a WI is genuinely unactionable — never
|
|
719
|
+
> blanket silent-cancel.
|
|
720
|
+
|
|
703
721
|
The OSS backend runs a `WikiWorkItemBridge` (and similar future maintenance
|
|
704
722
|
bridges) that automatically materialises routine wiki work as claimable
|
|
705
723
|
WorkItems. These show up in your queue marked with
|
|
@@ -1238,6 +1256,41 @@ You are the gate. The system used to auto-decompose every L2-shaped message into
|
|
|
1238
1256
|
|
|
1239
1257
|
**Rule**: A user message like "Build a login page" should result in 5-8 specific WorkItems (e.g., "Design login UI", "Implement auth API", "Write integration tests", etc.), NOT 3 generic ones. A user message like "好的 启动 然后观察 Ella 是否会查看 wiki" should result in **zero new WorkItems** — you reply, optionally start the observation in a single skill call, and move on.
|
|
1240
1258
|
|
|
1259
|
+
## OKR Cascade — Decompose → Propose → Await-Approval (do NOT auto-activate)
|
|
1260
|
+
|
|
1261
|
+
> Source spec: `specs/okr-cascade.md`. The OKR cascade is the Mission tree —
|
|
1262
|
+
> **company → team → project** via `Mission.parentMissionId`. Distinct from
|
|
1263
|
+
> `decompose-mission` (Mission → executable tasks): `decompose-okr` produces the
|
|
1264
|
+
> **next OKR tier down** (child Missions + Key Results) as a PROPOSAL.
|
|
1265
|
+
|
|
1266
|
+
At the **start of an OKR period**, when an **approved** parent Mission needs the
|
|
1267
|
+
next tier of OKRs, drive (or delegate to the owning team-leader/PM) this flow.
|
|
1268
|
+
**You are the approval gate — never auto-activate a child OKR:**
|
|
1269
|
+
|
|
1270
|
+
1. **DECOMPOSE** — run `decompose-okr` against the approved parent Mission:
|
|
1271
|
+
```bash
|
|
1272
|
+
bash {{AGENT_SKILLS_PATH}}/orchestrator/decompose-okr/execute.sh --mission-id <parent-mission-id>
|
|
1273
|
+
```
|
|
1274
|
+
The runtime drafts child objectives + KRs one tier down (company→team,
|
|
1275
|
+
team→project; `projectId` required on each project-level child).
|
|
1276
|
+
|
|
1277
|
+
2. **PROPOSE** — POST the children to `POST /api/missions/<parent-id>/decompose-okr`.
|
|
1278
|
+
Each child Mission is created `approval.state = 'pending_approval'`, linked via
|
|
1279
|
+
`parentMissionId`, and is **excluded from roll-up and execution** until approved.
|
|
1280
|
+
|
|
1281
|
+
3. **AWAIT APPROVAL** — surface the proposal to the owner (Steve) via the
|
|
1282
|
+
`[APPROVE]` block the skill emits and a `[NOTIFY]` summarising the parent +
|
|
1283
|
+
proposed children. The owner decides:
|
|
1284
|
+
- **Approve** → `POST /api/missions/<childId>/approve` → child goes live.
|
|
1285
|
+
- **Reject** → `POST /api/missions/<childId>/reject` `{"reason":"..."}`
|
|
1286
|
+
(reason REQUIRED) → child excluded; redraft if asked.
|
|
1287
|
+
- **List pending** → `GET /api/missions/<parent-id>/proposals`.
|
|
1288
|
+
|
|
1289
|
+
**Hard rule:** Never set `approval.state` via the mission PUT endpoint, and never
|
|
1290
|
+
let a child OKR roll up or begin execution until its `approval.state` is
|
|
1291
|
+
`approved`. The decompose→propose→await-approval gate is mandatory.
|
|
1292
|
+
|
|
1293
|
+
|
|
1241
1294
|
## IMPORTANT: Session Management
|
|
1242
1295
|
|
|
1243
1296
|
Crewly uses **PTY terminal sessions**, NOT tmux. Do NOT use tmux commands like `tmux list-sessions` or `tmux attach`.
|
|
@@ -73,6 +73,46 @@ Your default mode for **interpretation** of user intent is still clarify, not re
|
|
|
73
73
|
|
|
74
74
|
**Spec-author exception (the recursive-dogfood loophole):** A spec under `.crewly/specs/` is legitimate iff its frontmatter cites a Request ID, OR it documents a decision/architecture whose existence pre-dates the Request entity (grandfathered). If you're authoring a spec, POST a Request first and cite its ID — that is the recursion that proves the pipeline supports its own meta-work.
|
|
75
75
|
|
|
76
|
+
## OKR Cascade — Decompose → Propose → Await-Approval (MANDATORY at OKR-period start)
|
|
77
|
+
|
|
78
|
+
> Source spec: `specs/okr-cascade.md`. The OKR cascade is the Mission tree:
|
|
79
|
+
> **company → team → project** via `Mission.parentMissionId`. A parent OKR is
|
|
80
|
+
> decomposed into child OKRs one tier down.
|
|
81
|
+
|
|
82
|
+
At the **start of an OKR period**, when you (or the orchestrator) hold an
|
|
83
|
+
**approved** parent Mission that needs the next tier of OKRs, drive this flow —
|
|
84
|
+
**never auto-activate child OKRs**:
|
|
85
|
+
|
|
86
|
+
1. **DECOMPOSE** — run the `decompose-okr` skill against the approved parent
|
|
87
|
+
Mission. The runtime drafts child objectives + Key Results one tier down
|
|
88
|
+
(company→team, team→project). projectId is required on every child when the
|
|
89
|
+
child level is `project`.
|
|
90
|
+
```bash
|
|
91
|
+
bash {{AGENT_SKILLS_PATH}}/orchestrator/decompose-okr/execute.sh --mission-id <parent-mission-id>
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
2. **PROPOSE** — POST the drafted children to
|
|
95
|
+
`POST /api/missions/<parent-id>/decompose-okr`. The backend creates each child
|
|
96
|
+
Mission with `approval.state = 'pending_approval'`, linked via
|
|
97
|
+
`parentMissionId`. **Pending children are excluded from roll-up and autonomous
|
|
98
|
+
execution** — they are NOT live yet.
|
|
99
|
+
|
|
100
|
+
3. **AWAIT APPROVAL** — surface the proposal to the human owner (Steve) using the
|
|
101
|
+
`[APPROVE]` block the skill emits (or a `[NOTIFY]` summarising parent +
|
|
102
|
+
proposed children). The owner decides:
|
|
103
|
+
- **Approve** → `POST /api/missions/<childId>/approve` → child becomes
|
|
104
|
+
cascade-active (rolls up, executes).
|
|
105
|
+
- **Reject** → `POST /api/missions/<childId>/reject` with
|
|
106
|
+
`{"reason":"..."}` (reason is REQUIRED) → child is archived/excluded; redraft
|
|
107
|
+
if asked.
|
|
108
|
+
- List what is pending: `GET /api/missions/<parent-id>/proposals`.
|
|
109
|
+
|
|
110
|
+
**Hard rule:** Do NOT set `approval.state` via the mission PUT endpoint, and do
|
|
111
|
+
NOT begin executing or rolling up a child OKR until its `approval.state` is
|
|
112
|
+
`approved`. The decompose→propose→await-approval gate is mandatory; no child OKR
|
|
113
|
+
goes live without the owner's explicit approval.
|
|
114
|
+
|
|
115
|
+
|
|
76
116
|
## Universal Delegator Closure (§3.0 — MANDATORY for every dispatch)
|
|
77
117
|
|
|
78
118
|
> Source spec: `.crewly/specs/2026-05-05-pipeline-dogfood-prompt-amendment.md` §3.0.
|
|
@@ -249,6 +249,39 @@ Loop until done, blocked, or explicitly reassigned:
|
|
|
249
249
|
|
|
250
250
|
Default tier: **Standard Path** (customer-facing or coordination work). Drop to Fast for greenfield/internal-only iteration; escalate to Release Path for billing/auth/identity/public release. See `config/sops/common/dev-process-tiers.md`.
|
|
251
251
|
|
|
252
|
+
## OKR Cascade — Decompose → Propose → Await-Approval (at OKR-period start)
|
|
253
|
+
|
|
254
|
+
> Source spec: `specs/okr-cascade.md`. The OKR cascade is the Mission tree —
|
|
255
|
+
> **company → team → project** via `Mission.parentMissionId`.
|
|
256
|
+
|
|
257
|
+
When the orchestrator hands you an **approved** parent Mission to break into the
|
|
258
|
+
next OKR tier (e.g. a company OKR → your team's OKRs, or your team OKR → project
|
|
259
|
+
OKRs) at the **start of an OKR period**, you draft a PROPOSAL — you do NOT
|
|
260
|
+
activate child OKRs yourself:
|
|
261
|
+
|
|
262
|
+
1. **DECOMPOSE** — run the `decompose-okr` skill against the approved parent:
|
|
263
|
+
```bash
|
|
264
|
+
bash {{AGENT_SKILLS_PATH}}/orchestrator/decompose-okr/execute.sh --mission-id <parent-mission-id>
|
|
265
|
+
```
|
|
266
|
+
The runtime drafts child objectives + Key Results one tier down. When the
|
|
267
|
+
child level is `project`, every child needs a `projectId`.
|
|
268
|
+
|
|
269
|
+
2. **PROPOSE** — POST the drafted children to
|
|
270
|
+
`POST /api/missions/<parent-id>/decompose-okr`. Each child Mission is created
|
|
271
|
+
`approval.state = 'pending_approval'`, linked via `parentMissionId`. Pending
|
|
272
|
+
children are **excluded from roll-up and autonomous execution** until approved.
|
|
273
|
+
|
|
274
|
+
3. **AWAIT APPROVAL** — surface the proposal to the owner (Steve) via the
|
|
275
|
+
`[APPROVE]` block the skill emits (or a `[NOTIFY]` summary). The owner approves
|
|
276
|
+
(`POST /api/missions/<childId>/approve`) or rejects with a required reason
|
|
277
|
+
(`POST /api/missions/<childId>/reject` `{"reason":"..."}`). Check pending items
|
|
278
|
+
with `GET /api/missions/<parent-id>/proposals`.
|
|
279
|
+
|
|
280
|
+
**Hard rule:** Never set `approval.state` via the mission PUT endpoint, and never
|
|
281
|
+
begin staffing/executing or rolling up a child OKR until its `approval.state` is
|
|
282
|
+
`approved`. No child OKR goes live without the owner's explicit approval.
|
|
283
|
+
|
|
284
|
+
|
|
252
285
|
## Decision Rights
|
|
253
286
|
|
|
254
287
|
**Decide autonomously when:**
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Decompose OKR
|
|
3
|
+
description: Decompose a parent Mission (OKR) into child OKRs one cascade tier down (company→team→project) as a PROPOSAL. The runtime drafts the child objectives + Key Results; the skill submits them to the backend as pending_approval. Children are NOT active until the human owner approves. Output includes an [APPROVE] block naming the parent and proposed children for the owner's decision.
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
category: planning
|
|
6
|
+
skillType: claude-skill
|
|
7
|
+
assignableRoles:
|
|
8
|
+
- orchestrator
|
|
9
|
+
- team-leader
|
|
10
|
+
triggers:
|
|
11
|
+
- decompose okr
|
|
12
|
+
- cascade okr
|
|
13
|
+
- propose child okrs
|
|
14
|
+
- break okr into team okrs
|
|
15
|
+
- okr decomposition
|
|
16
|
+
tags:
|
|
17
|
+
- okr
|
|
18
|
+
- cascade
|
|
19
|
+
- mission
|
|
20
|
+
- planning
|
|
21
|
+
- proposal
|
|
22
|
+
- approval
|
|
23
|
+
execution:
|
|
24
|
+
type: script
|
|
25
|
+
script:
|
|
26
|
+
file: execute.sh
|
|
27
|
+
interpreter: bash
|
|
28
|
+
timeoutMs: 60000
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
# Decompose OKR (Cascade)
|
|
32
|
+
|
|
33
|
+
Decomposes a parent Mission's OKR into **child OKRs one cascade tier down** —
|
|
34
|
+
company → team → project. Unlike `decompose-mission` (which breaks a Mission into
|
|
35
|
+
executable tasks/WorkItems), this skill produces **child Missions + Key Results**
|
|
36
|
+
as a **proposal** that the human owner (Steve) must approve before they become
|
|
37
|
+
cascade-active.
|
|
38
|
+
|
|
39
|
+
The agent runtime does the thinking — this skill assembles the parent context and
|
|
40
|
+
collects the structured proposal. It does NOT auto-activate the children: every
|
|
41
|
+
decomposition flows through the approve/reject gate.
|
|
42
|
+
|
|
43
|
+
## When to run
|
|
44
|
+
|
|
45
|
+
At the start of an OKR period, a team-leader / product-manager agent runs this
|
|
46
|
+
against an **approved** parent Mission to draft the next tier of OKRs.
|
|
47
|
+
|
|
48
|
+
## Usage
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
bash config/skills/orchestrator/decompose-okr/execute.sh \
|
|
52
|
+
--mission-id <parent-uuid> \
|
|
53
|
+
[--project-path /path/to/project]
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Parameters
|
|
57
|
+
|
|
58
|
+
| Parameter | Required | Description |
|
|
59
|
+
|-----------|----------|-------------|
|
|
60
|
+
| `--mission-id` | Yes | UUID of the **parent** Mission to decompose (must be approved) |
|
|
61
|
+
| `--project-path` | No | Absolute path to the project root (context only) |
|
|
62
|
+
|
|
63
|
+
## Cascade rule
|
|
64
|
+
|
|
65
|
+
The child level is exactly one tier below the parent:
|
|
66
|
+
|
|
67
|
+
| parent level | child level | `projectId` required on each child |
|
|
68
|
+
|---|---|---|
|
|
69
|
+
| company | team | no |
|
|
70
|
+
| team | project | yes |
|
|
71
|
+
| project | — | (cannot decompose further) |
|
|
72
|
+
|
|
73
|
+
## Output
|
|
74
|
+
|
|
75
|
+
The skill instructs the runtime to output a proposal JSON and POST it to
|
|
76
|
+
`POST /api/missions/:id/decompose-okr`:
|
|
77
|
+
|
|
78
|
+
```json
|
|
79
|
+
{
|
|
80
|
+
"children": [
|
|
81
|
+
{
|
|
82
|
+
"objective": "Child OKR objective for the level below",
|
|
83
|
+
"currentStrategy": "How this child will pursue the objective",
|
|
84
|
+
"successCriteria": ["narrative success criterion"],
|
|
85
|
+
"projectId": "required-only-when-child-is-project-level",
|
|
86
|
+
"keyResults": [
|
|
87
|
+
{
|
|
88
|
+
"title": "Measurable Key Result",
|
|
89
|
+
"metricType": "number",
|
|
90
|
+
"baseline": 0,
|
|
91
|
+
"target": 100,
|
|
92
|
+
"unit": "signups"
|
|
93
|
+
}
|
|
94
|
+
]
|
|
95
|
+
}
|
|
96
|
+
]
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
The backend creates each child Mission with `approval.state = 'pending_approval'`,
|
|
101
|
+
`parentMissionId` = the parent, `level` = parent level + 1, and creates the Key
|
|
102
|
+
Results under each child. Children are excluded from roll-up and autonomous
|
|
103
|
+
execution until approved.
|
|
104
|
+
|
|
105
|
+
The skill then emits an `[APPROVE]` block naming the parent and the proposed
|
|
106
|
+
children so the owner can approve (`POST /api/missions/:childId/approve`) or
|
|
107
|
+
reject with a reason (`POST /api/missions/:childId/reject` `{ "reason": "..." }`).
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Decompose a parent Mission's OKR into child OKRs one cascade tier down,
|
|
3
|
+
# as a PROPOSAL (pending_approval). The runtime does the thinking — this skill
|
|
4
|
+
# provides parent context and collects the structured proposal. Children are
|
|
5
|
+
# NOT active until the human owner approves.
|
|
6
|
+
set -euo pipefail
|
|
7
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
8
|
+
source "${SCRIPT_DIR}/../_common/lib.sh"
|
|
9
|
+
|
|
10
|
+
# --- Input parsing ---
|
|
11
|
+
MISSION_ID=""
|
|
12
|
+
PROJECT_PATH=""
|
|
13
|
+
INPUT_JSON=""
|
|
14
|
+
|
|
15
|
+
if [[ $# -gt 0 && ${1:0:1} == '{' ]]; then
|
|
16
|
+
INPUT_JSON="$1"
|
|
17
|
+
shift || true
|
|
18
|
+
fi
|
|
19
|
+
|
|
20
|
+
while [[ $# -gt 0 ]]; do
|
|
21
|
+
case "$1" in
|
|
22
|
+
--mission-id|-m) MISSION_ID="$2"; shift 2 ;;
|
|
23
|
+
--project-path|-p) PROJECT_PATH="$2"; shift 2 ;;
|
|
24
|
+
--json|-j) INPUT_JSON="$2"; shift 2 ;;
|
|
25
|
+
--help|-h)
|
|
26
|
+
echo "Usage: execute.sh --mission-id <parent-uuid> [--project-path /path]"
|
|
27
|
+
exit 0 ;;
|
|
28
|
+
*) shift ;;
|
|
29
|
+
esac
|
|
30
|
+
done
|
|
31
|
+
|
|
32
|
+
# Legacy JSON fallback
|
|
33
|
+
if [[ -n "$INPUT_JSON" ]]; then
|
|
34
|
+
[[ -z "$MISSION_ID" ]] && MISSION_ID=$(echo "$INPUT_JSON" | jq -r '.missionId // .["mission-id"] // empty' 2>/dev/null || true)
|
|
35
|
+
[[ -z "$PROJECT_PATH" ]] && PROJECT_PATH=$(echo "$INPUT_JSON" | jq -r '.projectPath // .["project-path"] // empty' 2>/dev/null || true)
|
|
36
|
+
fi
|
|
37
|
+
|
|
38
|
+
require_param "mission-id" "$MISSION_ID"
|
|
39
|
+
|
|
40
|
+
# --- Load parent Mission data ---
|
|
41
|
+
MISSION_DATA=$(api_call GET "/missions/${MISSION_ID}" 2>/dev/null) || {
|
|
42
|
+
echo '{"success":false,"error":"Failed to load mission"}' >&2
|
|
43
|
+
exit 1
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
MISSION=$(echo "$MISSION_DATA" | jq -r '.data // empty')
|
|
47
|
+
if [[ -z "$MISSION" || "$MISSION" == "null" ]]; then
|
|
48
|
+
echo '{"success":false,"error":"Mission not found"}' >&2
|
|
49
|
+
exit 1
|
|
50
|
+
fi
|
|
51
|
+
|
|
52
|
+
OBJECTIVE=$(echo "$MISSION" | jq -r '.objective // "No objective"')
|
|
53
|
+
CRITERIA=$(echo "$MISSION" | jq -r '.successCriteria // [] | join("; ")')
|
|
54
|
+
STRATEGY=$(echo "$MISSION" | jq -r '.currentStrategy // "No strategy set"')
|
|
55
|
+
PARENT_LEVEL=$(echo "$MISSION" | jq -r '.level // "team"')
|
|
56
|
+
APPROVAL_STATE=$(echo "$MISSION" | jq -r '.approval.state // "approved"')
|
|
57
|
+
|
|
58
|
+
# --- Guard: parent must be approved/active to decompose ---
|
|
59
|
+
if [[ "$APPROVAL_STATE" != "approved" ]]; then
|
|
60
|
+
echo '{"success":false,"error":"Parent mission is not approved; only approved missions can be decomposed (state: '"${APPROVAL_STATE}"')"}' >&2
|
|
61
|
+
exit 1
|
|
62
|
+
fi
|
|
63
|
+
|
|
64
|
+
# --- Determine the child level (one tier down) ---
|
|
65
|
+
CHILD_LEVEL=""
|
|
66
|
+
PROJECT_ID_HINT="(not required at this tier)"
|
|
67
|
+
case "$PARENT_LEVEL" in
|
|
68
|
+
company) CHILD_LEVEL="team" ;;
|
|
69
|
+
team) CHILD_LEVEL="project"; PROJECT_ID_HINT="REQUIRED — each child must set \"projectId\"" ;;
|
|
70
|
+
project)
|
|
71
|
+
echo '{"success":false,"error":"A project-level mission is the bottom of the cascade and cannot be decomposed further"}' >&2
|
|
72
|
+
exit 1 ;;
|
|
73
|
+
*) CHILD_LEVEL="team" ;;
|
|
74
|
+
esac
|
|
75
|
+
|
|
76
|
+
# --- Output decomposition context for the runtime ---
|
|
77
|
+
cat << DECOMPOSE_PROMPT
|
|
78
|
+
|
|
79
|
+
## OKR Cascade Decomposition Request
|
|
80
|
+
|
|
81
|
+
You are drafting **${CHILD_LEVEL}-level** child OKRs that decompose the parent
|
|
82
|
+
**${PARENT_LEVEL}-level** OKR below. This is a PROPOSAL — the children are NOT
|
|
83
|
+
active until the human owner (Steve) approves them.
|
|
84
|
+
|
|
85
|
+
### Parent OKR (${PARENT_LEVEL})
|
|
86
|
+
**Objective:** ${OBJECTIVE}
|
|
87
|
+
**Success Criteria:** ${CRITERIA}
|
|
88
|
+
**Current Strategy:** ${STRATEGY}
|
|
89
|
+
|
|
90
|
+
### Your task
|
|
91
|
+
Produce child OKRs at level **${CHILD_LEVEL}**. Each child must:
|
|
92
|
+
- have a clear objective that supports the parent objective
|
|
93
|
+
- have a currentStrategy describing how it will be pursued
|
|
94
|
+
- have 1-4 measurable Key Results (title, metricType, baseline, target, unit)
|
|
95
|
+
- projectId: ${PROJECT_ID_HINT}
|
|
96
|
+
|
|
97
|
+
Output a valid JSON object matching this schema:
|
|
98
|
+
\`\`\`json
|
|
99
|
+
{
|
|
100
|
+
"children": [
|
|
101
|
+
{
|
|
102
|
+
"objective": "Child OKR objective",
|
|
103
|
+
"currentStrategy": "How this child will pursue the objective",
|
|
104
|
+
"successCriteria": ["narrative criterion"],
|
|
105
|
+
"projectId": "set-only-when-child-level-is-project",
|
|
106
|
+
"keyResults": [
|
|
107
|
+
{
|
|
108
|
+
"title": "Measurable Key Result",
|
|
109
|
+
"metricType": "number",
|
|
110
|
+
"baseline": 0,
|
|
111
|
+
"target": 100,
|
|
112
|
+
"unit": "signups"
|
|
113
|
+
}
|
|
114
|
+
]
|
|
115
|
+
}
|
|
116
|
+
]
|
|
117
|
+
}
|
|
118
|
+
\`\`\`
|
|
119
|
+
|
|
120
|
+
After generating the JSON, submit the proposal (children are created as
|
|
121
|
+
\`pending_approval\`):
|
|
122
|
+
\`\`\`bash
|
|
123
|
+
curl -s -X POST "${CREWLY_API_URL}/api/missions/${MISSION_ID}/decompose-okr" \\
|
|
124
|
+
-H "Content-Type: application/json" \\
|
|
125
|
+
-H "X-Agent-Session: \${CREWLY_SESSION_NAME:-}" \\
|
|
126
|
+
-d '<YOUR_JSON_OUTPUT>'
|
|
127
|
+
\`\`\`
|
|
128
|
+
|
|
129
|
+
The response returns \`childMissionIds\`. Then surface the proposal to the owner
|
|
130
|
+
for a decision using the [APPROVE] block below.
|
|
131
|
+
|
|
132
|
+
[APPROVE]
|
|
133
|
+
parent: ${MISSION_ID} (${PARENT_LEVEL}) — ${OBJECTIVE}
|
|
134
|
+
proposed: ${CHILD_LEVEL}-level child OKRs are PENDING your approval.
|
|
135
|
+
approve: POST ${CREWLY_API_URL}/api/missions/<childMissionId>/approve
|
|
136
|
+
reject: POST ${CREWLY_API_URL}/api/missions/<childMissionId>/reject body: {"reason":"why"}
|
|
137
|
+
list: GET ${CREWLY_API_URL}/api/missions/${MISSION_ID}/proposals
|
|
138
|
+
[/APPROVE]
|
|
139
|
+
|
|
140
|
+
DECOMPOSE_PROMPT
|
|
141
|
+
|
|
142
|
+
echo '{"success":true,"message":"OKR decomposition context provided to runtime","missionId":"'"${MISSION_ID}"'","parentLevel":"'"${PARENT_LEVEL}"'","childLevel":"'"${CHILD_LEVEL}"'"}'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 2,
|
|
3
|
-
"lastUpdated": "2026-
|
|
3
|
+
"lastUpdated": "2026-05-30T00:00:00.000Z",
|
|
4
4
|
"cdnBaseUrl": "https://raw.githubusercontent.com/stevehuang0115/crewly/main",
|
|
5
5
|
"source": "github",
|
|
6
6
|
"items": [
|
|
@@ -498,7 +498,7 @@
|
|
|
498
498
|
"id": "gmail",
|
|
499
499
|
"type": "skill",
|
|
500
500
|
"name": "Gmail Suite",
|
|
501
|
-
"description": "Multi-action Gmail skill for agents
|
|
501
|
+
"description": "Multi-action Gmail skill for agents \u2014 list/read/search/send messages, manage labels (add/remove/list), and toggle read/unread. Requires a google-oauth credential bound to the 'gmail' slot with gmail.modify scope.",
|
|
502
502
|
"author": "Crewly Team",
|
|
503
503
|
"version": "1.1.0",
|
|
504
504
|
"category": "communication",
|
|
@@ -784,8 +784,8 @@
|
|
|
784
784
|
{
|
|
785
785
|
"id": "rednote-reader",
|
|
786
786
|
"type": "skill",
|
|
787
|
-
"name": "RedNote (
|
|
788
|
-
"description": "Read content from the
|
|
787
|
+
"name": "RedNote (\u5c0f\u7ea2\u4e66) Reader",
|
|
788
|
+
"description": "Read content from the \u5c0f\u7ea2\u4e66 (RedNote) macOS iPad app via Accessibility API. Extracts feed posts, titles, authors, like counts, and navigation structure without screenshots.",
|
|
789
789
|
"author": "Crewly Team",
|
|
790
790
|
"version": "1.0.0",
|
|
791
791
|
"category": "automation",
|
|
@@ -816,7 +816,7 @@
|
|
|
816
816
|
],
|
|
817
817
|
"triggers": [
|
|
818
818
|
"rednote",
|
|
819
|
-
"
|
|
819
|
+
"\u5c0f\u7ea2\u4e66",
|
|
820
820
|
"xiaohongshu",
|
|
821
821
|
"red note",
|
|
822
822
|
"discover app",
|
|
@@ -966,7 +966,7 @@
|
|
|
966
966
|
"id": "browse-stealth",
|
|
967
967
|
"type": "skill",
|
|
968
968
|
"name": "Stealth Browser (Patchright + CDP)",
|
|
969
|
-
"description": "Anti-detection browser automation using Patchright (Playwright fork) connected to a real Chrome instance via CDP. Bypasses navigator.webdriver checks, fingerprint anomalies, and headless detection used by platforms like
|
|
969
|
+
"description": "Anti-detection browser automation using Patchright (Playwright fork) connected to a real Chrome instance via CDP. Bypasses navigator.webdriver checks, fingerprint anomalies, and headless detection used by platforms like \u5c0f\u7ea2\u4e66, X/Twitter, and LinkedIn.",
|
|
970
970
|
"author": "Crewly Team",
|
|
971
971
|
"version": "1.0.0",
|
|
972
972
|
"category": "automation",
|
|
@@ -1162,6 +1162,52 @@
|
|
|
1162
1162
|
"check tests"
|
|
1163
1163
|
]
|
|
1164
1164
|
}
|
|
1165
|
+
},
|
|
1166
|
+
{
|
|
1167
|
+
"id": "decompose-okr",
|
|
1168
|
+
"type": "skill",
|
|
1169
|
+
"name": "Decompose OKR",
|
|
1170
|
+
"description": "Decompose a parent Mission (OKR) into child OKRs one cascade tier down (company\u2192team\u2192project) as a proposal. Children are created as pending_approval and are NOT active until the human owner approves. Emits an [APPROVE] block for the owner's decision.",
|
|
1171
|
+
"author": "Crewly Team",
|
|
1172
|
+
"version": "1.0.0",
|
|
1173
|
+
"category": "planning",
|
|
1174
|
+
"tags": [
|
|
1175
|
+
"okr",
|
|
1176
|
+
"cascade",
|
|
1177
|
+
"mission",
|
|
1178
|
+
"planning",
|
|
1179
|
+
"proposal",
|
|
1180
|
+
"approval"
|
|
1181
|
+
],
|
|
1182
|
+
"license": "MIT",
|
|
1183
|
+
"downloads": 0,
|
|
1184
|
+
"rating": 0,
|
|
1185
|
+
"createdAt": "2026-05-30T00:00:00.000Z",
|
|
1186
|
+
"updatedAt": "2026-05-30T00:00:00.000Z",
|
|
1187
|
+
"source": "config/skills/orchestrator/decompose-okr",
|
|
1188
|
+
"assets": {
|
|
1189
|
+
"archive": "config/skills/orchestrator/decompose-okr",
|
|
1190
|
+
"checksum": "",
|
|
1191
|
+
"sizeBytes": 6000
|
|
1192
|
+
},
|
|
1193
|
+
"metadata": {
|
|
1194
|
+
"skillType": "claude-skill",
|
|
1195
|
+
"assignableRoles": [
|
|
1196
|
+
"orchestrator",
|
|
1197
|
+
"team-leader"
|
|
1198
|
+
],
|
|
1199
|
+
"triggers": [
|
|
1200
|
+
"decompose okr",
|
|
1201
|
+
"cascade okr",
|
|
1202
|
+
"propose child okrs",
|
|
1203
|
+
"break okr into team okrs",
|
|
1204
|
+
"okr decomposition"
|
|
1205
|
+
],
|
|
1206
|
+
"files": [
|
|
1207
|
+
"SKILL.md",
|
|
1208
|
+
"execute.sh"
|
|
1209
|
+
]
|
|
1210
|
+
}
|
|
1165
1211
|
}
|
|
1166
1212
|
]
|
|
1167
1213
|
}
|
|
@@ -37,4 +37,12 @@ export declare function measureKR(req: Request, res: Response, next: NextFunctio
|
|
|
37
37
|
* GET /api/missions/:id/okr-summary — Aggregated OKR progress.
|
|
38
38
|
*/
|
|
39
39
|
export declare function getOKRSummary(req: Request, res: Response, next: NextFunction): Promise<void>;
|
|
40
|
+
/**
|
|
41
|
+
* GET /api/missions/:id/okr-summary/cascade — Cross-level cascade roll-up.
|
|
42
|
+
*
|
|
43
|
+
* Walks the `parentMissionId` tree so the mission's progress aggregates its
|
|
44
|
+
* approved children's roll-up (company → team → project). Returns a recursive
|
|
45
|
+
* {@link CascadeOKRSummary}.
|
|
46
|
+
*/
|
|
47
|
+
export declare function getCascadeOKRSummary(req: Request, res: Response, next: NextFunction): Promise<void>;
|
|
40
48
|
//# sourceMappingURL=kr.controller.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kr.controller.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/controllers/mission/kr.controller.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAI/D;;GAEG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAMnG;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAY7F;AAED;;GAEG;AACH,wBAAsB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAU1F;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAU7F;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAU7F;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAqB9F;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAMlG"}
|
|
1
|
+
{"version":3,"file":"kr.controller.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/controllers/mission/kr.controller.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAI/D;;GAEG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAMnG;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAY7F;AAED;;GAEG;AACH,wBAAsB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAU1F;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAU7F;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAU7F;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAqB9F;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAMlG;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAMzG"}
|
|
@@ -128,4 +128,21 @@ export async function getOKRSummary(req, res, next) {
|
|
|
128
128
|
next(err);
|
|
129
129
|
}
|
|
130
130
|
}
|
|
131
|
+
/**
|
|
132
|
+
* GET /api/missions/:id/okr-summary/cascade — Cross-level cascade roll-up.
|
|
133
|
+
*
|
|
134
|
+
* Walks the `parentMissionId` tree so the mission's progress aggregates its
|
|
135
|
+
* approved children's roll-up (company → team → project). Returns a recursive
|
|
136
|
+
* {@link CascadeOKRSummary}.
|
|
137
|
+
*/
|
|
138
|
+
export async function getCascadeOKRSummary(req, res, next) {
|
|
139
|
+
try {
|
|
140
|
+
const service = KRTrackingService.getInstance();
|
|
141
|
+
const summary = await service.computeCascadeOKRProgress(req.params.id);
|
|
142
|
+
res.json({ success: true, data: summary });
|
|
143
|
+
}
|
|
144
|
+
catch (err) {
|
|
145
|
+
next(err);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
131
148
|
//# sourceMappingURL=kr.controller.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kr.controller.js","sourceRoot":"","sources":["../../../../../../backend/src/controllers/mission/kr.controller.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"kr.controller.js","sourceRoot":"","sources":["../../../../../../backend/src/controllers/mission/kr.controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mission-policy.routes.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/controllers/mission/mission-policy.routes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,EAAkD,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"mission-policy.routes.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/controllers/mission/mission-policy.routes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,EAAkD,MAAM,SAAS,CAAC;AAmZjF;;;;GAIG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,CAsJlD"}
|