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.
Files changed (45) hide show
  1. package/config/roles/orchestrator/prompt.md +53 -0
  2. package/config/roles/product-manager/prompt.md +40 -0
  3. package/config/roles/team-leader/prompt.md +33 -0
  4. package/config/skills/orchestrator/decompose-okr/SKILL.md +107 -0
  5. package/config/skills/orchestrator/decompose-okr/execute.sh +142 -0
  6. package/config/skills/registry.json +52 -6
  7. package/dist/backend/backend/src/controllers/mission/kr.controller.d.ts +8 -0
  8. package/dist/backend/backend/src/controllers/mission/kr.controller.d.ts.map +1 -1
  9. package/dist/backend/backend/src/controllers/mission/kr.controller.js +17 -0
  10. package/dist/backend/backend/src/controllers/mission/kr.controller.js.map +1 -1
  11. package/dist/backend/backend/src/controllers/mission/mission-policy.routes.d.ts.map +1 -1
  12. package/dist/backend/backend/src/controllers/mission/mission-policy.routes.js +198 -26
  13. package/dist/backend/backend/src/controllers/mission/mission-policy.routes.js.map +1 -1
  14. package/dist/backend/backend/src/services/v3/kr-tracking.service.d.ts +92 -1
  15. package/dist/backend/backend/src/services/v3/kr-tracking.service.d.ts.map +1 -1
  16. package/dist/backend/backend/src/services/v3/kr-tracking.service.js +169 -1
  17. package/dist/backend/backend/src/services/v3/kr-tracking.service.js.map +1 -1
  18. package/dist/backend/backend/src/services/v3/mission-period.service.d.ts.map +1 -1
  19. package/dist/backend/backend/src/services/v3/mission-period.service.js +7 -1
  20. package/dist/backend/backend/src/services/v3/mission-period.service.js.map +1 -1
  21. package/dist/backend/backend/src/services/v3/okr-cascade.service.d.ts +217 -0
  22. package/dist/backend/backend/src/services/v3/okr-cascade.service.d.ts.map +1 -0
  23. package/dist/backend/backend/src/services/v3/okr-cascade.service.js +417 -0
  24. package/dist/backend/backend/src/services/v3/okr-cascade.service.js.map +1 -0
  25. package/dist/backend/backend/src/services/v3/okr-review.service.d.ts +11 -0
  26. package/dist/backend/backend/src/services/v3/okr-review.service.d.ts.map +1 -1
  27. package/dist/backend/backend/src/services/v3/okr-review.service.js +50 -0
  28. package/dist/backend/backend/src/services/v3/okr-review.service.js.map +1 -1
  29. package/dist/backend/backend/src/services/wiki/wiki-migrate.service.d.ts +91 -0
  30. package/dist/backend/backend/src/services/wiki/wiki-migrate.service.d.ts.map +1 -1
  31. package/dist/backend/backend/src/services/wiki/wiki-migrate.service.js +180 -0
  32. package/dist/backend/backend/src/services/wiki/wiki-migrate.service.js.map +1 -1
  33. package/dist/backend/backend/src/types/v2/index.d.ts +4 -4
  34. package/dist/backend/backend/src/types/v2/index.d.ts.map +1 -1
  35. package/dist/backend/backend/src/types/v2/index.js +2 -2
  36. package/dist/backend/backend/src/types/v2/index.js.map +1 -1
  37. package/dist/backend/backend/src/types/v2/key-result.types.d.ts +84 -0
  38. package/dist/backend/backend/src/types/v2/key-result.types.d.ts.map +1 -1
  39. package/dist/backend/backend/src/types/v2/key-result.types.js +73 -3
  40. package/dist/backend/backend/src/types/v2/key-result.types.js.map +1 -1
  41. package/dist/backend/backend/src/types/v2/mission.types.d.ts +235 -0
  42. package/dist/backend/backend/src/types/v2/mission.types.d.ts.map +1 -1
  43. package/dist/backend/backend/src/types/v2/mission.types.js +230 -0
  44. package/dist/backend/backend/src/types/v2/mission.types.js.map +1 -1
  45. 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-04-25T00:15:10.000Z",
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 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.",
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 (小红书) Reader",
788
- "description": "Read content from the 小红书 (RedNote) macOS iPad app via Accessibility API. Extracts feed posts, titles, authors, like counts, and navigation structure without screenshots.",
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 小红书, X/Twitter, and LinkedIn.",
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;AAiOjF;;;;GAIG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,CAqIlD"}
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"}