crewly 1.20.184 → 1.20.185
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/constants.ts +83 -0
- package/config/index.ts +2 -0
- package/config/oss-boundary-allowlist.json +10 -0
- package/config/skills/agent/core/ask-owner/SKILL.md +5 -2
- package/config/skills/agent/core/complete-task/execute.sh +4 -12
- package/config/skills/agent/core/complete-task/execute.test.sh +11 -0
- package/config/skills/agent/core/report-status/SKILL.md +1 -1
- package/config/skills/agent/core/report-status/execute.sh +5 -10
- package/dist/backend/backend/src/constants.d.ts +40 -0
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +35 -1
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/decisions/decisions.controller.d.ts +11 -1
- package/dist/backend/backend/src/controllers/decisions/decisions.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/decisions/decisions.controller.js +38 -0
- package/dist/backend/backend/src/controllers/decisions/decisions.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/google/google.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/google/google.controller.js +3 -2
- package/dist/backend/backend/src/controllers/google/google.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/request/open-items.controller.d.ts +9 -0
- package/dist/backend/backend/src/controllers/request/open-items.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/request/open-items.controller.js +29 -1
- package/dist/backend/backend/src/controllers/request/open-items.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/request/request.routes.d.ts +1 -0
- package/dist/backend/backend/src/controllers/request/request.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/request/request.routes.js +4 -1
- package/dist/backend/backend/src/controllers/request/request.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/standing/standing.controller.d.ts +5 -2
- package/dist/backend/backend/src/controllers/standing/standing.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/standing/standing.controller.js +3 -1
- package/dist/backend/backend/src/controllers/standing/standing.controller.js.map +1 -1
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +15 -1
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/scripts/check-oss-boundary.d.ts +217 -0
- package/dist/backend/backend/src/scripts/check-oss-boundary.d.ts.map +1 -0
- package/dist/backend/backend/src/scripts/check-oss-boundary.js +490 -0
- package/dist/backend/backend/src/scripts/check-oss-boundary.js.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/standing-answers.module.d.ts +3 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/standing-answers.module.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/standing-answers.module.js +15 -4
- package/dist/backend/backend/src/services/ai/prompt-modules/standing-answers.module.js.map +1 -1
- package/dist/backend/backend/src/services/decisions/decision-card.d.ts +31 -4
- package/dist/backend/backend/src/services/decisions/decision-card.d.ts.map +1 -1
- package/dist/backend/backend/src/services/decisions/decision-card.js +60 -2
- package/dist/backend/backend/src/services/decisions/decision-card.js.map +1 -1
- package/dist/backend/backend/src/services/decisions/decision-skip-command.d.ts +56 -0
- package/dist/backend/backend/src/services/decisions/decision-skip-command.d.ts.map +1 -0
- package/dist/backend/backend/src/services/decisions/decision-skip-command.js +108 -0
- package/dist/backend/backend/src/services/decisions/decision-skip-command.js.map +1 -0
- package/dist/backend/backend/src/services/decisions/decision.service.d.ts +105 -2
- package/dist/backend/backend/src/services/decisions/decision.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/decisions/decision.service.js +187 -11
- package/dist/backend/backend/src/services/decisions/decision.service.js.map +1 -1
- package/dist/backend/backend/src/services/decisions/decision.wiring.d.ts +8 -0
- package/dist/backend/backend/src/services/decisions/decision.wiring.d.ts.map +1 -1
- package/dist/backend/backend/src/services/decisions/decision.wiring.js +25 -0
- package/dist/backend/backend/src/services/decisions/decision.wiring.js.map +1 -1
- package/dist/backend/backend/src/services/memory/agent-memory.service.d.ts +19 -0
- package/dist/backend/backend/src/services/memory/agent-memory.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/memory/agent-memory.service.js +48 -0
- package/dist/backend/backend/src/services/memory/agent-memory.service.js.map +1 -1
- package/dist/backend/backend/src/services/memory/memory.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/memory/memory.service.js +20 -0
- package/dist/backend/backend/src/services/memory/memory.service.js.map +1 -1
- package/dist/backend/backend/src/services/memory/project-memory.service.d.ts +40 -0
- package/dist/backend/backend/src/services/memory/project-memory.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/memory/project-memory.service.js +101 -0
- package/dist/backend/backend/src/services/memory/project-memory.service.js.map +1 -1
- package/dist/backend/backend/src/services/memory/role-knowledge-eligibility.d.ts +1 -1
- package/dist/backend/backend/src/services/memory/role-knowledge-eligibility.d.ts.map +1 -1
- package/dist/backend/backend/src/services/memory/role-knowledge-eligibility.js.map +1 -1
- package/dist/backend/backend/src/services/memory/standing-answers.service.d.ts +61 -1
- package/dist/backend/backend/src/services/memory/standing-answers.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/memory/standing-answers.service.js +71 -3
- package/dist/backend/backend/src/services/memory/standing-answers.service.js.map +1 -1
- package/dist/backend/backend/src/services/memory/standing-refresh.service.d.ts +7 -4
- package/dist/backend/backend/src/services/memory/standing-refresh.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/memory/standing-refresh.service.js +18 -9
- package/dist/backend/backend/src/services/memory/standing-refresh.service.js.map +1 -1
- package/dist/backend/backend/src/services/memory/task-log-filter.d.ts +27 -0
- package/dist/backend/backend/src/services/memory/task-log-filter.d.ts.map +1 -0
- package/dist/backend/backend/src/services/memory/task-log-filter.js +56 -0
- package/dist/backend/backend/src/services/memory/task-log-filter.js.map +1 -0
- package/dist/backend/backend/src/services/open-items/open-items-backfill.d.ts +26 -1
- package/dist/backend/backend/src/services/open-items/open-items-backfill.d.ts.map +1 -1
- package/dist/backend/backend/src/services/open-items/open-items-backfill.js +59 -3
- package/dist/backend/backend/src/services/open-items/open-items-backfill.js.map +1 -1
- package/dist/backend/backend/src/services/open-items/open-items.service.d.ts +37 -2
- 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 +101 -6
- package/dist/backend/backend/src/services/open-items/open-items.service.js.map +1 -1
- package/dist/backend/backend/src/services/open-items/open-items.wiring.d.ts.map +1 -1
- package/dist/backend/backend/src/services/open-items/open-items.wiring.js +13 -0
- package/dist/backend/backend/src/services/open-items/open-items.wiring.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts +13 -0
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js +34 -11
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-process.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-process.service.js +4 -2
- package/dist/backend/backend/src/services/wiki/wiki-process.service.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-queue.service.d.ts +103 -1
- package/dist/backend/backend/src/services/wiki/wiki-queue.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-queue.service.js +171 -20
- package/dist/backend/backend/src/services/wiki/wiki-queue.service.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.d.ts +60 -0
- package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.js +121 -7
- package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.js.map +1 -1
- package/dist/backend/backend/src/types/decision.types.d.ts +18 -3
- package/dist/backend/backend/src/types/decision.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/open-item.types.d.ts +4 -1
- package/dist/backend/backend/src/types/v2/open-item.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/open-item.types.js.map +1 -1
- package/dist/backend/build-info.json +2 -2
- package/dist/backend/config/constants.d.ts +73 -0
- package/dist/backend/config/constants.d.ts.map +1 -1
- package/dist/backend/config/constants.js +80 -0
- package/dist/backend/config/constants.js.map +1 -1
- package/dist/backend/config/index.d.ts +10 -2
- package/dist/backend/config/index.d.ts.map +1 -1
- package/dist/backend/config/index.js +2 -2
- package/dist/backend/config/index.js.map +1 -1
- package/dist/cli/backend/src/constants.d.ts +40 -0
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +35 -1
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/standing-answers.module.d.ts +3 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/standing-answers.module.d.ts.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/standing-answers.module.js +15 -4
- package/dist/cli/backend/src/services/ai/prompt-modules/standing-answers.module.js.map +1 -1
- package/dist/cli/backend/src/services/decisions/decision-card.d.ts +31 -4
- package/dist/cli/backend/src/services/decisions/decision-card.d.ts.map +1 -1
- package/dist/cli/backend/src/services/decisions/decision-card.js +60 -2
- package/dist/cli/backend/src/services/decisions/decision-card.js.map +1 -1
- package/dist/cli/backend/src/services/decisions/decision.service.d.ts +105 -2
- package/dist/cli/backend/src/services/decisions/decision.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/decisions/decision.service.js +187 -11
- package/dist/cli/backend/src/services/decisions/decision.service.js.map +1 -1
- package/dist/cli/backend/src/services/memory/agent-memory.service.d.ts +19 -0
- package/dist/cli/backend/src/services/memory/agent-memory.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/memory/agent-memory.service.js +48 -0
- package/dist/cli/backend/src/services/memory/agent-memory.service.js.map +1 -1
- package/dist/cli/backend/src/services/memory/memory.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/memory/memory.service.js +20 -0
- package/dist/cli/backend/src/services/memory/memory.service.js.map +1 -1
- package/dist/cli/backend/src/services/memory/project-memory.service.d.ts +40 -0
- package/dist/cli/backend/src/services/memory/project-memory.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/memory/project-memory.service.js +101 -0
- package/dist/cli/backend/src/services/memory/project-memory.service.js.map +1 -1
- package/dist/cli/backend/src/services/memory/role-knowledge-eligibility.d.ts +1 -1
- package/dist/cli/backend/src/services/memory/role-knowledge-eligibility.d.ts.map +1 -1
- package/dist/cli/backend/src/services/memory/role-knowledge-eligibility.js.map +1 -1
- package/dist/cli/backend/src/services/memory/standing-answers.service.d.ts +61 -1
- package/dist/cli/backend/src/services/memory/standing-answers.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/memory/standing-answers.service.js +71 -3
- package/dist/cli/backend/src/services/memory/standing-answers.service.js.map +1 -1
- package/dist/cli/backend/src/services/memory/task-log-filter.d.ts +27 -0
- package/dist/cli/backend/src/services/memory/task-log-filter.d.ts.map +1 -0
- package/dist/cli/backend/src/services/memory/task-log-filter.js +56 -0
- package/dist/cli/backend/src/services/memory/task-log-filter.js.map +1 -0
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts +13 -0
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js +34 -11
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
- package/dist/cli/backend/src/types/decision.types.d.ts +18 -3
- package/dist/cli/backend/src/types/decision.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/v2/open-item.types.d.ts +4 -1
- package/dist/cli/backend/src/types/v2/open-item.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/v2/open-item.types.js.map +1 -1
- package/dist/cli/config/constants.d.ts +73 -0
- package/dist/cli/config/constants.d.ts.map +1 -1
- package/dist/cli/config/constants.js +80 -0
- package/dist/cli/config/constants.js.map +1 -1
- package/dist/cli/config/index.d.ts +10 -2
- package/dist/cli/config/index.d.ts.map +1 -1
- package/dist/cli/config/index.js +2 -2
- package/dist/cli/config/index.js.map +1 -1
- package/frontend/dist/assets/{index-a6cb8533.js → index-1ee8a9a2.js} +273 -273
- package/frontend/dist/assets/index-a79c7852.css +42 -0
- package/frontend/dist/index.html +2 -2
- package/package.json +2 -1
- package/frontend/dist/assets/index-04d192f8.css +0 -42
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standing-refresh.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/memory/standing-refresh.service.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"standing-refresh.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/memory/standing-refresh.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Identifies task-completion summaries so they stay out of long-term memory.
|
|
3
|
+
*
|
|
4
|
+
* The complete-task and report-status skills used to save every finished
|
|
5
|
+
* task's summary as a project `decision` (and, via report-status, as a
|
|
6
|
+
* learning). In real projects these made up most of decisions.json and
|
|
7
|
+
* pushed real decisions out of recall (#833). The summary already lives on
|
|
8
|
+
* the WorkItem and in task-history.json, so memory writers drop it and the
|
|
9
|
+
* startup migration archives the existing copies.
|
|
10
|
+
*
|
|
11
|
+
* @module services/memory/task-log-filter
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Whether a memory text is a task-completion summary (a task log) rather
|
|
15
|
+
* than a durable conclusion.
|
|
16
|
+
*
|
|
17
|
+
* @param content - Memory text about to be stored, or already stored
|
|
18
|
+
* @returns true when the text is a task-completion summary
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```typescript
|
|
22
|
+
* isTaskCompletionLog('[COMPLETED] Task completed by dev-1: shipped X'); // true
|
|
23
|
+
* isTaskCompletionLog('Use pnpm, not npm, in this repo'); // false
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export declare function isTaskCompletionLog(content: string | undefined | null): boolean;
|
|
27
|
+
//# sourceMappingURL=task-log-filter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-log-filter.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/memory/task-log-filter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AA4BH;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,CAI/E"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Identifies task-completion summaries so they stay out of long-term memory.
|
|
3
|
+
*
|
|
4
|
+
* The complete-task and report-status skills used to save every finished
|
|
5
|
+
* task's summary as a project `decision` (and, via report-status, as a
|
|
6
|
+
* learning). In real projects these made up most of decisions.json and
|
|
7
|
+
* pushed real decisions out of recall (#833). The summary already lives on
|
|
8
|
+
* the WorkItem and in task-history.json, so memory writers drop it and the
|
|
9
|
+
* startup migration archives the existing copies.
|
|
10
|
+
*
|
|
11
|
+
* @module services/memory/task-log-filter
|
|
12
|
+
*/
|
|
13
|
+
import { MEMORY_CONSTANTS } from '../../constants.js';
|
|
14
|
+
/**
|
|
15
|
+
* Removes the wrappers other writers add around a stored summary, such as
|
|
16
|
+
* `Decision made: ` (decision → learnings.md mirror) and
|
|
17
|
+
* `[coerced from category=decision]` (agent-scope coercion).
|
|
18
|
+
*
|
|
19
|
+
* @param content - Stored memory text
|
|
20
|
+
* @returns The text with any leading wrappers removed
|
|
21
|
+
*/
|
|
22
|
+
function stripWrappers(content) {
|
|
23
|
+
let text = content.trimStart();
|
|
24
|
+
let changed = true;
|
|
25
|
+
while (changed) {
|
|
26
|
+
changed = false;
|
|
27
|
+
for (const prefix of MEMORY_CONSTANTS.TASK_LOG.WRAPPER_PREFIXES) {
|
|
28
|
+
const next = text.replace(prefix, '');
|
|
29
|
+
if (next !== text) {
|
|
30
|
+
text = next.trimStart();
|
|
31
|
+
changed = true;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return text;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Whether a memory text is a task-completion summary (a task log) rather
|
|
39
|
+
* than a durable conclusion.
|
|
40
|
+
*
|
|
41
|
+
* @param content - Memory text about to be stored, or already stored
|
|
42
|
+
* @returns true when the text is a task-completion summary
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```typescript
|
|
46
|
+
* isTaskCompletionLog('[COMPLETED] Task completed by dev-1: shipped X'); // true
|
|
47
|
+
* isTaskCompletionLog('Use pnpm, not npm, in this repo'); // false
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
export function isTaskCompletionLog(content) {
|
|
51
|
+
if (!content)
|
|
52
|
+
return false;
|
|
53
|
+
const text = stripWrappers(content);
|
|
54
|
+
return MEMORY_CONSTANTS.TASK_LOG.CONTENT_PATTERNS.some((pattern) => pattern.test(text));
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=task-log-filter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-log-filter.js","sourceRoot":"","sources":["../../../../../../backend/src/services/memory/task-log-filter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD;;;;;;;GAOG;AACH,SAAS,aAAa,CAAC,OAAe;IACrC,IAAI,IAAI,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAC/B,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,OAAO,OAAO,EAAE,CAAC;QAChB,OAAO,GAAG,KAAK,CAAC;QAChB,KAAK,MAAM,MAAM,IAAI,gBAAgB,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC;YACjE,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACtC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBACnB,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;gBACxB,OAAO,GAAG,IAAI,CAAC;YAChB,CAAC;QACF,CAAC;IACF,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAkC;IACrE,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAC3B,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACpC,OAAO,gBAAgB,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACzF,CAAC"}
|
|
@@ -7,13 +7,38 @@
|
|
|
7
7
|
* An item already settled by the conversation is skipped:
|
|
8
8
|
* - a commitment the agent (or the child's agent) delivered later in the
|
|
9
9
|
* thread, by the live delivery rule;
|
|
10
|
-
* - a question the owner replied to later in the thread
|
|
10
|
+
* - a question the owner replied to later in the thread;
|
|
11
|
+
* - a question whose topic an agent later reported as settled in the thread
|
|
12
|
+
* ("done", "logged in", 「登上了」, 「搞定」…);
|
|
13
|
+
* - a harness-flow question (a login / re-login prompt, e.g. crewly-orc's
|
|
14
|
+
* 「Claude Code 的登录链接已经发过去了,你那边登上了吗?」): the harness
|
|
15
|
+
* tracks those itself, they are never the owner's decision;
|
|
16
|
+
* - a question the owner already skipped in that request.
|
|
17
|
+
*
|
|
18
|
+
* The cards it posts are marked `source: 'backfill'`, so the owner can clear
|
|
19
|
+
* them all at once (`POST /api/decisions/skip-all { source: 'backfill' }`).
|
|
11
20
|
*
|
|
12
21
|
* @module services/open-items/open-items-backfill
|
|
13
22
|
*/
|
|
14
23
|
import type { Request } from '../../types/v2/request.types.js';
|
|
15
24
|
import type { WorkItem } from '../../types/v2/work-item.types.js';
|
|
16
25
|
import { type OpenItemsChatMessage, type OpenItemsService } from './open-items.service.js';
|
|
26
|
+
/**
|
|
27
|
+
* Whether a question is part of a harness flow (a login prompt): from the
|
|
28
|
+
* orc, or naming a runtime, and about logging in.
|
|
29
|
+
*
|
|
30
|
+
* @param agent - Asking agent
|
|
31
|
+
* @param text - The question
|
|
32
|
+
* @returns True to skip it
|
|
33
|
+
*/
|
|
34
|
+
export declare function isHarnessFlowQuestion(agent: string, text: string): boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Whether an agent message reports that something is settled.
|
|
37
|
+
*
|
|
38
|
+
* @param content - Message text
|
|
39
|
+
* @returns True for "done" / "logged in" / 「搞定」…
|
|
40
|
+
*/
|
|
41
|
+
export declare function reportsSettled(content: string): boolean;
|
|
17
42
|
/** Readers the backfill needs. */
|
|
18
43
|
export interface BackfillDeps {
|
|
19
44
|
service: Pick<OpenItemsService, 'plan' | 'adopt' | 'deliveredBy' | 'findRequestFor'>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"open-items-backfill.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/open-items/open-items-backfill.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"open-items-backfill.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/open-items/open-items-backfill.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAElE,OAAO,EAA2C,KAAK,oBAAoB,EAAE,KAAK,gBAAgB,EAAwB,MAAM,yBAAyB,CAAC;AAY1J;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAG1E;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,kCAAkC;AAClC,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,GAAG,aAAa,GAAG,gBAAgB,CAAC,CAAC;IACrF,YAAY,EAAE,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACvC,aAAa,EAAE,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IACzC,4EAA4E;IAC5E,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC;IACnF,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB;AAED,6BAA6B;AAC7B,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,YAAY,GAAG,UAAU,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,6BAA6B;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,qCAAqC;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,2BAA2B;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,0CAA0C;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,kBAAkB;AAClB,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,WAAW,EAAE,CAAC;IACpB,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,cAAc,CAAC,CAoGnH;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAqBnE"}
|
|
@@ -7,13 +7,50 @@
|
|
|
7
7
|
* An item already settled by the conversation is skipped:
|
|
8
8
|
* - a commitment the agent (or the child's agent) delivered later in the
|
|
9
9
|
* thread, by the live delivery rule;
|
|
10
|
-
* - a question the owner replied to later in the thread
|
|
10
|
+
* - a question the owner replied to later in the thread;
|
|
11
|
+
* - a question whose topic an agent later reported as settled in the thread
|
|
12
|
+
* ("done", "logged in", 「登上了」, 「搞定」…);
|
|
13
|
+
* - a harness-flow question (a login / re-login prompt, e.g. crewly-orc's
|
|
14
|
+
* 「Claude Code 的登录链接已经发过去了,你那边登上了吗?」): the harness
|
|
15
|
+
* tracks those itself, they are never the owner's decision;
|
|
16
|
+
* - a question the owner already skipped in that request.
|
|
17
|
+
*
|
|
18
|
+
* The cards it posts are marked `source: 'backfill'`, so the owner can clear
|
|
19
|
+
* them all at once (`POST /api/decisions/skip-all { source: 'backfill' }`).
|
|
11
20
|
*
|
|
12
21
|
* @module services/open-items/open-items-backfill
|
|
13
22
|
*/
|
|
14
|
-
import { OPEN_ITEMS_CONSTANTS } from '../../constants.js';
|
|
23
|
+
import { OPEN_ITEMS_CONSTANTS, ORCHESTRATOR_SESSION_NAME } from '../../constants.js';
|
|
15
24
|
import { formatTicketNumber } from '../../types/v2/ticket.types.js';
|
|
16
25
|
import { childrenState, childWorkFor, isSameItem } from './open-items.service.js';
|
|
26
|
+
/** A login / re-login / sign-in prompt (harness flow, not an owner decision). */
|
|
27
|
+
const LOGIN_RE = /\b(?:log ?in|logged in|sign(?:ed)? ?in|re-?login|re-?log ?in|oauth|auth(?:orization)? code|device code|verification code)\b|登录|登陆|登上|登入|重新登|授权码|验证码|授权链接/i;
|
|
28
|
+
/** A runtime / harness the agent might ask the owner to sign in to. */
|
|
29
|
+
const HARNESS_RE = /\b(?:claude(?: code)?|codex|gemini|antigravity|agy|crewly|cloud)\b/i;
|
|
30
|
+
/** An agent saying the thing is settled. */
|
|
31
|
+
const SETTLED_RE = /\b(?:done|finished|completed|resolved|fixed|sorted|all set|logged in|signed in|is back|works now|working now|no longer needed)\b|已完成|完成了|做完了|搞定|弄好了|做好了|已经好了|已解决|解决了|修好了|已修复|已登录|登录成功|登上了|已经登上|登好了|恢复了|不需要了|处理好了/i;
|
|
32
|
+
/**
|
|
33
|
+
* Whether a question is part of a harness flow (a login prompt): from the
|
|
34
|
+
* orc, or naming a runtime, and about logging in.
|
|
35
|
+
*
|
|
36
|
+
* @param agent - Asking agent
|
|
37
|
+
* @param text - The question
|
|
38
|
+
* @returns True to skip it
|
|
39
|
+
*/
|
|
40
|
+
export function isHarnessFlowQuestion(agent, text) {
|
|
41
|
+
if (!LOGIN_RE.test(text))
|
|
42
|
+
return false;
|
|
43
|
+
return agent === ORCHESTRATOR_SESSION_NAME || HARNESS_RE.test(text);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Whether an agent message reports that something is settled.
|
|
47
|
+
*
|
|
48
|
+
* @param content - Message text
|
|
49
|
+
* @returns True for "done" / "logged in" / 「搞定」…
|
|
50
|
+
*/
|
|
51
|
+
export function reportsSettled(content) {
|
|
52
|
+
return SETTLED_RE.test(content);
|
|
53
|
+
}
|
|
17
54
|
/**
|
|
18
55
|
* Run the backfill.
|
|
19
56
|
*
|
|
@@ -90,6 +127,25 @@ export async function backfillOpenItems(deps, opts = {}) {
|
|
|
90
127
|
report.rows.push(row);
|
|
91
128
|
continue;
|
|
92
129
|
}
|
|
130
|
+
if (isHarnessFlowQuestion(p.item.agent, p.item.text)) {
|
|
131
|
+
row.skipped = 'harness flow (a login prompt), not an owner decision';
|
|
132
|
+
row.action = 'none';
|
|
133
|
+
report.rows.push(row);
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
const settled = later.find((m) => m.senderType === 'agent' && reportsSettled(m.content));
|
|
137
|
+
if (settled) {
|
|
138
|
+
row.skipped = `resolved later in the thread (${settled.senderId} at ${new Date(settled.createdAt ?? 0).toISOString()})`;
|
|
139
|
+
row.action = 'none';
|
|
140
|
+
report.rows.push(row);
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
if (p.skippedDecisionId) {
|
|
144
|
+
row.skipped = `the owner skipped this question before (${p.skippedDecisionId})`;
|
|
145
|
+
row.action = 'none';
|
|
146
|
+
report.rows.push(row);
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
93
149
|
if (p.linkedDecisionId) {
|
|
94
150
|
row.action = `link to existing ask-owner card ${p.linkedDecisionId} (no new card)`;
|
|
95
151
|
}
|
|
@@ -108,7 +164,7 @@ export async function backfillOpenItems(deps, opts = {}) {
|
|
|
108
164
|
if (request.status === 'done')
|
|
109
165
|
report.reopened.push(`${ticket} (${request.id.slice(0, 8)})`);
|
|
110
166
|
if (apply)
|
|
111
|
-
await deps.service.adopt(request.id, keep);
|
|
167
|
+
await deps.service.adopt(request.id, keep, { source: 'backfill' });
|
|
112
168
|
}
|
|
113
169
|
return report;
|
|
114
170
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"open-items-backfill.js","sourceRoot":"","sources":["../../../../../../backend/src/services/open-items/open-items-backfill.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"open-items-backfill.js","sourceRoot":"","sources":["../../../../../../backend/src/services/open-items/open-items-backfill.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,7 +34,7 @@ import { type ComponentLogger } from '../core/logger.service.js';
|
|
|
34
34
|
import type { Request } from '../../types/v2/request.types.js';
|
|
35
35
|
import type { WorkItem } from '../../types/v2/work-item.types.js';
|
|
36
36
|
import { type RequestOpenItem } from '../../types/v2/open-item.types.js';
|
|
37
|
-
import type { OwnerDecision } from '../../types/decision.types.js';
|
|
37
|
+
import type { DecisionSource, OwnerDecision } from '../../types/decision.types.js';
|
|
38
38
|
import { type DerivedQuestionCard } from './open-item-card.js';
|
|
39
39
|
/** The chat-v2 message fields the service reads. */
|
|
40
40
|
export interface OpenItemsChatMessage {
|
|
@@ -66,6 +66,8 @@ export interface QuestionCardInput {
|
|
|
66
66
|
item: RequestOpenItem;
|
|
67
67
|
card: DerivedQuestionCard;
|
|
68
68
|
place: OpenItemsSlackPlace | null;
|
|
69
|
+
/** `backfill` when the backfill cards an old reply */
|
|
70
|
+
source?: DecisionSource;
|
|
69
71
|
}
|
|
70
72
|
/** Collaborators. */
|
|
71
73
|
export interface OpenItemsDeps {
|
|
@@ -86,6 +88,10 @@ export interface OpenItemsDeps {
|
|
|
86
88
|
askQuestion?: (input: QuestionCardInput) => Promise<OwnerDecision | null>;
|
|
87
89
|
/** Withdraw a question's card (the ticket was cancelled) */
|
|
88
90
|
cancelQuestion?: (decisionId: string, note: string) => Promise<void>;
|
|
91
|
+
/** A question the owner skipped in this request (not asked again for 30 days) */
|
|
92
|
+
skippedQuestion?: (requestId: string, agent: string, question: string) => Promise<OwnerDecision | null>;
|
|
93
|
+
/** Skip a question's card (the owner skipped the open item); false when it was not pending */
|
|
94
|
+
skipQuestion?: (decisionId: string) => Promise<boolean>;
|
|
89
95
|
/** A decision by id (sweep catches answers a missed handler call left behind) */
|
|
90
96
|
getDecision?: (decisionId: string) => Promise<OwnerDecision | null>;
|
|
91
97
|
/** Deliver a note to an agent, waking it; false when it could not */
|
|
@@ -108,6 +114,13 @@ export interface PlannedOpenItem {
|
|
|
108
114
|
card?: DerivedQuestionCard;
|
|
109
115
|
/** Question: the ask-owner decision it is linked to instead of a new card */
|
|
110
116
|
linkedDecisionId?: string;
|
|
117
|
+
/** Question: the owner already skipped the same question here — tracked as skipped, never carded */
|
|
118
|
+
skippedDecisionId?: string;
|
|
119
|
+
}
|
|
120
|
+
/** Thrown for open-item requests the caller must fix (HTTP 4xx). */
|
|
121
|
+
export declare class OpenItemsError extends Error {
|
|
122
|
+
readonly status: number;
|
|
123
|
+
constructor(status: number, message: string);
|
|
111
124
|
}
|
|
112
125
|
/**
|
|
113
126
|
* The Slack thread of a request's conversation (`origin.threadRef` is
|
|
@@ -260,9 +273,12 @@ export declare class OpenItemsService {
|
|
|
260
273
|
*
|
|
261
274
|
* @param requestId - Request
|
|
262
275
|
* @param planned - Items from {@link plan}
|
|
276
|
+
* @param opts - `source: 'backfill'` marks the cards it posts as backfilled
|
|
263
277
|
* @returns Updated request, or null when it is gone
|
|
264
278
|
*/
|
|
265
|
-
adopt(requestId: string, planned: PlannedOpenItem[]
|
|
279
|
+
adopt(requestId: string, planned: PlannedOpenItem[], opts?: {
|
|
280
|
+
source?: DecisionSource;
|
|
281
|
+
}): Promise<Request | null>;
|
|
266
282
|
/**
|
|
267
283
|
* Store items, and move the request between `done` and `awaiting_followup`.
|
|
268
284
|
*
|
|
@@ -299,6 +315,18 @@ export declare class OpenItemsService {
|
|
|
299
315
|
* @returns The note for the agent (null when withdrawn)
|
|
300
316
|
*/
|
|
301
317
|
onDecisionSettled(d: OwnerDecision, fallback: string | null | undefined): Promise<string | null>;
|
|
318
|
+
/**
|
|
319
|
+
* The owner skipped an open item ("I don't care about this anymore"). A
|
|
320
|
+
* promise is closed, its follow-up WorkItem cancelled and the agent told
|
|
321
|
+
* once to drop it; a question's card is skipped (which closes the item and
|
|
322
|
+
* tells the agent). The request completes when nothing else is open.
|
|
323
|
+
*
|
|
324
|
+
* @param requestId - Request
|
|
325
|
+
* @param itemId - Open item
|
|
326
|
+
* @returns The closed item
|
|
327
|
+
* @throws OpenItemsError(404 / 409)
|
|
328
|
+
*/
|
|
329
|
+
skipItem(requestId: string, itemId: string): Promise<RequestOpenItem>;
|
|
302
330
|
/**
|
|
303
331
|
* Periodic pass: link late child work, catch missed readiness, nudge
|
|
304
332
|
* overdue promises once and then tell the owner, sync answered questions,
|
|
@@ -329,4 +357,11 @@ export declare class OpenItemsService {
|
|
|
329
357
|
ownerNote(request: Request, item: RequestOpenItem, pool: readonly WorkItem[], now: Date): Promise<string>;
|
|
330
358
|
private closeFollowUp;
|
|
331
359
|
}
|
|
360
|
+
/**
|
|
361
|
+
* The open-item status a settled decision leaves its question in.
|
|
362
|
+
*
|
|
363
|
+
* @param d - Decision
|
|
364
|
+
* @returns Status (`open` while it is still pending)
|
|
365
|
+
*/
|
|
366
|
+
export declare function itemStatusFor(d: Pick<OwnerDecision, 'status'>): RequestOpenItem['status'];
|
|
332
367
|
//# sourceMappingURL=open-items.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"open-items.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/open-items/open-items.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAIH,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAChF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAA6B,KAAK,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"open-items.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/open-items/open-items.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -38,6 +38,15 @@ import { formatTicketNumber } from '../../types/v2/ticket.types.js';
|
|
|
38
38
|
import { extractOpenItems } from './open-item-extractor.js';
|
|
39
39
|
import { deriveQuestionCard, questionSimilarity } from './open-item-card.js';
|
|
40
40
|
import { formatWhen } from '../decisions/decision-card.js';
|
|
41
|
+
/** Thrown for open-item requests the caller must fix (HTTP 4xx). */
|
|
42
|
+
export class OpenItemsError extends Error {
|
|
43
|
+
status;
|
|
44
|
+
constructor(status, message) {
|
|
45
|
+
super(message);
|
|
46
|
+
this.status = status;
|
|
47
|
+
this.name = 'OpenItemsError';
|
|
48
|
+
}
|
|
49
|
+
}
|
|
41
50
|
/** Statuses of a child WorkItem that count as finished work. */
|
|
42
51
|
const CHILD_DONE = new Set(['done', 'verified']);
|
|
43
52
|
/** Ticket statuses the service follows (`cancelled` closes items instead). */
|
|
@@ -370,6 +379,11 @@ export class OpenItemsService {
|
|
|
370
379
|
for (const q of found.questions) {
|
|
371
380
|
qi += 1;
|
|
372
381
|
const item = { ...base('question', qi), type: 'question', text: q.text };
|
|
382
|
+
const skipped = await this.deps.skippedQuestion?.(request.id, message.senderId, q.text).catch(() => null);
|
|
383
|
+
if (skipped) {
|
|
384
|
+
out.push({ item, skippedDecisionId: skipped.id });
|
|
385
|
+
continue;
|
|
386
|
+
}
|
|
373
387
|
const asked = await this.alreadyAsked(message.senderId, q, at);
|
|
374
388
|
out.push(asked ? { item, linkedDecisionId: asked.id } : { item, card: deriveQuestionCard(q) });
|
|
375
389
|
}
|
|
@@ -401,9 +415,13 @@ export class OpenItemsService {
|
|
|
401
415
|
* @param pool - Every WorkItem
|
|
402
416
|
* @returns The stored item
|
|
403
417
|
*/
|
|
404
|
-
async activate(request, p, pool) {
|
|
418
|
+
async activate(request, p, pool, source = 'live') {
|
|
405
419
|
const place = slackPlaceOf(request);
|
|
406
420
|
let item = { ...p.item };
|
|
421
|
+
if (p.skippedDecisionId) {
|
|
422
|
+
this.logger.info('Question the owner already skipped — not asked again', { tkt: ticketLabel(request), decisionId: p.skippedDecisionId });
|
|
423
|
+
return { ...item, status: 'skipped', decisionId: p.skippedDecisionId, closedAt: this.now().toISOString(), closedReason: `owner skipped this before (${p.skippedDecisionId})` };
|
|
424
|
+
}
|
|
407
425
|
if (item.type === 'commitment') {
|
|
408
426
|
const children = childWorkFor(request, item, pool);
|
|
409
427
|
if (children.length > 0)
|
|
@@ -427,7 +445,7 @@ export class OpenItemsService {
|
|
|
427
445
|
return item;
|
|
428
446
|
}
|
|
429
447
|
if (p.card && this.deps.askQuestion) {
|
|
430
|
-
const d = await this.deps.askQuestion({ request, item, card: p.card, place }).catch((err) => {
|
|
448
|
+
const d = await this.deps.askQuestion({ request, item, card: p.card, place, source }).catch((err) => {
|
|
431
449
|
this.logger.warn('Question card not posted', { tkt: ticketLabel(request), error: errText(err) });
|
|
432
450
|
return null;
|
|
433
451
|
});
|
|
@@ -499,9 +517,10 @@ export class OpenItemsService {
|
|
|
499
517
|
*
|
|
500
518
|
* @param requestId - Request
|
|
501
519
|
* @param planned - Items from {@link plan}
|
|
520
|
+
* @param opts - `source: 'backfill'` marks the cards it posts as backfilled
|
|
502
521
|
* @returns Updated request, or null when it is gone
|
|
503
522
|
*/
|
|
504
|
-
async adopt(requestId, planned) {
|
|
523
|
+
async adopt(requestId, planned, opts = {}) {
|
|
505
524
|
return this.serial(async () => {
|
|
506
525
|
const request = await this.deps.requests.getById(requestId);
|
|
507
526
|
if (!request)
|
|
@@ -511,7 +530,7 @@ export class OpenItemsService {
|
|
|
511
530
|
for (const p of planned) {
|
|
512
531
|
if (items.some((i) => i.id === p.item.id))
|
|
513
532
|
continue;
|
|
514
|
-
items.push(await this.activate(request, p, pool));
|
|
533
|
+
items.push(await this.activate(request, p, pool, opts.source ?? 'live'));
|
|
515
534
|
}
|
|
516
535
|
return this.save(request, items, true);
|
|
517
536
|
});
|
|
@@ -616,7 +635,7 @@ export class OpenItemsService {
|
|
|
616
635
|
if (!request)
|
|
617
636
|
return;
|
|
618
637
|
const now = this.now().toISOString();
|
|
619
|
-
const status = d
|
|
638
|
+
const status = itemStatusFor(d);
|
|
620
639
|
if (status === 'open')
|
|
621
640
|
return; // parked: still waiting on the owner
|
|
622
641
|
const answer = d.chosenKey ? d.options.find((o) => o.key === d.chosenKey)?.label : d.answerText;
|
|
@@ -634,6 +653,61 @@ export class OpenItemsService {
|
|
|
634
653
|
return fallback ?? null;
|
|
635
654
|
}
|
|
636
655
|
// -------------------------------------------------------------------------
|
|
656
|
+
// Owner skips
|
|
657
|
+
// -------------------------------------------------------------------------
|
|
658
|
+
/**
|
|
659
|
+
* The owner skipped an open item ("I don't care about this anymore"). A
|
|
660
|
+
* promise is closed, its follow-up WorkItem cancelled and the agent told
|
|
661
|
+
* once to drop it; a question's card is skipped (which closes the item and
|
|
662
|
+
* tells the agent). The request completes when nothing else is open.
|
|
663
|
+
*
|
|
664
|
+
* @param requestId - Request
|
|
665
|
+
* @param itemId - Open item
|
|
666
|
+
* @returns The closed item
|
|
667
|
+
* @throws OpenItemsError(404 / 409)
|
|
668
|
+
*/
|
|
669
|
+
async skipItem(requestId, itemId) {
|
|
670
|
+
const request = await this.deps.requests.getById(requestId);
|
|
671
|
+
if (!request)
|
|
672
|
+
throw new OpenItemsError(404, `Request ${requestId} not found`);
|
|
673
|
+
const item = (request.openItems ?? []).find((i) => i.id === itemId);
|
|
674
|
+
if (!item)
|
|
675
|
+
throw new OpenItemsError(404, `Open item ${itemId} not found on ${ticketLabel(request)}`);
|
|
676
|
+
if (!ACTIVE_OPEN_ITEM_STATUSES.has(item.status))
|
|
677
|
+
throw new OpenItemsError(409, `Open item ${itemId} is already ${item.status}`);
|
|
678
|
+
// A question with a pending card: skip the card; its settle handler closes the item.
|
|
679
|
+
if (item.type === 'question' && item.decisionId && this.deps.skipQuestion) {
|
|
680
|
+
await this.deps.skipQuestion(item.decisionId).catch(() => false);
|
|
681
|
+
}
|
|
682
|
+
let note = null;
|
|
683
|
+
const closed = await this.serial(async () => {
|
|
684
|
+
const fresh = await this.deps.requests.getById(requestId);
|
|
685
|
+
const cur = fresh?.openItems?.find((i) => i.id === itemId);
|
|
686
|
+
if (!fresh || !cur)
|
|
687
|
+
throw new OpenItemsError(404, `Open item ${itemId} not found`);
|
|
688
|
+
if (!ACTIVE_OPEN_ITEM_STATUSES.has(cur.status))
|
|
689
|
+
return cur;
|
|
690
|
+
const next = { ...cur, status: 'skipped', closedAt: this.now().toISOString(), closedReason: 'skipped by the owner' };
|
|
691
|
+
if (cur.type === 'commitment') {
|
|
692
|
+
if (cur.workItemId)
|
|
693
|
+
await this.closeFollowUp(cur.workItemId, 'cancelled', 'The owner skipped this promise');
|
|
694
|
+
note =
|
|
695
|
+
`[FOLLOW-UP ${ticketLabel(fresh)}] The owner skipped this — drop it, don't ask again. ` +
|
|
696
|
+
`You had promised: "${short(cur.text, 200)}". Don't deliver it unless the owner asks again.`;
|
|
697
|
+
}
|
|
698
|
+
else {
|
|
699
|
+
note = `[FOLLOW-UP ${ticketLabel(fresh)}] The owner skipped this — drop it, don't ask again: "${short(cur.text, 200)}".`;
|
|
700
|
+
}
|
|
701
|
+
const items = (fresh.openItems ?? []).map((i) => (i.id === itemId ? next : i));
|
|
702
|
+
await this.save(fresh, items, false);
|
|
703
|
+
return next;
|
|
704
|
+
});
|
|
705
|
+
if (note)
|
|
706
|
+
await this.deps.deliverToAgent(closed.agent, note).catch(() => false);
|
|
707
|
+
this.logger.info('Open item skipped by the owner', { tkt: ticketLabel(request), item: itemId, type: closed.type });
|
|
708
|
+
return closed;
|
|
709
|
+
}
|
|
710
|
+
// -------------------------------------------------------------------------
|
|
637
711
|
// Sweep
|
|
638
712
|
// -------------------------------------------------------------------------
|
|
639
713
|
/**
|
|
@@ -700,7 +774,7 @@ export class OpenItemsService {
|
|
|
700
774
|
const d = await this.deps.getDecision(item.decisionId).catch(() => null);
|
|
701
775
|
if (!d || d.status === 'open' || d.status === 'parked')
|
|
702
776
|
return item;
|
|
703
|
-
const status = d
|
|
777
|
+
const status = itemStatusFor(d);
|
|
704
778
|
const answer = d.chosenKey ? d.options.find((o) => o.key === d.chosenKey)?.label : d.answerText;
|
|
705
779
|
counts.closed += 1;
|
|
706
780
|
return { ...item, status, closedAt: nowIso, closedReason: `${d.id} ${d.status}`, ...(answer ? { answer } : {}) };
|
|
@@ -773,6 +847,27 @@ export class OpenItemsService {
|
|
|
773
847
|
await this.deps.closeFollowUp?.(workItemId, outcome, reason).catch((err) => this.logger.debug('Follow-up WorkItem not closed', { workItemId, error: errText(err) }));
|
|
774
848
|
}
|
|
775
849
|
}
|
|
850
|
+
/**
|
|
851
|
+
* The open-item status a settled decision leaves its question in.
|
|
852
|
+
*
|
|
853
|
+
* @param d - Decision
|
|
854
|
+
* @returns Status (`open` while it is still pending)
|
|
855
|
+
*/
|
|
856
|
+
export function itemStatusFor(d) {
|
|
857
|
+
switch (d.status) {
|
|
858
|
+
case 'resolved':
|
|
859
|
+
case 'defaulted':
|
|
860
|
+
return 'resolved';
|
|
861
|
+
case 'cancelled':
|
|
862
|
+
return 'superseded';
|
|
863
|
+
case 'expired':
|
|
864
|
+
return 'expired';
|
|
865
|
+
case 'skipped':
|
|
866
|
+
return 'skipped';
|
|
867
|
+
default:
|
|
868
|
+
return 'open';
|
|
869
|
+
}
|
|
870
|
+
}
|
|
776
871
|
/**
|
|
777
872
|
* Message of an unknown error.
|
|
778
873
|
*
|