crewly 1.20.147 → 1.20.148

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 (86) hide show
  1. package/config/roles/developer/prompt.md +2 -1
  2. package/config/roles/orchestrator/prompt.md +3 -2
  3. package/config/roles/product-manager/prompt.md +2 -1
  4. package/config/roles/team-leader/tl-addon.md +11 -2
  5. package/config/skills/team-leader/set-member-model/SKILL.md +60 -0
  6. package/config/skills/team-leader/set-member-model/execute.sh +55 -0
  7. package/config/skills/team-leader/set-member-model/execute.test.sh +76 -0
  8. package/dist/backend/backend/src/constants.d.ts +56 -0
  9. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  10. package/dist/backend/backend/src/constants.js +56 -0
  11. package/dist/backend/backend/src/constants.js.map +1 -1
  12. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts.map +1 -1
  13. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js +21 -0
  14. package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js.map +1 -1
  15. package/dist/backend/backend/src/index.d.ts.map +1 -1
  16. package/dist/backend/backend/src/index.js +29 -10
  17. package/dist/backend/backend/src/index.js.map +1 -1
  18. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +9 -6
  19. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  20. package/dist/backend/backend/src/services/agent/agent-registration.service.js +22 -16
  21. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  22. package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.d.ts +248 -0
  23. package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.d.ts.map +1 -0
  24. package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.js +572 -0
  25. package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.js.map +1 -0
  26. package/dist/backend/backend/src/services/agent/runtime-session-recovery.d.ts +8 -0
  27. package/dist/backend/backend/src/services/agent/runtime-session-recovery.d.ts.map +1 -1
  28. package/dist/backend/backend/src/services/agent/runtime-session-recovery.js +12 -1
  29. package/dist/backend/backend/src/services/agent/runtime-session-recovery.js.map +1 -1
  30. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts +10 -0
  31. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts.map +1 -1
  32. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js +41 -3
  33. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js.map +1 -1
  34. package/dist/backend/backend/src/services/session/session-state-persistence.d.ts +9 -0
  35. package/dist/backend/backend/src/services/session/session-state-persistence.d.ts.map +1 -1
  36. package/dist/backend/backend/src/services/session/session-state-persistence.js +20 -0
  37. package/dist/backend/backend/src/services/session/session-state-persistence.js.map +1 -1
  38. package/dist/backend/backend/src/services/skill/skill-permission.service.d.ts.map +1 -1
  39. package/dist/backend/backend/src/services/skill/skill-permission.service.js +1 -0
  40. package/dist/backend/backend/src/services/skill/skill-permission.service.js.map +1 -1
  41. package/dist/backend/backend/src/services/v3/tl-auto-verify.service.d.ts +25 -1
  42. package/dist/backend/backend/src/services/v3/tl-auto-verify.service.d.ts.map +1 -1
  43. package/dist/backend/backend/src/services/v3/tl-auto-verify.service.js +82 -2
  44. package/dist/backend/backend/src/services/v3/tl-auto-verify.service.js.map +1 -1
  45. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts +27 -0
  46. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts.map +1 -1
  47. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js +48 -2
  48. package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js.map +1 -1
  49. package/dist/backend/backend/src/types/settings.types.d.ts +8 -0
  50. package/dist/backend/backend/src/types/settings.types.d.ts.map +1 -1
  51. package/dist/backend/backend/src/types/settings.types.js +4 -0
  52. package/dist/backend/backend/src/types/settings.types.js.map +1 -1
  53. package/dist/backend/backend/src/utils/member-default-model.utils.d.ts +66 -0
  54. package/dist/backend/backend/src/utils/member-default-model.utils.d.ts.map +1 -0
  55. package/dist/backend/backend/src/utils/member-default-model.utils.js +95 -0
  56. package/dist/backend/backend/src/utils/member-default-model.utils.js.map +1 -0
  57. package/dist/backend/backend/src/utils/trigger-workitem-dedupe.utils.d.ts +53 -0
  58. package/dist/backend/backend/src/utils/trigger-workitem-dedupe.utils.d.ts.map +1 -0
  59. package/dist/backend/backend/src/utils/trigger-workitem-dedupe.utils.js +75 -0
  60. package/dist/backend/backend/src/utils/trigger-workitem-dedupe.utils.js.map +1 -0
  61. package/dist/backend/build-info.json +2 -2
  62. package/dist/cli/backend/src/constants.d.ts +56 -0
  63. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  64. package/dist/cli/backend/src/constants.js +56 -0
  65. package/dist/cli/backend/src/constants.js.map +1 -1
  66. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts +9 -6
  67. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  68. package/dist/cli/backend/src/services/agent/agent-registration.service.js +22 -16
  69. package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
  70. package/dist/cli/backend/src/services/agent/runtime-session-recovery.d.ts +8 -0
  71. package/dist/cli/backend/src/services/agent/runtime-session-recovery.d.ts.map +1 -1
  72. package/dist/cli/backend/src/services/agent/runtime-session-recovery.js +12 -1
  73. package/dist/cli/backend/src/services/agent/runtime-session-recovery.js.map +1 -1
  74. package/dist/cli/backend/src/services/session/session-state-persistence.d.ts +9 -0
  75. package/dist/cli/backend/src/services/session/session-state-persistence.d.ts.map +1 -1
  76. package/dist/cli/backend/src/services/session/session-state-persistence.js +20 -0
  77. package/dist/cli/backend/src/services/session/session-state-persistence.js.map +1 -1
  78. package/dist/cli/backend/src/types/settings.types.d.ts +8 -0
  79. package/dist/cli/backend/src/types/settings.types.d.ts.map +1 -1
  80. package/dist/cli/backend/src/types/settings.types.js +4 -0
  81. package/dist/cli/backend/src/types/settings.types.js.map +1 -1
  82. package/dist/cli/backend/src/utils/member-default-model.utils.d.ts +66 -0
  83. package/dist/cli/backend/src/utils/member-default-model.utils.d.ts.map +1 -0
  84. package/dist/cli/backend/src/utils/member-default-model.utils.js +95 -0
  85. package/dist/cli/backend/src/utils/member-default-model.utils.js.map +1 -0
  86. package/package.json +1 -1
@@ -0,0 +1,248 @@
1
+ /**
2
+ * Fresh Task Conversation Service
3
+ *
4
+ * Claude Code agents keep one conversation forever, so a small new task
5
+ * re-reads hundreds of thousands of tokens of unrelated history on every
6
+ * turn (81% of measured usage came from turns over 300k context). This
7
+ * service starts a fresh conversation when a team member is handed a task
8
+ * whose ROOT differs from the last one it was given:
9
+ *
10
+ * 1. The old conversation is saved server-side — a handover file under
11
+ * `<CREWLY_HOME>/handover/` (same format the orchestrator uses at
12
+ * restart) and a concise copy through the memory `remember` path, which
13
+ * mirrors into the wiki. No agent turn is spent on it.
14
+ * 2. `/clear` is written to the PTY the same way context compaction writes
15
+ * its command (Escape, 200 ms, command + CR), then a short pause for the
16
+ * prompt to come back.
17
+ * 3. The dispatch goes on with a one-line note pointing at the handover.
18
+ * 4. In the background the new transcript Claude Code starts is found and
19
+ * its id stored, so a restart resumes the NEW conversation; if it cannot
20
+ * be found the stored id is cleared so a restart starts fresh instead of
21
+ * resuming the huge pre-clear one.
22
+ *
23
+ * Retries, verifications and reviews of the same task share its root
24
+ * (`<id>:retry:N`, `<id>:verify:<id>`, `<id>:review:…`), so they keep their
25
+ * context. Never the orchestrator, only Claude Code, only when the agent is
26
+ * idle and nobody else just wrote to it; any failure falls back to plain
27
+ * delivery — nothing here throws into dispatch.
28
+ *
29
+ * @module services/agent/fresh-task-conversation.service
30
+ */
31
+ import type { WorkItem } from '../../types/v2/work-item.types.js';
32
+ /**
33
+ * The root task id of a work item: its id with any follow-up suffix
34
+ * (`:retry:N`, `:verify:…`, `:review:…`) removed, so every follow-up of one
35
+ * task maps to the same root.
36
+ *
37
+ * @param workItemId - WorkItem id
38
+ * @returns The root id
39
+ *
40
+ * @example
41
+ * ```typescript
42
+ * rootWorkItemId('abc:retry:2'); // 'abc'
43
+ * rootWorkItemId('abc:verify:abc'); // 'abc'
44
+ * rootWorkItemId('abc:retry:1:retry:2'); // 'abc'
45
+ * ```
46
+ */
47
+ export declare function rootWorkItemId(workItemId: string): string;
48
+ /**
49
+ * Whether the feature is switched on by the environment.
50
+ *
51
+ * @param env - Environment (tests)
52
+ * @returns False when CREWLY_FRESH_TASK_CONVERSATION is 0 / false / off / no
53
+ */
54
+ export declare function freshTaskConversationEnvEnabled(env?: NodeJS.ProcessEnv): boolean;
55
+ /** Everything the clear decision depends on. */
56
+ export interface FreshTaskDecisionInput {
57
+ /** Agent session */
58
+ sessionName: string;
59
+ /** Its runtime (from session persistence) */
60
+ runtimeType?: string;
61
+ /** Root of the last task delivered to it, if any */
62
+ previousRoot: string | null;
63
+ /** Root of the task being delivered */
64
+ newRoot: string;
65
+ /** Env + settings kill-switch */
66
+ enabled: boolean;
67
+ /** Agent is mid-turn */
68
+ busy: boolean;
69
+ /** Someone else wrote to the session moments ago */
70
+ recentDelivery: boolean;
71
+ /** Roots of OTHER work the agent is actively running */
72
+ otherActiveRoots: string[];
73
+ /**
74
+ * The agent already started this very task a while ago (e.g. the lead
75
+ * handed it over directly and this is a re-delivery). Clearing now would
76
+ * wipe the live context of work in progress.
77
+ */
78
+ alreadyStarted?: boolean;
79
+ }
80
+ /** The clear decision and why. */
81
+ export interface FreshTaskDecision {
82
+ /** Clear before delivering */
83
+ clear: boolean;
84
+ /** Short reason (logged) */
85
+ reason: string;
86
+ }
87
+ /**
88
+ * Decide whether to start a fresh conversation before delivering a task.
89
+ *
90
+ * @param input - Decision inputs
91
+ * @returns The decision
92
+ */
93
+ export declare function decideFreshConversation(input: FreshTaskDecisionInput): FreshTaskDecision;
94
+ /**
95
+ * The line put in front of the task text after a fresh start.
96
+ *
97
+ * @param handoverPath - Handover file written for the old conversation
98
+ * @returns One line
99
+ */
100
+ export declare function freshConversationNote(handoverPath: string): string;
101
+ /** What the service needs to know about a session. */
102
+ export interface FreshTaskSessionInfo {
103
+ /** Runtime */
104
+ runtimeType?: string;
105
+ /** Working directory (Claude Code transcripts are keyed on it) */
106
+ cwd?: string;
107
+ /** Current Claude conversation id */
108
+ sessionId?: string;
109
+ }
110
+ /** Collaborators; the defaults talk to the running backend. */
111
+ export interface FreshTaskDeps {
112
+ /** Session runtime / cwd / conversation id */
113
+ getSessionInfo: (sessionName: string) => FreshTaskSessionInfo | null;
114
+ /** Conversation ids of every OTHER registered session */
115
+ getClaimedSessionIds: (sessionName: string) => Set<string>;
116
+ /** Store the new conversation id */
117
+ updateSessionId: (sessionName: string, id: string) => void;
118
+ /** Forget the conversation id (restart starts fresh) */
119
+ clearSessionId: (sessionName: string) => void;
120
+ /** Agent is mid-turn */
121
+ isBusy: (sessionName: string) => Promise<boolean>;
122
+ /** Settings flag (general.freshConversationPerTask, default true) */
123
+ settingEnabled: () => Promise<boolean>;
124
+ /** Open work items targeting the session */
125
+ getActiveItems: (sessionName: string) => Promise<WorkItem[]>;
126
+ /** Raw PTY write; false when the session is gone */
127
+ writeToSession: (sessionName: string, data: string) => boolean;
128
+ /** Store the concise handover through memory (mirrors into the wiki) */
129
+ remember: (args: {
130
+ agentId: string;
131
+ projectPath?: string;
132
+ content: string;
133
+ title: string;
134
+ }) => Promise<unknown>;
135
+ /** Crewly home (handover + state files) */
136
+ crewlyHome: () => string;
137
+ /** Claude home override (tests) */
138
+ claudeHome?: string;
139
+ /** Clock */
140
+ now: () => number;
141
+ /** Sleep */
142
+ sleep: (ms: number) => Promise<void>;
143
+ /** Environment */
144
+ env: NodeJS.ProcessEnv;
145
+ }
146
+ /** Result of {@link FreshTaskConversationService.prepareForTask}. */
147
+ export interface PrepareForTaskResult {
148
+ /** A fresh conversation was started */
149
+ cleared: boolean;
150
+ /** Handover file for the old conversation (when cleared) */
151
+ handoverPath?: string;
152
+ }
153
+ /**
154
+ * Singleton that starts a fresh Claude Code conversation per new task.
155
+ */
156
+ export declare class FreshTaskConversationService {
157
+ private static instance;
158
+ private readonly logger;
159
+ private deps;
160
+ private state;
161
+ /** Per-session in-flight prepare (serialises prepares; waited on by terminal writes) */
162
+ private readonly inFlight;
163
+ /** Last time a message was written to a session (terminal write / deliver) */
164
+ private readonly lastDelivery;
165
+ private constructor();
166
+ /**
167
+ * @returns The singleton
168
+ */
169
+ static getInstance(): FreshTaskConversationService;
170
+ /**
171
+ * Replace the singleton with one using the given collaborators (tests).
172
+ *
173
+ * @param deps - Overrides for the default deps
174
+ * @returns The new singleton
175
+ */
176
+ static createForTesting(deps: Partial<FreshTaskDeps>): FreshTaskConversationService;
177
+ /** Drop the singleton (tests). */
178
+ static resetInstance(): void;
179
+ /**
180
+ * Record that a message is being written to a session. A clear right after
181
+ * would wipe it before the agent reads it, so {@link prepareForTask} skips
182
+ * clearing for a short window (this includes the dispatcher's own briefs,
183
+ * so two tasks dispatched back to back never clear each other).
184
+ *
185
+ * @param sessionName - Session written to
186
+ */
187
+ noteDelivery(sessionName: string): void;
188
+ /**
189
+ * Wait (bounded) while a prepare — possibly a `/clear` — is running for the
190
+ * session, so a message written now is not wiped by it.
191
+ *
192
+ * @param sessionName - Session about to be written to
193
+ * @param maxMs - Upper bound on the wait
194
+ */
195
+ waitIfClearing(sessionName: string, maxMs?: number): Promise<void>;
196
+ /**
197
+ * Root of the last task delivered to a session.
198
+ *
199
+ * @param sessionName - Session
200
+ * @returns Root id or null
201
+ */
202
+ getLastRoot(sessionName: string): string | null;
203
+ /**
204
+ * Called right before a task is written to an agent. Starts a fresh
205
+ * conversation when the task's root differs from the previous one and it
206
+ * is safe to; always records the new root. Never throws.
207
+ *
208
+ * @param sessionName - Target session
209
+ * @param workItem - Task being delivered
210
+ * @returns Whether it cleared, and the handover file when it did
211
+ */
212
+ prepareForTask(sessionName: string, workItem: Pick<WorkItem, 'id'>): Promise<PrepareForTaskResult>;
213
+ private doPrepare;
214
+ /**
215
+ * Write the handover file (same shape as the orchestrator's restart handover).
216
+ *
217
+ * @returns Its path
218
+ */
219
+ private writeHandover;
220
+ /**
221
+ * The capped text stored through memory: where the handover is plus the
222
+ * newest part of what was said.
223
+ */
224
+ private conciseHandover;
225
+ /**
226
+ * After `/clear`, find the transcript Claude Code starts for this agent and
227
+ * store its id; if none shows up in time, clear the stored id so a restart
228
+ * starts fresh rather than resuming the pre-clear conversation.
229
+ *
230
+ * A candidate is a `.jsonl` in the agent's transcript directory, modified
231
+ * since the clear, not the old id, not claimed by another session, and
232
+ * mentioning this session's name (the dispatch text written right after the
233
+ * clear carries it) — several agents can share one cwd.
234
+ */
235
+ private trackNewConversation;
236
+ /**
237
+ * One scan of the transcript directory.
238
+ *
239
+ * @returns The new conversation id, or null
240
+ */
241
+ private findNewTranscript;
242
+ /** Whether the start of a transcript mentions the session name. */
243
+ private fileMentions;
244
+ private statePath;
245
+ private loadState;
246
+ private recordRoot;
247
+ }
248
+ //# sourceMappingURL=fresh-task-conversation.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fresh-task-conversation.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/fresh-task-conversation.service.ts"],"names":[],"mappings":"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"}