@cleocode/core 2026.8.9 → 2026.9.1
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/dist/conduit/conduit-client.d.ts.map +1 -1
- package/dist/conduit/conduit-client.js +10 -2
- package/dist/conduit/conduit-client.js.map +1 -1
- package/dist/dispatch/mvi-projection.d.ts +38 -0
- package/dist/dispatch/mvi-projection.d.ts.map +1 -1
- package/dist/dispatch/mvi-projection.js +189 -11
- package/dist/dispatch/mvi-projection.js.map +1 -1
- package/dist/docs/export-document.js +41 -3
- package/dist/docs/export-document.js.map +2 -2
- package/dist/doctor/acceptance-drift.d.ts +258 -0
- package/dist/doctor/acceptance-drift.d.ts.map +1 -0
- package/dist/doctor/acceptance-drift.js +366 -0
- package/dist/doctor/acceptance-drift.js.map +1 -0
- package/dist/doctor/index.d.ts +4 -0
- package/dist/doctor/index.d.ts.map +1 -1
- package/dist/doctor/index.js +2 -0
- package/dist/doctor/index.js.map +1 -1
- package/dist/doctor/legacy-reaper.d.ts +105 -0
- package/dist/doctor/legacy-reaper.d.ts.map +1 -0
- package/dist/doctor/legacy-reaper.js +151 -0
- package/dist/doctor/legacy-reaper.js.map +1 -0
- package/dist/doctor/malformed-task-ids.d.ts +111 -0
- package/dist/doctor/malformed-task-ids.d.ts.map +1 -0
- package/dist/doctor/malformed-task-ids.js +139 -0
- package/dist/doctor/malformed-task-ids.js.map +1 -0
- package/dist/doctor/nexus-schema-residency.d.ts +115 -0
- package/dist/doctor/nexus-schema-residency.d.ts.map +1 -0
- package/dist/doctor/nexus-schema-residency.js +178 -0
- package/dist/doctor/nexus-schema-residency.js.map +1 -0
- package/dist/error-registry.d.ts.map +1 -1
- package/dist/error-registry.js +18 -0
- package/dist/error-registry.js.map +1 -1
- package/dist/internal.d.ts +1 -0
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +1 -0
- package/dist/internal.js.map +1 -1
- package/dist/llm/ai-sdk-warnings.d.ts +55 -0
- package/dist/llm/ai-sdk-warnings.d.ts.map +1 -0
- package/dist/llm/ai-sdk-warnings.js +83 -0
- package/dist/llm/ai-sdk-warnings.js.map +1 -0
- package/dist/llm/model-runner.d.ts +0 -8
- package/dist/llm/model-runner.d.ts.map +1 -1
- package/dist/llm/model-runner.js +8 -0
- package/dist/llm/model-runner.js.map +1 -1
- package/dist/llm/plugin-facade.js +73 -8
- package/dist/llm/plugin-facade.js.map +3 -3
- package/dist/memory/embedding-queue.d.ts +12 -0
- package/dist/memory/embedding-queue.d.ts.map +1 -1
- package/dist/memory/embedding-queue.js +39 -5
- package/dist/memory/embedding-queue.js.map +1 -1
- package/dist/orchestrate/worktree-complete.d.ts.map +1 -1
- package/dist/orchestrate/worktree-complete.js +26 -0
- package/dist/orchestrate/worktree-complete.js.map +1 -1
- package/dist/output.d.ts.map +1 -1
- package/dist/output.js +25 -0
- package/dist/output.js.map +1 -1
- package/dist/release/pr-evidence.d.ts +13 -0
- package/dist/release/pr-evidence.d.ts.map +1 -1
- package/dist/release/pr-evidence.js +54 -1
- package/dist/release/pr-evidence.js.map +1 -1
- package/dist/render/session/briefing.d.ts.map +1 -1
- package/dist/render/session/briefing.js +9 -0
- package/dist/render/session/briefing.js.map +1 -1
- package/dist/selfimprove/fix-gen.js +73 -8
- package/dist/selfimprove/fix-gen.js.map +3 -3
- package/dist/sessions/briefing.d.ts +13 -0
- package/dist/sessions/briefing.d.ts.map +1 -1
- package/dist/sessions/briefing.js +64 -7
- package/dist/sessions/briefing.js.map +1 -1
- package/dist/sessions/handoff.d.ts +32 -4
- package/dist/sessions/handoff.d.ts.map +1 -1
- package/dist/sessions/handoff.js +7 -7
- package/dist/sessions/handoff.js.map +1 -1
- package/dist/shutdown-deadline.d.ts +144 -0
- package/dist/shutdown-deadline.d.ts.map +1 -0
- package/dist/shutdown-deadline.js +187 -0
- package/dist/shutdown-deadline.js.map +1 -0
- package/dist/shutdown.d.ts +5 -2
- package/dist/shutdown.d.ts.map +1 -1
- package/dist/shutdown.js +19 -14
- package/dist/shutdown.js.map +1 -1
- package/dist/spawn/branch-lock.d.ts.map +1 -1
- package/dist/spawn/branch-lock.js +33 -0
- package/dist/spawn/branch-lock.js.map +1 -1
- package/dist/store/sqlite-data-accessor.d.ts.map +1 -1
- package/dist/store/sqlite-data-accessor.js +14 -0
- package/dist/store/sqlite-data-accessor.js.map +1 -1
- package/dist/store/tasks-sqlite.d.ts.map +1 -1
- package/dist/store/tasks-sqlite.js +16 -1
- package/dist/store/tasks-sqlite.js.map +1 -1
- package/dist/tasks/ac-immutability.d.ts.map +1 -1
- package/dist/tasks/ac-immutability.js +36 -0
- package/dist/tasks/ac-immutability.js.map +1 -1
- package/dist/tasks/add.d.ts +18 -0
- package/dist/tasks/add.d.ts.map +1 -1
- package/dist/tasks/add.js +28 -5
- package/dist/tasks/add.js.map +1 -1
- package/dist/tasks/axis-filters.d.ts +53 -0
- package/dist/tasks/axis-filters.d.ts.map +1 -0
- package/dist/tasks/axis-filters.js +77 -0
- package/dist/tasks/axis-filters.js.map +1 -0
- package/dist/tasks/complete.d.ts.map +1 -1
- package/dist/tasks/complete.js +10 -1
- package/dist/tasks/complete.js.map +1 -1
- package/dist/tasks/duplicate-detector.d.ts +67 -14
- package/dist/tasks/duplicate-detector.d.ts.map +1 -1
- package/dist/tasks/duplicate-detector.js +197 -54
- package/dist/tasks/duplicate-detector.js.map +1 -1
- package/dist/tasks/evidence.d.ts +139 -0
- package/dist/tasks/evidence.d.ts.map +1 -1
- package/dist/tasks/evidence.js +294 -25
- package/dist/tasks/evidence.js.map +1 -1
- package/dist/tasks/find.d.ts.map +1 -1
- package/dist/tasks/find.js +9 -2
- package/dist/tasks/find.js.map +1 -1
- package/dist/tasks/gate-runner.d.ts.map +1 -1
- package/dist/tasks/gate-runner.js +25 -4
- package/dist/tasks/gate-runner.js.map +1 -1
- package/dist/tasks/heavy-tool-env.d.ts +20 -0
- package/dist/tasks/heavy-tool-env.d.ts.map +1 -1
- package/dist/tasks/heavy-tool-env.js +74 -4
- package/dist/tasks/heavy-tool-env.js.map +1 -1
- package/dist/tasks/heavy-tool-limit.d.ts +134 -0
- package/dist/tasks/heavy-tool-limit.d.ts.map +1 -0
- package/dist/tasks/heavy-tool-limit.js +196 -0
- package/dist/tasks/heavy-tool-limit.js.map +1 -0
- package/dist/tasks/index.d.ts +1 -1
- package/dist/tasks/index.d.ts.map +1 -1
- package/dist/tasks/index.js +1 -1
- package/dist/tasks/index.js.map +1 -1
- package/dist/tasks/infer-add-params.d.ts +28 -0
- package/dist/tasks/infer-add-params.d.ts.map +1 -1
- package/dist/tasks/infer-add-params.js +96 -6
- package/dist/tasks/infer-add-params.js.map +1 -1
- package/dist/tasks/list.d.ts +30 -1
- package/dist/tasks/list.d.ts.map +1 -1
- package/dist/tasks/list.js +14 -0
- package/dist/tasks/list.js.map +1 -1
- package/dist/tasks/ops.d.ts +4 -0
- package/dist/tasks/ops.d.ts.map +1 -1
- package/dist/tasks/ops.js +2 -0
- package/dist/tasks/ops.js.map +1 -1
- package/dist/tasks/session-scope.d.ts +51 -4
- package/dist/tasks/session-scope.d.ts.map +1 -1
- package/dist/tasks/session-scope.js +68 -10
- package/dist/tasks/session-scope.js.map +1 -1
- package/dist/tasks/tool-cache.d.ts +116 -9
- package/dist/tasks/tool-cache.d.ts.map +1 -1
- package/dist/tasks/tool-cache.js +127 -16
- package/dist/tasks/tool-cache.js.map +1 -1
- package/dist/tasks/tool-semaphore.d.ts +91 -0
- package/dist/tasks/tool-semaphore.d.ts.map +1 -1
- package/dist/tasks/tool-semaphore.js +203 -14
- package/dist/tasks/tool-semaphore.js.map +1 -1
- package/dist/validation/doctor/checks.d.ts +64 -0
- package/dist/validation/doctor/checks.d.ts.map +1 -1
- package/dist/validation/doctor/checks.js +249 -0
- package/dist/validation/doctor/checks.js.map +1 -1
- package/dist/validation/engine-ops.d.ts.map +1 -1
- package/dist/validation/engine-ops.js +41 -5
- package/dist/validation/engine-ops.js.map +1 -1
- package/package.json +13 -13
- package/templates/CLEO-INJECTION.md +28 -44
- package/dist/backfill/adr-backfill-walker.d.ts +0 -57
- package/dist/backfill/adr-backfill-walker.d.ts.map +0 -1
- package/dist/backfill/adr-backfill-walker.js +0 -631
- package/dist/backfill/adr-backfill-walker.js.map +0 -1
- package/dist/tasks/graph-rag.d.ts +0 -49
- package/dist/tasks/graph-rag.d.ts.map +0 -1
- package/dist/tasks/graph-rag.js +0 -328
- package/dist/tasks/graph-rag.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conduit-client.d.ts","sourceRoot":"","sources":["../../src/conduit/conduit-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,OAAO,EACP,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,0BAA0B,EAC1B,4BAA4B,EAC5B,kBAAkB,EAClB,SAAS,EACV,MAAM,qBAAqB,CAAC;AAE7B,8EAA8E;AAC9E,qBAAa,aAAc,YAAW,OAAO;IAC3C,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,KAAK,CAAgC;IAE7C,2EAA2E;gBAC/D,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe;IAK7D,8CAA8C;IAC9C,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,gFAAgF;IAChF,QAAQ,IAAI,YAAY;IAIxB,mEAAmE;IAC7D,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB9B,mEAAmE;IAC7D,IAAI,CACR,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"conduit-client.d.ts","sourceRoot":"","sources":["../../src/conduit/conduit-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,OAAO,EACP,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,0BAA0B,EAC1B,4BAA4B,EAC5B,kBAAkB,EAClB,SAAS,EACV,MAAM,qBAAqB,CAAC;AAE7B,8EAA8E;AAC9E,qBAAa,aAAc,YAAW,OAAO;IAC3C,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,KAAK,CAAgC;IAE7C,2EAA2E;gBAC/D,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe;IAK7D,8CAA8C;IAC9C,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,gFAAgF;IAChF,QAAQ,IAAI,YAAY;IAIxB,mEAAmE;IAC7D,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB9B,mEAAmE;IAC7D,IAAI,CACR,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,iBAAiB,CAAC;IAc7B,gFAAgF;IAC1E,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAInF,2FAA2F;IAC3F,SAAS,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,GAAG,kBAAkB;IAgBzE,iEAAiE;IAC3D,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAKhC,0EAA0E;IACpE,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAmBjD;;;;;;;;;;;OAWG;IACG,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,4BAA4B,GAAG,OAAO,CAAC,IAAI,CAAC;IAS9F;;;;;;;;;OASG;IACG,cAAc,CAClB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,0BAA0B,GACnC,OAAO,CAAC,iBAAiB,CAAC;IAiB7B;;;;;;;;OAQG;IACH,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,GAAG,kBAAkB;IAS1F;;;;;;OAMG;IACG,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASxD,gEAAgE;IAC1D,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAIlC"}
|
|
@@ -50,7 +50,11 @@ export class ConduitClient {
|
|
|
50
50
|
});
|
|
51
51
|
return {
|
|
52
52
|
messageId: result.messageId,
|
|
53
|
-
|
|
53
|
+
// gh#1316: the transport has just written this row `status='pending'` and
|
|
54
|
+
// returns no delivery time. `acceptedAt` is what we actually know;
|
|
55
|
+
// `deliveredAt` stays null until a later path records real delivery.
|
|
56
|
+
acceptedAt: new Date().toISOString(),
|
|
57
|
+
deliveredAt: null,
|
|
54
58
|
};
|
|
55
59
|
}
|
|
56
60
|
/** One-shot poll for new messages. Delegates to the transport's poll method. */
|
|
@@ -134,7 +138,11 @@ export class ConduitClient {
|
|
|
134
138
|
const result = await this.transport.publishToTopic(topicName, content, options);
|
|
135
139
|
return {
|
|
136
140
|
messageId: result.messageId,
|
|
137
|
-
|
|
141
|
+
// gh#1316: the transport has just written this row `status='pending'` and
|
|
142
|
+
// returns no delivery time. `acceptedAt` is what we actually know;
|
|
143
|
+
// `deliveredAt` stays null until a later path records real delivery.
|
|
144
|
+
acceptedAt: new Date().toISOString(),
|
|
145
|
+
deliveredAt: null,
|
|
138
146
|
};
|
|
139
147
|
}
|
|
140
148
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conduit-client.js","sourceRoot":"","sources":["../../src/conduit/conduit-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAeH,8EAA8E;AAC9E,MAAM,OAAO,aAAa;IAChB,SAAS,CAAY;IACrB,UAAU,CAAkB;IAC5B,KAAK,GAAiB,cAAc,CAAC;IAE7C,2EAA2E;IAC3E,YAAY,SAAoB,EAAE,UAA2B;QAC3D,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,8CAA8C;IAC9C,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;IACjC,CAAC;IAED,gFAAgF;IAChF,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,mEAAmE;IACnE,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC;QAC1B,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;gBAC3B,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO;gBAChC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;gBAC9B,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU;gBACtC,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe;aACnC,CAAC,CAAC;YACH,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC;QAC3B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,uEAAuE;YACvE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;YACrB,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAED,mEAAmE;IACnE,KAAK,CAAC,IAAI,CACR,EAAU,EACV,OAAe,EACf,OAA4B;QAE5B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE;YACpD,cAAc,EAAE,OAAO,EAAE,QAAQ;SAClC,CAAC,CAAC;QACH,OAAO;YACL,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,
|
|
1
|
+
{"version":3,"file":"conduit-client.js","sourceRoot":"","sources":["../../src/conduit/conduit-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -36,6 +36,44 @@ export type ProjectionMode = 'mvi' | 'full';
|
|
|
36
36
|
* record shape, the record is passed through untouched (no field stripping).
|
|
37
37
|
*/
|
|
38
38
|
export type ProjectionKind = 'task' | 'epic' | 'saga' | 'doc' | 'unknown';
|
|
39
|
+
/**
|
|
40
|
+
* Envelope key naming every field the projection withheld.
|
|
41
|
+
*
|
|
42
|
+
* Why this exists (T12121 · GH #1243)
|
|
43
|
+
* -----------------------------------
|
|
44
|
+
* The MVI projection dropped non-allow-listed fields with NO record of having
|
|
45
|
+
* done so, and `description` is not on the task allow-list. So
|
|
46
|
+
* `cleo show <id>` returned a task whose 1440-character description was not
|
|
47
|
+
* truncated, not null — the key was simply ABSENT. An absent key and an empty
|
|
48
|
+
* value are indistinguishable to every consumer, so the idiomatic, careful
|
|
49
|
+
* read reported a populated field as empty:
|
|
50
|
+
*
|
|
51
|
+
* ```python
|
|
52
|
+
* desc = task.get('description') or '' # -> '' for a 1440-char description
|
|
53
|
+
* ```
|
|
54
|
+
*
|
|
55
|
+
* That turned a read defect into a DATA-LOSS defect on 2026-09-12: one agent
|
|
56
|
+
* filed T289 with a full mechanism description; a second ran `cleo show T289`
|
|
57
|
+
* without `--full`, read nothing, correctly-by-its-own-logic concluded the
|
|
58
|
+
* task was a title-only stub, and overwrote the description. It also broke
|
|
59
|
+
* CLEO's own documented recovery for a killed write ("query before retrying"),
|
|
60
|
+
* because querying without `--full` reports the record as empty — so the
|
|
61
|
+
* recommended recovery step is exactly what authorises the clobber.
|
|
62
|
+
*
|
|
63
|
+
* The invariant this key restores: **a field that exists on the record is
|
|
64
|
+
* present in the envelope, or is explicitly marked as withheld.** The marker
|
|
65
|
+
* carries each withheld field's content size, which is the signal that
|
|
66
|
+
* distinguishes the two cases the incident confused — a genuine stub has no
|
|
67
|
+
* marker at all, while a populated record reports `{ description: 1440 }`.
|
|
68
|
+
*
|
|
69
|
+
* A withheld field's VALUE is deliberately not reproduced here, truncated or
|
|
70
|
+
* otherwise. A truncated copy under the real field name would be worse than
|
|
71
|
+
* absence: a consumer that read it and wrote it back would silently corrupt
|
|
72
|
+
* the record, where absence only risks an overwrite with fresh text.
|
|
73
|
+
*
|
|
74
|
+
* @task T12121
|
|
75
|
+
*/
|
|
76
|
+
export declare const WITHHELD_KEY = "_withheld";
|
|
39
77
|
/**
|
|
40
78
|
* Project a single record down to its MVI field-set for the given kind.
|
|
41
79
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mvi-projection.d.ts","sourceRoot":"","sources":["../../src/dispatch/mvi-projection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAIH;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,CAAC;AAE5C;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"mvi-projection.d.ts","sourceRoot":"","sources":["../../src/dispatch/mvi-projection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAIH;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,CAAC;AAE5C;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC;AAE1E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,eAAO,MAAM,YAAY,cAAc,CAAC;AA6MxC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1D,MAAM,EAAE,CAAC,EACT,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,CAAC,CAAC,CAKZ;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;;;OAKG;IACH,IAAI,EAAE,cAAc,CAAC;IACrB;;;OAGG;IACH,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAwDD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1D,MAAM,EAAE,CAAC,EACT,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,CAAC,CAAC,CAuBZ;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9D,OAAO,EAAE,SAAS,CAAC,EAAE,EACrB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,CAAC,CAAC,EAAE,CAEd;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,IAAI,EAAE,cAAc,CAAC;IACrB;;;OAGG;IACH,IAAI,EAAE,OAAO,CAAC;CACf;AAED,uDAAuD;AACvD,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAMrE,CAAC;AAEF;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,OAAO,EACb,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,cAAc,GACnB,OAAO,CA+BT;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,cAAc,CAEjF"}
|
|
@@ -23,6 +23,44 @@
|
|
|
23
23
|
* @task T11351 (Epic T11285 EP-MVI-PRIMITIVE) — generalized budget-aware projector
|
|
24
24
|
*/
|
|
25
25
|
import { TokenEstimator } from '@cleocode/lafs';
|
|
26
|
+
/**
|
|
27
|
+
* Envelope key naming every field the projection withheld.
|
|
28
|
+
*
|
|
29
|
+
* Why this exists (T12121 · GH #1243)
|
|
30
|
+
* -----------------------------------
|
|
31
|
+
* The MVI projection dropped non-allow-listed fields with NO record of having
|
|
32
|
+
* done so, and `description` is not on the task allow-list. So
|
|
33
|
+
* `cleo show <id>` returned a task whose 1440-character description was not
|
|
34
|
+
* truncated, not null — the key was simply ABSENT. An absent key and an empty
|
|
35
|
+
* value are indistinguishable to every consumer, so the idiomatic, careful
|
|
36
|
+
* read reported a populated field as empty:
|
|
37
|
+
*
|
|
38
|
+
* ```python
|
|
39
|
+
* desc = task.get('description') or '' # -> '' for a 1440-char description
|
|
40
|
+
* ```
|
|
41
|
+
*
|
|
42
|
+
* That turned a read defect into a DATA-LOSS defect on 2026-09-12: one agent
|
|
43
|
+
* filed T289 with a full mechanism description; a second ran `cleo show T289`
|
|
44
|
+
* without `--full`, read nothing, correctly-by-its-own-logic concluded the
|
|
45
|
+
* task was a title-only stub, and overwrote the description. It also broke
|
|
46
|
+
* CLEO's own documented recovery for a killed write ("query before retrying"),
|
|
47
|
+
* because querying without `--full` reports the record as empty — so the
|
|
48
|
+
* recommended recovery step is exactly what authorises the clobber.
|
|
49
|
+
*
|
|
50
|
+
* The invariant this key restores: **a field that exists on the record is
|
|
51
|
+
* present in the envelope, or is explicitly marked as withheld.** The marker
|
|
52
|
+
* carries each withheld field's content size, which is the signal that
|
|
53
|
+
* distinguishes the two cases the incident confused — a genuine stub has no
|
|
54
|
+
* marker at all, while a populated record reports `{ description: 1440 }`.
|
|
55
|
+
*
|
|
56
|
+
* A withheld field's VALUE is deliberately not reproduced here, truncated or
|
|
57
|
+
* otherwise. A truncated copy under the real field name would be worse than
|
|
58
|
+
* absence: a consumer that read it and wrote it back would silently corrupt
|
|
59
|
+
* the record, where absence only risks an overwrite with fresh text.
|
|
60
|
+
*
|
|
61
|
+
* @task T12121
|
|
62
|
+
*/
|
|
63
|
+
export const WITHHELD_KEY = '_withheld';
|
|
26
64
|
/**
|
|
27
65
|
* Allow-list of fields kept for each known kind under `'mvi'` mode.
|
|
28
66
|
*
|
|
@@ -78,20 +116,143 @@ const GENERIC_MVI_FIELDS = new Set([
|
|
|
78
116
|
'parentId',
|
|
79
117
|
]);
|
|
80
118
|
/**
|
|
81
|
-
*
|
|
119
|
+
* Byte size of a field's JSON-serialized value, or `0` when it has no content.
|
|
120
|
+
*
|
|
121
|
+
* Used to describe a withheld field without reproducing it. A truncated copy
|
|
122
|
+
* under the real field name would be worse than absence: a consumer that read
|
|
123
|
+
* it and wrote it back would silently CORRUPT the record, where absence only
|
|
124
|
+
* risks an overwrite. A size is inert.
|
|
125
|
+
*
|
|
126
|
+
* @internal
|
|
127
|
+
*/
|
|
128
|
+
function contentBytes(value) {
|
|
129
|
+
if (value === null || value === undefined)
|
|
130
|
+
return 0;
|
|
131
|
+
if (typeof value === 'string')
|
|
132
|
+
return value.length;
|
|
133
|
+
if (Array.isArray(value))
|
|
134
|
+
return value.length === 0 ? 0 : JSON.stringify(value).length;
|
|
135
|
+
if (typeof value === 'object') {
|
|
136
|
+
return Object.keys(value).length === 0
|
|
137
|
+
? 0
|
|
138
|
+
: JSON.stringify(value).length;
|
|
139
|
+
}
|
|
140
|
+
return String(value).length;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Pick the MVI-allow-listed keys out of a record, reporting what was withheld.
|
|
144
|
+
*
|
|
145
|
+
* @returns `picked` — the allow-listed subset; `withheld` — a field→byte-size
|
|
146
|
+
* map of keys that were present on the source record WITH CONTENT and
|
|
147
|
+
* are absent from `picked`. Fields that were null/undefined/empty are
|
|
148
|
+
* deliberately not reported: their absence tells no lie, and listing
|
|
149
|
+
* them would bury the ones that do.
|
|
82
150
|
*
|
|
83
151
|
* @internal
|
|
84
152
|
*/
|
|
85
153
|
function pickFields(record, allow) {
|
|
86
|
-
const
|
|
154
|
+
const picked = {};
|
|
155
|
+
const withheld = {};
|
|
87
156
|
for (const key of Object.keys(record)) {
|
|
88
157
|
if (allow.has(key)) {
|
|
89
158
|
// Index assertion is safe: `key` came from Object.keys(record).
|
|
90
|
-
|
|
159
|
+
picked[key] = record[key];
|
|
160
|
+
continue;
|
|
91
161
|
}
|
|
162
|
+
if (key === WITHHELD_KEY)
|
|
163
|
+
continue;
|
|
164
|
+
const bytes = contentBytes(record[key]);
|
|
165
|
+
if (bytes > 0)
|
|
166
|
+
withheld[key] = bytes;
|
|
167
|
+
}
|
|
168
|
+
return { picked, withheld };
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Attach the {@link WITHHELD_KEY} marker to a projected record.
|
|
172
|
+
*
|
|
173
|
+
* The marker is inserted immediately after `id` so that, under a token budget,
|
|
174
|
+
* {@link reduceToBudget}'s drop-from-the-end order sacrifices content fields
|
|
175
|
+
* before the statement of what is missing. A record that admits it is partial
|
|
176
|
+
* is more useful than one extra field with no warning.
|
|
177
|
+
*
|
|
178
|
+
* @internal
|
|
179
|
+
*/
|
|
180
|
+
function withWithheldMarker(projected, withheld) {
|
|
181
|
+
if (Object.keys(withheld).length === 0)
|
|
182
|
+
return projected;
|
|
183
|
+
const sorted = {};
|
|
184
|
+
for (const key of Object.keys(withheld).sort()) {
|
|
185
|
+
const bytes = withheld[key];
|
|
186
|
+
if (bytes !== undefined)
|
|
187
|
+
sorted[key] = bytes;
|
|
188
|
+
}
|
|
189
|
+
const source = projected;
|
|
190
|
+
const out = {};
|
|
191
|
+
if ('id' in source)
|
|
192
|
+
out['id'] = source['id'];
|
|
193
|
+
out[WITHHELD_KEY] = sorted;
|
|
194
|
+
for (const key of Object.keys(source)) {
|
|
195
|
+
if (key === 'id' || key === WITHHELD_KEY)
|
|
196
|
+
continue;
|
|
197
|
+
out[key] = source[key];
|
|
92
198
|
}
|
|
93
199
|
return out;
|
|
94
200
|
}
|
|
201
|
+
/**
|
|
202
|
+
* Every key on `record` that carries content, excluding the marker itself.
|
|
203
|
+
*
|
|
204
|
+
* @internal
|
|
205
|
+
*/
|
|
206
|
+
function contentBearingKeys(record) {
|
|
207
|
+
return Object.keys(record).filter((key) => key !== WITHHELD_KEY && contentBytes(record[key]) > 0);
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Project under a hard token budget while still telling the truth about what
|
|
211
|
+
* was withheld.
|
|
212
|
+
*
|
|
213
|
+
* The marker costs tokens, so it cannot simply be bolted on after reduction —
|
|
214
|
+
* doing so overshot a 61-token budget by 123 tokens in testing, breaking the
|
|
215
|
+
* budget's "hard" guarantee. Instead the marker participates in the budget:
|
|
216
|
+
* each round recomputes it against the surviving key set, and if the marked
|
|
217
|
+
* record still does not fit, one more content field is sacrificed and the
|
|
218
|
+
* marker is recomputed to account for it.
|
|
219
|
+
*
|
|
220
|
+
* At budgets too small to carry any marker the record degrades to `{ id }`.
|
|
221
|
+
* That boundary is acceptable precisely because `{ id }` is self-evidently not
|
|
222
|
+
* a full record — it cannot be mistaken for a complete one, which is the
|
|
223
|
+
* failure mode this marker exists to prevent.
|
|
224
|
+
*
|
|
225
|
+
* @internal
|
|
226
|
+
*/
|
|
227
|
+
function projectWithinBudget(original, picked, budget, estimator) {
|
|
228
|
+
const contentKeys = contentBearingKeys(original);
|
|
229
|
+
let candidate = picked;
|
|
230
|
+
for (;;) {
|
|
231
|
+
const surviving = new Set(Object.keys(candidate));
|
|
232
|
+
const withheld = {};
|
|
233
|
+
for (const key of contentKeys) {
|
|
234
|
+
if (!surviving.has(key)) {
|
|
235
|
+
withheld[key] = contentBytes(original[key]);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
const marked = withWithheldMarker({ ...candidate }, withheld);
|
|
239
|
+
if (estimator.estimate(marked) <= budget)
|
|
240
|
+
return marked;
|
|
241
|
+
const droppable = Object.keys(candidate).filter((k) => k !== 'id' && k !== WITHHELD_KEY);
|
|
242
|
+
if (droppable.length === 0)
|
|
243
|
+
break;
|
|
244
|
+
const victim = droppable[droppable.length - 1];
|
|
245
|
+
const next = {};
|
|
246
|
+
for (const key of Object.keys(candidate)) {
|
|
247
|
+
if (key === victim)
|
|
248
|
+
continue;
|
|
249
|
+
next[key] = candidate[key];
|
|
250
|
+
}
|
|
251
|
+
candidate = next;
|
|
252
|
+
}
|
|
253
|
+
// The marker itself cannot fit. Fall back to the unmarked minimum.
|
|
254
|
+
return reduceToBudget(picked, budget, estimator).record;
|
|
255
|
+
}
|
|
95
256
|
/**
|
|
96
257
|
* Project a single record down to its MVI field-set for the given kind.
|
|
97
258
|
*
|
|
@@ -116,7 +277,8 @@ export function projectMvi(record, kind) {
|
|
|
116
277
|
if (kind === 'unknown')
|
|
117
278
|
return record;
|
|
118
279
|
const allow = MVI_FIELDS[kind];
|
|
119
|
-
|
|
280
|
+
const { picked, withheld } = pickFields(record, allow);
|
|
281
|
+
return withWithheldMarker(picked, withheld);
|
|
120
282
|
}
|
|
121
283
|
/**
|
|
122
284
|
* Drop trailing keys from a record until the LAFS token estimate fits `budget`.
|
|
@@ -131,8 +293,19 @@ export function projectMvi(record, kind) {
|
|
|
131
293
|
*/
|
|
132
294
|
function reduceToBudget(record, budget, estimator) {
|
|
133
295
|
if (estimator.estimate(record) <= budget)
|
|
134
|
-
return record;
|
|
296
|
+
return { record, dropped: {} };
|
|
135
297
|
const keys = Object.keys(record);
|
|
298
|
+
const droppedOf = (kept) => {
|
|
299
|
+
const dropped = {};
|
|
300
|
+
for (const key of keys) {
|
|
301
|
+
if (key in kept)
|
|
302
|
+
continue;
|
|
303
|
+
const bytes = contentBytes(record[key]);
|
|
304
|
+
if (bytes > 0)
|
|
305
|
+
dropped[key] = bytes;
|
|
306
|
+
}
|
|
307
|
+
return dropped;
|
|
308
|
+
};
|
|
136
309
|
// Drop non-id keys from the end until we fit (or only id remains).
|
|
137
310
|
const droppable = keys.filter((k) => k !== 'id');
|
|
138
311
|
for (let drop = 1; drop <= droppable.length; drop++) {
|
|
@@ -147,15 +320,16 @@ function reduceToBudget(record, budget, estimator) {
|
|
|
147
320
|
if (keep.has(key))
|
|
148
321
|
candidate[key] = record[key];
|
|
149
322
|
}
|
|
150
|
-
if (estimator.estimate(candidate) <= budget)
|
|
151
|
-
return candidate;
|
|
323
|
+
if (estimator.estimate(candidate) <= budget) {
|
|
324
|
+
return { record: candidate, dropped: droppedOf(candidate) };
|
|
325
|
+
}
|
|
152
326
|
}
|
|
153
327
|
// Last resort: id only (or empty when there is no id).
|
|
154
328
|
const minimal = {};
|
|
155
329
|
if ('id' in record) {
|
|
156
330
|
minimal['id'] = record['id'];
|
|
157
331
|
}
|
|
158
|
-
return minimal;
|
|
332
|
+
return { record: minimal, dropped: droppedOf(minimal) };
|
|
159
333
|
}
|
|
160
334
|
/**
|
|
161
335
|
* The single, generalized, budget-aware MVI projector.
|
|
@@ -203,12 +377,16 @@ export function projectMVI(record, options) {
|
|
|
203
377
|
const allow = options.kind === 'unknown' || !(options.kind in MVI_FIELDS)
|
|
204
378
|
? GENERIC_MVI_FIELDS
|
|
205
379
|
: MVI_FIELDS[options.kind];
|
|
206
|
-
const
|
|
380
|
+
const { picked, withheld } = pickFields(record, allow);
|
|
207
381
|
// Step 4: optional token-budget reduction via the LAFS estimator.
|
|
382
|
+
// T12121 (GH #1243): budget reduction is the SECOND way a field used to
|
|
383
|
+
// vanish without a trace — `reduceToBudget` drops trailing keys to fit, and
|
|
384
|
+
// in the last-resort case strips everything but `id`. Those drops are merged
|
|
385
|
+
// into the same marker, so "withheld" means withheld for ANY reason.
|
|
208
386
|
if (typeof options.budget === 'number' && options.budget > 0) {
|
|
209
|
-
return
|
|
387
|
+
return projectWithinBudget(record, picked, options.budget, new TokenEstimator());
|
|
210
388
|
}
|
|
211
|
-
return
|
|
389
|
+
return withWithheldMarker(picked, withheld);
|
|
212
390
|
}
|
|
213
391
|
/**
|
|
214
392
|
* Project every element of an array via {@link projectMvi}.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mvi-projection.js","sourceRoot":"","sources":["../../src/dispatch/mvi-projection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAkBhD;;;;;;GAMG;AACH,MAAM,UAAU,GAAoE;IAClF,IAAI,EAAE,IAAI,GAAG,CAAC;QACZ,IAAI;QACJ,OAAO;QACP,QAAQ;QACR,UAAU;QACV,UAAU;QACV,MAAM;QACN,MAAM;QACN,gBAAgB;KACjB,CAAC;IACF,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;IAC/F,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;IACpF,GAAG,EAAE,IAAI,GAAG,CAAC;QACX,IAAI;QACJ,MAAM;QACN,MAAM;QACN,MAAM;QACN,QAAQ;QACR,MAAM;QACN,MAAM;QACN,WAAW;QACX,UAAU;QACV,aAAa;KACd,CAAC;CACH,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,kBAAkB,GAAwB,IAAI,GAAG,CAAC;IACtD,IAAI;IACJ,OAAO;IACP,MAAM;IACN,MAAM;IACN,QAAQ;IACR,UAAU;IACV,MAAM;IACN,MAAM;IACN,UAAU;CACX,CAAC,CAAC;AAEH
|
|
1
|
+
{"version":3,"file":"mvi-projection.js","sourceRoot":"","sources":["../../src/dispatch/mvi-projection.ts"],"names":[],"mappings":"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"}
|
|
@@ -1475,7 +1475,7 @@ var init_output_contracts_data = __esm({
|
|
|
1475
1475
|
init_service();
|
|
1476
1476
|
tasksShowOutputContract = {
|
|
1477
1477
|
operation: "tasks.show",
|
|
1478
|
-
shapeNote: "The task record is nested under `task` \u2014 use /data/task/<field>, not /data/<field>. `view` may be null. `acRows` and `relations` are conditional.
|
|
1478
|
+
shapeNote: "The task record is nested under `task` \u2014 use /data/task/<field>, not /data/<field>. Mutation envelopes are FLAT by contrast (/data/created/0, /data/updated/0), which is the asymmetry that produced GH #1225/#1239/#1231. `view` may be null. `acRows` and `relations` are conditional. `description`, `acceptance` and `verification` are withheld by the default (MVI) projection but `--field` resolves them transparently (T12108) \u2014 no `--full` needed. Evidence is NOT a task field: it lives at /data/task/verification/evidence (keyed by gate), alongside /data/task/verification/gates. T12127 (GH #1231) \u2014 the previous wording advertised `/data/task/evidence`, which does not exist, in the very text shown to an agent whose pointer had just failed.",
|
|
1479
1479
|
dataSchema: {
|
|
1480
1480
|
type: "object",
|
|
1481
1481
|
required: ["task", "view", "attachments"],
|
|
@@ -1519,6 +1519,16 @@ var init_output_contracts_data = __esm({
|
|
|
1519
1519
|
"/data/task/priority",
|
|
1520
1520
|
"/data/task/type",
|
|
1521
1521
|
"/data/task/parentId",
|
|
1522
|
+
// T12127 (GH #1231) — withheld by the MVI projection but resolvable
|
|
1523
|
+
// through `--field` since T12108. They were absent from this list, so the
|
|
1524
|
+
// remediation an agent is shown on a failed pointer never mentioned the
|
|
1525
|
+
// fields it most often wanted, and `cleo show --field /data/task` came
|
|
1526
|
+
// back looking like a write that had silently done nothing.
|
|
1527
|
+
"/data/task/description",
|
|
1528
|
+
"/data/task/acceptance",
|
|
1529
|
+
"/data/task/verification",
|
|
1530
|
+
"/data/task/verification/gates",
|
|
1531
|
+
"/data/task/verification/evidence",
|
|
1522
1532
|
"/data/view/id",
|
|
1523
1533
|
"/data/view/title"
|
|
1524
1534
|
]
|
|
@@ -2189,19 +2199,31 @@ var init_operations_registry = __esm({
|
|
|
2189
2199
|
{ name: "status", type: "string", required: false, description: "Filter by task status" },
|
|
2190
2200
|
{ name: "priority", type: "string", required: false, description: "Filter by task priority" },
|
|
2191
2201
|
{ name: "type", type: "string", required: false, description: "Filter by task type" },
|
|
2202
|
+
{
|
|
2203
|
+
name: "severity",
|
|
2204
|
+
type: "string",
|
|
2205
|
+
required: false,
|
|
2206
|
+
description: "Filter by severity axis (P0|P1|P2|P3); invalid values are rejected"
|
|
2207
|
+
},
|
|
2208
|
+
{
|
|
2209
|
+
name: "kind",
|
|
2210
|
+
type: "string",
|
|
2211
|
+
required: false,
|
|
2212
|
+
description: "Filter by kind axis (work|research|experiment|bug|spike|release); invalid values are rejected"
|
|
2213
|
+
},
|
|
2192
2214
|
{ name: "phase", type: "string", required: false, description: "Filter by task phase" },
|
|
2193
2215
|
{ name: "label", type: "string", required: false, description: "Filter by task label" },
|
|
2194
2216
|
{
|
|
2195
2217
|
name: "children",
|
|
2196
2218
|
type: "boolean",
|
|
2197
2219
|
required: false,
|
|
2198
|
-
description: "
|
|
2220
|
+
description: "DEPRECATED (no effect; slated for removal in a future major): --parent already returns DIRECT children only, for every parent type including sagas. Do not use."
|
|
2199
2221
|
},
|
|
2200
2222
|
{
|
|
2201
2223
|
name: "limit",
|
|
2202
2224
|
type: "number",
|
|
2203
2225
|
required: false,
|
|
2204
|
-
description: "Maximum number of tasks to return"
|
|
2226
|
+
description: "Maximum number of tasks to return (default 10). Use --all to return every match. (--limit 0 also returns every match, but only on this command \u2014 prefer --all.)"
|
|
2205
2227
|
},
|
|
2206
2228
|
{
|
|
2207
2229
|
name: "offset",
|
|
@@ -15710,6 +15732,13 @@ var init_collection_keys = __esm({
|
|
|
15710
15732
|
}
|
|
15711
15733
|
});
|
|
15712
15734
|
|
|
15735
|
+
// packages/contracts/src/task-id.ts
|
|
15736
|
+
var init_task_id = __esm({
|
|
15737
|
+
"packages/contracts/src/task-id.ts"() {
|
|
15738
|
+
"use strict";
|
|
15739
|
+
}
|
|
15740
|
+
});
|
|
15741
|
+
|
|
15713
15742
|
// packages/contracts/src/index.ts
|
|
15714
15743
|
var init_src = __esm({
|
|
15715
15744
|
"packages/contracts/src/index.ts"() {
|
|
@@ -15779,6 +15808,7 @@ var init_src = __esm({
|
|
|
15779
15808
|
init_workgraph();
|
|
15780
15809
|
init_caamp_markers();
|
|
15781
15810
|
init_collection_keys();
|
|
15811
|
+
init_task_id();
|
|
15782
15812
|
}
|
|
15783
15813
|
});
|
|
15784
15814
|
|
|
@@ -38239,6 +38269,14 @@ async function createSqliteDataAccessor(cwd) {
|
|
|
38239
38269
|
if (filters.priority) conditions.push(eq8(tasksTasks.priority, filters.priority));
|
|
38240
38270
|
if (filters.type) conditions.push(eq8(tasksTasks.type, filters.type));
|
|
38241
38271
|
if (filters.phase) conditions.push(eq8(tasksTasks.phase, filters.phase));
|
|
38272
|
+
if (filters.severity) {
|
|
38273
|
+
const severities = Array.isArray(filters.severity) ? filters.severity : [filters.severity];
|
|
38274
|
+
conditions.push(inArray4(tasksTasks.severity, severities));
|
|
38275
|
+
}
|
|
38276
|
+
if (filters.kind) {
|
|
38277
|
+
const kinds = Array.isArray(filters.kind) ? filters.kind : [filters.kind];
|
|
38278
|
+
conditions.push(inArray4(tasksTasks.kind, kinds));
|
|
38279
|
+
}
|
|
38242
38280
|
if (filters.parentId !== void 0) {
|
|
38243
38281
|
if (filters.parentId === null) {
|
|
38244
38282
|
conditions.push(isNull3(tasksTasks.parentId));
|