crewly 1.20.214 → 1.20.216
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/hooks/agent-status/report.sh +45 -6
- package/config/roles/team-leader/fragments/role-boundary.md +2 -1
- package/config/roles/team-leader/prompt.md +9 -5
- package/config/roles/team-leader/role-boundaries.md +3 -2
- package/config/roles/team-leader/tl-addon.md +9 -5
- package/config/skills/agent/core/ask-owner/SKILL.md +9 -2
- package/config/skills/agent/core/ask-owner/execute.sh +1 -1
- package/config/skills/agent/core/project-tickets/SKILL.md +44 -12
- package/config/skills/agent/core/project-tickets/execute.sh +46 -13
- package/config/skills/agent/core/project-tickets/execute.test.sh +19 -0
- package/config/skills/team-leader/delegate-task/SKILL.md +40 -0
- package/config/skills/team-leader/delegate-task/execute.sh +39 -1
- package/dist/backend/backend/src/constants.d.ts +101 -10
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +119 -9
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.d.ts +2 -1
- package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.js +26 -3
- package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.d.ts +10 -2
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.js +17 -2
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.d.ts +2 -1
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.js +4 -2
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js +32 -0
- package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/team/team-lead-share.controller.d.ts +27 -0
- package/dist/backend/backend/src/controllers/team/team-lead-share.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/team/team-lead-share.controller.js +92 -0
- package/dist/backend/backend/src/controllers/team/team-lead-share.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/team/team.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.routes.js +4 -0
- package/dist/backend/backend/src/controllers/team/team.routes.js.map +1 -1
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +16 -0
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js +6 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
- package/dist/backend/backend/src/services/decisions/decision-contract.d.ts +25 -1
- package/dist/backend/backend/src/services/decisions/decision-contract.d.ts.map +1 -1
- package/dist/backend/backend/src/services/decisions/decision-contract.js +39 -2
- package/dist/backend/backend/src/services/decisions/decision-contract.js.map +1 -1
- package/dist/backend/backend/src/services/decisions/decision.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/decisions/decision.service.js +17 -1
- package/dist/backend/backend/src/services/decisions/decision.service.js.map +1 -1
- package/dist/backend/backend/src/services/open-items/open-item-card.d.ts +26 -0
- package/dist/backend/backend/src/services/open-items/open-item-card.d.ts.map +1 -1
- package/dist/backend/backend/src/services/open-items/open-item-card.js +71 -1
- package/dist/backend/backend/src/services/open-items/open-item-card.js.map +1 -1
- package/dist/backend/backend/src/services/open-items/open-items.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/open-items/open-items.service.js +6 -3
- package/dist/backend/backend/src/services/open-items/open-items.service.js.map +1 -1
- package/dist/backend/backend/src/services/orc/reply-destination.wiring.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orc/reply-destination.wiring.js +46 -1
- package/dist/backend/backend/src/services/orc/reply-destination.wiring.js.map +1 -1
- package/dist/backend/backend/src/services/orc/work-item-destination.d.ts +35 -0
- package/dist/backend/backend/src/services/orc/work-item-destination.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orc/work-item-destination.js +75 -2
- package/dist/backend/backend/src/services/orc/work-item-destination.js.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/autopilot-speed-command.d.ts +108 -0
- package/dist/backend/backend/src/services/project-tickets/autopilot-speed-command.d.ts.map +1 -0
- package/dist/backend/backend/src/services/project-tickets/autopilot-speed-command.js +223 -0
- package/dist/backend/backend/src/services/project-tickets/autopilot-speed-command.js.map +1 -0
- package/dist/backend/backend/src/services/project-tickets/autopilot-speed.wiring.d.ts +57 -0
- package/dist/backend/backend/src/services/project-tickets/autopilot-speed.wiring.d.ts.map +1 -0
- package/dist/backend/backend/src/services/project-tickets/autopilot-speed.wiring.js +90 -0
- package/dist/backend/backend/src/services/project-tickets/autopilot-speed.wiring.js.map +1 -0
- package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.d.ts +18 -4
- package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.js +18 -4
- package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.js.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.d.ts +135 -14
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.d.ts.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.js +111 -18
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.js.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-messages.d.ts +73 -4
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-messages.d.ts.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-messages.js +86 -7
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-messages.js.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-trace.d.ts +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-trace.d.ts.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-trace.js +7 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-trace.js.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.d.ts +104 -4
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.js +424 -12
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-agent-dm.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-agent-dm.service.js +2 -1
- package/dist/backend/backend/src/services/slack/slack-agent-dm.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-initializer.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-initializer.js +10 -0
- package/dist/backend/backend/src/services/slack/slack-initializer.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts +7 -0
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.js +25 -2
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
- package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +23 -0
- package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/task-pool/task-pool.service.js +74 -2
- package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
- package/dist/backend/backend/src/services/tl-delegation/lead-share.d.ts +108 -0
- package/dist/backend/backend/src/services/tl-delegation/lead-share.d.ts.map +1 -0
- package/dist/backend/backend/src/services/tl-delegation/lead-share.js +170 -0
- package/dist/backend/backend/src/services/tl-delegation/lead-share.js.map +1 -0
- package/dist/backend/backend/src/services/tl-delegation/lead-share.wiring.d.ts +32 -0
- package/dist/backend/backend/src/services/tl-delegation/lead-share.wiring.d.ts.map +1 -0
- package/dist/backend/backend/src/services/tl-delegation/lead-share.wiring.js +47 -0
- package/dist/backend/backend/src/services/tl-delegation/lead-share.wiring.js.map +1 -0
- package/dist/backend/backend/src/services/tl-delegation/tl-delegation.service.d.ts +207 -0
- package/dist/backend/backend/src/services/tl-delegation/tl-delegation.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/tl-delegation/tl-delegation.service.js +377 -0
- package/dist/backend/backend/src/services/tl-delegation/tl-delegation.service.js.map +1 -0
- package/dist/backend/backend/src/types/decision.types.d.ts +6 -1
- package/dist/backend/backend/src/types/decision.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/decision.types.js +1 -1
- package/dist/backend/backend/src/types/ticket-autopilot.types.d.ts +46 -4
- package/dist/backend/backend/src/types/ticket-autopilot.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/ticket-autopilot.types.js +43 -2
- package/dist/backend/backend/src/types/ticket-autopilot.types.js.map +1 -1
- package/dist/backend/backend/src/types/v2/work-item.types.d.ts +1 -1
- package/dist/backend/backend/src/types/v2/work-item.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/work-item.types.js +1 -0
- package/dist/backend/backend/src/types/v2/work-item.types.js.map +1 -1
- package/dist/backend/backend/src/utils/defaultPrompts.js +3 -3
- package/dist/backend/backend/src/utils/defaultPrompts.js.map +1 -1
- package/dist/backend/build-info.json +2 -2
- package/dist/cli/backend/src/constants.d.ts +101 -10
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +119 -9
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js +6 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
- package/dist/cli/backend/src/services/decisions/decision-contract.d.ts +25 -1
- package/dist/cli/backend/src/services/decisions/decision-contract.d.ts.map +1 -1
- package/dist/cli/backend/src/services/decisions/decision-contract.js +39 -2
- package/dist/cli/backend/src/services/decisions/decision-contract.js.map +1 -1
- package/dist/cli/backend/src/services/decisions/decision.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/decisions/decision.service.js +17 -1
- package/dist/cli/backend/src/services/decisions/decision.service.js.map +1 -1
- package/dist/cli/backend/src/services/open-items/open-item-card.d.ts +26 -0
- package/dist/cli/backend/src/services/open-items/open-item-card.d.ts.map +1 -1
- package/dist/cli/backend/src/services/open-items/open-item-card.js +71 -1
- package/dist/cli/backend/src/services/open-items/open-item-card.js.map +1 -1
- package/dist/cli/backend/src/services/open-items/open-items.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/open-items/open-items.service.js +6 -3
- package/dist/cli/backend/src/services/open-items/open-items.service.js.map +1 -1
- package/dist/cli/backend/src/services/orc/work-item-destination.d.ts +35 -0
- package/dist/cli/backend/src/services/orc/work-item-destination.d.ts.map +1 -1
- package/dist/cli/backend/src/services/orc/work-item-destination.js +75 -2
- package/dist/cli/backend/src/services/orc/work-item-destination.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-agent-dm.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-agent-dm.service.js +2 -1
- package/dist/cli/backend/src/services/slack/slack-agent-dm.service.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts +7 -0
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.js +25 -2
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
- package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts +23 -0
- package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/task-pool/task-pool.service.js +74 -2
- package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
- package/dist/cli/backend/src/types/decision.types.d.ts +6 -1
- package/dist/cli/backend/src/types/decision.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/decision.types.js +1 -1
- package/dist/cli/backend/src/types/ticket-autopilot.types.d.ts +46 -4
- package/dist/cli/backend/src/types/ticket-autopilot.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/ticket-autopilot.types.js +43 -2
- package/dist/cli/backend/src/types/ticket-autopilot.types.js.map +1 -1
- package/dist/cli/backend/src/types/v2/work-item.types.d.ts +1 -1
- package/dist/cli/backend/src/types/v2/work-item.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/v2/work-item.types.js +1 -0
- package/dist/cli/backend/src/types/v2/work-item.types.js.map +1 -1
- package/frontend/dist/assets/{index-917db1b8.js → index-bc4e2a93.js} +274 -274
- package/frontend/dist/index.html +1 -1
- package/package.json +1 -1
|
@@ -123,9 +123,11 @@ export const TICKET_AUTOPILOT_CONSTANTS = {
|
|
|
123
123
|
/** WorkItem type / `metadata.kind` of the goal replan the driver receives when nothing is left to triage */
|
|
124
124
|
REPLAN_WORK_ITEM_TYPE: 'goal_replan',
|
|
125
125
|
REPLAN_METADATA_KIND: 'goal_replan',
|
|
126
|
-
/**
|
|
127
|
-
|
|
128
|
-
|
|
126
|
+
/**
|
|
127
|
+
* Largest explicit `replansPerDay` (0 = off). Absent, the speed mode's
|
|
128
|
+
* daily cap applies ({@link TICKET_AUTOPILOT_CONSTANTS.SPEED_MODES}).
|
|
129
|
+
*/
|
|
130
|
+
REPLANS_PER_DAY_LIMIT: 12,
|
|
129
131
|
/** Tickets closed (done / cancelled) this many days back are listed in the replan brief */
|
|
130
132
|
REPLAN_CLOSED_LOOKBACK_DAYS: 7,
|
|
131
133
|
/** Most closed tickets listed in the replan brief */
|
|
@@ -145,14 +147,79 @@ export const TICKET_AUTOPILOT_CONSTANTS = {
|
|
|
145
147
|
REPLAN_TTL_HOURS_LIMIT: 48,
|
|
146
148
|
/** A live replan older than this stops holding triage once there are tickets to triage (ms) */
|
|
147
149
|
REPLAN_YIELD_AFTER_MS: 60 * 60 * 1000,
|
|
148
|
-
|
|
149
|
-
* After a replan that opened no tickets
|
|
150
|
-
*
|
|
150
|
+
/*
|
|
151
|
+
* After a replan that opened no tickets the next one waits for the speed
|
|
152
|
+
* mode's `emptyReplanRetry` (1 h / next day / next week). Reset by a new
|
|
153
|
+
* goal / OKR or a new ticket.
|
|
151
154
|
*/
|
|
152
|
-
REPLAN_BACKOFF_FIRST_DAYS: 2,
|
|
153
|
-
REPLAN_BACKOFF_MAX_DAYS: 7,
|
|
154
155
|
/** Goals-log entries older than this are not an active goal (days); OKRs keep their own status */
|
|
155
156
|
REPLAN_GOAL_ACTIVE_DAYS: 30,
|
|
157
|
+
// --- Speed modes (specs/2026-10-04-autopilot-speed-modes.md) ---
|
|
158
|
+
/** Speed modes, slowest last */
|
|
159
|
+
SPEED_MODE_NAMES: ['rush', 'normal', 'chill'],
|
|
160
|
+
/** Mode of a project that never set one (every project before speed modes) */
|
|
161
|
+
DEFAULT_SPEED_MODE: 'normal',
|
|
162
|
+
/**
|
|
163
|
+
* What each mode supplies. Explicit settings win: `dailyBudgetTokens`
|
|
164
|
+
* (and boosts) over the mode's budget, `replansPerDay` over its daily cap.
|
|
165
|
+
*
|
|
166
|
+
* - `replanMinGapMs` — a replan never starts sooner than this after the last one
|
|
167
|
+
* - `replansPerDayCap` — hard cap per local day (the safety brake)
|
|
168
|
+
* - `selfReviewEveryMs` — cadence of the driver's self-review
|
|
169
|
+
* - `emptyReplanRetry` — after a replan that opened no tickets: retry this
|
|
170
|
+
* many hours later, or on the local day this many days after the replan's day
|
|
171
|
+
* - `dailyBudgetTokens` — the budget when the project sets none
|
|
172
|
+
*/
|
|
173
|
+
SPEED_MODES: {
|
|
174
|
+
rush: {
|
|
175
|
+
replanMinGapMs: 60 * 60 * 1000,
|
|
176
|
+
replansPerDayCap: 12,
|
|
177
|
+
selfReviewEveryMs: 60 * 60 * 1000,
|
|
178
|
+
emptyReplanRetry: { unit: 'hours', amount: 1 },
|
|
179
|
+
dailyBudgetTokens: 50_000_000,
|
|
180
|
+
},
|
|
181
|
+
normal: {
|
|
182
|
+
replanMinGapMs: 3 * 60 * 60 * 1000,
|
|
183
|
+
replansPerDayCap: 4,
|
|
184
|
+
selfReviewEveryMs: 24 * 60 * 60 * 1000,
|
|
185
|
+
emptyReplanRetry: { unit: 'days', amount: 1 },
|
|
186
|
+
dailyBudgetTokens: 20_000_000,
|
|
187
|
+
},
|
|
188
|
+
chill: {
|
|
189
|
+
replanMinGapMs: 0,
|
|
190
|
+
replansPerDayCap: 1,
|
|
191
|
+
selfReviewEveryMs: 7 * 24 * 60 * 60 * 1000,
|
|
192
|
+
emptyReplanRetry: { unit: 'days', amount: 7 },
|
|
193
|
+
dailyBudgetTokens: 8_000_000,
|
|
194
|
+
},
|
|
195
|
+
},
|
|
196
|
+
/** WorkItem type / `metadata.kind` of the driver's self-review */
|
|
197
|
+
SELF_REVIEW_WORK_ITEM_TYPE: 'autopilot_self_review',
|
|
198
|
+
SELF_REVIEW_METADATA_KIND: 'autopilot_self_review',
|
|
199
|
+
/** A self-review still live after this long no longer holds the next one (a queued one is cancelled) */
|
|
200
|
+
SELF_REVIEW_LIVE_MAX_MS: 2 * 60 * 60 * 1000,
|
|
201
|
+
/** Longest self-review field accepted (chars) */
|
|
202
|
+
SELF_REVIEW_FIELD_MAX_CHARS: 600,
|
|
203
|
+
/** Self-reviews kept per project (newest last) */
|
|
204
|
+
SELF_REVIEW_HISTORY: 10,
|
|
205
|
+
/** Most characters of the goal quoted in the self-review brief */
|
|
206
|
+
SELF_REVIEW_GOAL_MAX_CHARS: 800,
|
|
207
|
+
/** A self-review older than this is not shown in the evening digest */
|
|
208
|
+
SELF_REVIEW_DIGEST_MAX_AGE_MS: 24 * 60 * 60 * 1000,
|
|
209
|
+
/** Stop reasons (why the autopilot is not producing work), most decisive first */
|
|
210
|
+
STOP_REASONS: ['paused', 'budget_reached', 'system_error', 'waiting_on_owner', 'no_ideas'],
|
|
211
|
+
/** Failed project WorkItems this recent count as a system error (ms) */
|
|
212
|
+
STOP_SYSTEM_ERROR_LOOKBACK_MS: 6 * 60 * 60 * 1000,
|
|
213
|
+
/** An autopilot WorkItem still queued this long is stuck delivery (a system error, ms) */
|
|
214
|
+
STOP_STUCK_DELIVERY_MS: 60 * 60 * 1000,
|
|
215
|
+
/** The metric line of a replan ticket (`Metric: <goal metric> → <expected effect>`) */
|
|
216
|
+
METRIC_LINE_PREFIX: 'Metric: ',
|
|
217
|
+
/** Shortest metric reference accepted (chars) */
|
|
218
|
+
METRIC_MIN_CHARS: 5,
|
|
219
|
+
/** Longest metric reference accepted (chars) */
|
|
220
|
+
METRIC_MAX_CHARS: 300,
|
|
221
|
+
/** How often the owner's speed DM command re-reads the project names (ms) */
|
|
222
|
+
SPEED_PROJECT_CACHE_REFRESH_MS: 60 * 1000,
|
|
156
223
|
};
|
|
157
224
|
/**
|
|
158
225
|
* Safe restart: drain in-flight agent turns before a shutdown kills the PTYs,
|
|
@@ -5866,7 +5933,9 @@ export const DECISION_CONSTANTS = {
|
|
|
5866
5933
|
QUESTION_MIN_CHARS: 8,
|
|
5867
5934
|
/** Allowed option count */
|
|
5868
5935
|
MIN_OPTIONS: 2,
|
|
5869
|
-
MAX_OPTIONS:
|
|
5936
|
+
MAX_OPTIONS: 5,
|
|
5937
|
+
/** Two yes/no asks on one ticket this close together that read as either/or are rejected (ms) */
|
|
5938
|
+
EITHER_OR_WINDOW_MS: 60 * 1000,
|
|
5870
5939
|
/** Max characters of an option label (Slack button text max is 75) */
|
|
5871
5940
|
OPTION_LABEL_MAX_CHARS: 40,
|
|
5872
5941
|
/** Max characters of an option's optional detail line */
|
|
@@ -6030,6 +6099,47 @@ export const WORK_ITEM_DESTINATION_CONSTANTS = {
|
|
|
6030
6099
|
/** The one line every prompt carries about where to answer */
|
|
6031
6100
|
PROMPT_LINE: 'Answer where you were asked; a new topic goes in a new thread.',
|
|
6032
6101
|
};
|
|
6102
|
+
/**
|
|
6103
|
+
* Team leads delegate instead of doing the work (crewly#1083,
|
|
6104
|
+
* specs/2026-10-04-tl-delegation.md): owner-thread hand-over, the execution
|
|
6105
|
+
* nudge, lead share of team tokens, and "no member fits" records.
|
|
6106
|
+
*/
|
|
6107
|
+
export const TL_DELEGATION_CONSTANTS = {
|
|
6108
|
+
/** WorkItem.metadata / add-body field: the owner's Slack thread key a delegation answers */
|
|
6109
|
+
OWNER_THREAD_FIELD: 'ownerThread',
|
|
6110
|
+
/** A done item still lets its agent post in the owner's thread this long (ms) */
|
|
6111
|
+
DONE_THREAD_GRACE_MS: 60 * 60 * 1000,
|
|
6112
|
+
/** Claude Code tools that count as hands-on file edits */
|
|
6113
|
+
EDIT_TOOLS: ['Edit', 'Write', 'MultiEdit', 'NotebookEdit'],
|
|
6114
|
+
/** Edits in the window that trigger a nudge */
|
|
6115
|
+
EDIT_THRESHOLD: 6,
|
|
6116
|
+
/** Sliding window for counting edits (ms) */
|
|
6117
|
+
WINDOW_MS: 20 * 60 * 1000,
|
|
6118
|
+
/** At most one nudge per lead per this long (ms) */
|
|
6119
|
+
NUDGE_COOLDOWN_MS: 30 * 60 * 1000,
|
|
6120
|
+
/** A delegation this soon after a nudge counts as following it (ms) */
|
|
6121
|
+
FOLLOW_WINDOW_MS: 30 * 60 * 1000,
|
|
6122
|
+
/** Members named in a nudge */
|
|
6123
|
+
NUDGE_MAX_MEMBERS: 3,
|
|
6124
|
+
/** Tag that opens the nudge text */
|
|
6125
|
+
NUDGE_TAG: '[CREWLY-NUDGE]',
|
|
6126
|
+
/** Note tag on a WorkItem the lead kept because no member fits */
|
|
6127
|
+
NO_MEMBER_FITS_TAG: '[NO-MEMBER-FITS]',
|
|
6128
|
+
/** A lead share above this is flagged */
|
|
6129
|
+
FLAG_SHARE: 0.5,
|
|
6130
|
+
/** Below this many team tokens in the period a share is not flagged (too little to judge) */
|
|
6131
|
+
MIN_TEAM_TOKENS: 1_000_000,
|
|
6132
|
+
/** "This week" = the last N days */
|
|
6133
|
+
WEEK_DAYS: 7,
|
|
6134
|
+
/** State file in CREWLY_HOME (nudge counts, kept-work records) */
|
|
6135
|
+
STATE_FILENAME: 'tl-delegation.json',
|
|
6136
|
+
/** Kept-work records retained */
|
|
6137
|
+
MAX_RECORDS: 500,
|
|
6138
|
+
/** Max characters of a recorded reason / work line */
|
|
6139
|
+
MAX_TEXT_CHARS: 300,
|
|
6140
|
+
/** Accepted tool_name from the hook */
|
|
6141
|
+
TOOL_NAME_PATTERN: /^[A-Za-z0-9_-]{1,64}$/,
|
|
6142
|
+
};
|
|
6033
6143
|
/**
|
|
6034
6144
|
* Harness-owned reply routing (specs/2026-10-02-harness-owned-routing.md).
|
|
6035
6145
|
*/
|