@nestos/kanban 0.0.0-stage → 0.5.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.
Files changed (99) hide show
  1. package/README.md +121 -2
  2. package/dist/activity-C6xDM-cg.d.cts +232 -0
  3. package/dist/activity-Dw8DOw0L.d.ts +232 -0
  4. package/dist/activity.cjs +288 -0
  5. package/dist/activity.cjs.map +1 -0
  6. package/dist/activity.d.cts +34 -0
  7. package/dist/activity.d.ts +34 -0
  8. package/dist/activity.js +288 -0
  9. package/dist/activity.js.map +1 -0
  10. package/dist/chunk-2YFPV5GF.cjs +16 -0
  11. package/dist/chunk-2YFPV5GF.cjs.map +1 -0
  12. package/dist/chunk-4KF7KUAI.cjs +221 -0
  13. package/dist/chunk-4KF7KUAI.cjs.map +1 -0
  14. package/dist/chunk-4XF6LQSU.cjs +9 -0
  15. package/dist/chunk-4XF6LQSU.cjs.map +1 -0
  16. package/dist/chunk-5DLZWW5Y.js +148 -0
  17. package/dist/chunk-5DLZWW5Y.js.map +1 -0
  18. package/dist/chunk-5XKOCKY2.js +58 -0
  19. package/dist/chunk-5XKOCKY2.js.map +1 -0
  20. package/dist/chunk-6MN3H3YF.cjs +183 -0
  21. package/dist/chunk-6MN3H3YF.cjs.map +1 -0
  22. package/dist/chunk-ATUFFNLV.js +221 -0
  23. package/dist/chunk-ATUFFNLV.js.map +1 -0
  24. package/dist/chunk-DFTOTBGF.js +439 -0
  25. package/dist/chunk-DFTOTBGF.js.map +1 -0
  26. package/dist/chunk-G6FCDLDF.js +16 -0
  27. package/dist/chunk-G6FCDLDF.js.map +1 -0
  28. package/dist/chunk-IUI5CI2S.cjs +439 -0
  29. package/dist/chunk-IUI5CI2S.cjs.map +1 -0
  30. package/dist/chunk-KYNYPKKH.cjs +71 -0
  31. package/dist/chunk-KYNYPKKH.cjs.map +1 -0
  32. package/dist/chunk-L44TM4EE.cjs +1498 -0
  33. package/dist/chunk-L44TM4EE.cjs.map +1 -0
  34. package/dist/chunk-LSE6JG5I.cjs +20 -0
  35. package/dist/chunk-LSE6JG5I.cjs.map +1 -0
  36. package/dist/chunk-O4OGAAV4.js +71 -0
  37. package/dist/chunk-O4OGAAV4.js.map +1 -0
  38. package/dist/chunk-OHQTKGQN.js +1498 -0
  39. package/dist/chunk-OHQTKGQN.js.map +1 -0
  40. package/dist/chunk-PSKQAFDF.cjs +58 -0
  41. package/dist/chunk-PSKQAFDF.cjs.map +1 -0
  42. package/dist/chunk-QTMTBEBA.js +20 -0
  43. package/dist/chunk-QTMTBEBA.js.map +1 -0
  44. package/dist/chunk-RQP77ZTY.js +9 -0
  45. package/dist/chunk-RQP77ZTY.js.map +1 -0
  46. package/dist/chunk-T7P5EIC4.cjs +148 -0
  47. package/dist/chunk-T7P5EIC4.cjs.map +1 -0
  48. package/dist/chunk-TB2RZGDV.js +183 -0
  49. package/dist/chunk-TB2RZGDV.js.map +1 -0
  50. package/dist/content-CAIp1njn.d.cts +35 -0
  51. package/dist/content-CGMJdyH_.d.ts +35 -0
  52. package/dist/contracts/index.cjs +21 -0
  53. package/dist/contracts/index.cjs.map +1 -0
  54. package/dist/contracts/index.d.cts +4 -0
  55. package/dist/contracts/index.d.ts +4 -0
  56. package/dist/contracts/index.js +21 -0
  57. package/dist/contracts/index.js.map +1 -0
  58. package/dist/discovery-DxpirOz3.d.cts +61 -0
  59. package/dist/discovery-gSqWpuRm.d.ts +61 -0
  60. package/dist/discovery.cjs +379 -0
  61. package/dist/discovery.cjs.map +1 -0
  62. package/dist/discovery.d.cts +22 -0
  63. package/dist/discovery.d.ts +22 -0
  64. package/dist/discovery.js +379 -0
  65. package/dist/discovery.js.map +1 -0
  66. package/dist/execution.cjs +368 -0
  67. package/dist/execution.cjs.map +1 -0
  68. package/dist/execution.d.cts +89 -0
  69. package/dist/execution.d.ts +89 -0
  70. package/dist/execution.js +368 -0
  71. package/dist/execution.js.map +1 -0
  72. package/dist/index.cjs +76 -0
  73. package/dist/index.cjs.map +1 -0
  74. package/dist/index.d.cts +61 -0
  75. package/dist/index.d.ts +61 -0
  76. package/dist/index.js +76 -0
  77. package/dist/index.js.map +1 -0
  78. package/dist/module-BbvwdCDF.d.cts +11 -0
  79. package/dist/module-CWNK2BMj.d.ts +11 -0
  80. package/dist/planning-CcFZYdIL.d.cts +844 -0
  81. package/dist/planning-CcFZYdIL.d.ts +844 -0
  82. package/dist/ports-Bn6ro2FB.d.ts +142 -0
  83. package/dist/ports-CaL6geqR.d.cts +142 -0
  84. package/dist/storage.cjs +289 -0
  85. package/dist/storage.cjs.map +1 -0
  86. package/dist/storage.d.cts +71 -0
  87. package/dist/storage.d.ts +71 -0
  88. package/dist/storage.js +289 -0
  89. package/dist/storage.js.map +1 -0
  90. package/dist/store-Ct0gOAAg.d.ts +28 -0
  91. package/dist/store-q63eSMoT.d.cts +28 -0
  92. package/dist/ui/index.cjs +1961 -0
  93. package/dist/ui/index.cjs.map +1 -0
  94. package/dist/ui/index.d.cts +209 -0
  95. package/dist/ui/index.d.ts +209 -0
  96. package/dist/ui/index.js +1961 -0
  97. package/dist/ui/index.js.map +1 -0
  98. package/dist/ui/kanban.css +194 -0
  99. package/package.json +113 -4
@@ -0,0 +1,61 @@
1
+ export { K as KanbanModuleHandle, c as createKanbanModule } from './module-CWNK2BMj.js';
2
+ export { K as KanbanBodyStore, S as SeqKanbanStore } from './store-Ct0gOAAg.js';
3
+ import { K as KanbanModuleOptions } from './ports-Bn6ro2FB.js';
4
+ export { i as KanbanError, b as KanbanReadView, g as KanbanScanNotStartedError, c as KanbanState, a as KanbanStore } from './ports-Bn6ro2FB.js';
5
+ import { l as KanbanBoardInput, j as KanbanBoard, m as KanbanBoardSummary, E as KanbanOverview, w as KanbanItem, a1 as KanbanTaskProjection, c as KanbanArchivedItem, y as KanbanItemQuery, x as KanbanItemPage, J as KanbanProjectRecord, P as KanbanRecordQuery, O as KanbanRecordPage, a7 as KanbanWorkflowState, R as KanbanReferenceTarget, Y as KanbanSuggestionQuery, X as KanbanSuggestionPage, I as KanbanPrincipal, S as KanbanRequest, t as KanbanEvent, z as KanbanItemSummary } from './planning-CcFZYdIL.js';
6
+ export { D as DEFAULT_KANBAN_WORK_TYPES, K as KanbanActor, a as KanbanAmendment, d as KanbanArtifactRef, e as KanbanAssignment, n as KanbanColumn, o as KanbanCommand, p as KanbanDiscoveryBatch, q as KanbanDiscoveryChange, r as KanbanDispatch, s as KanbanEstimate, u as KanbanExternalReference, B as KanbanMember, C as KanbanNotificationPolicy, F as KanbanParticipant, G as KanbanPlanning, H as KanbanPolicy, L as KanbanPublishedPlan, N as KanbanRecordInput, Q as KanbanRecordSummary, T as KanbanService, U as KanbanSourceRef, V as KanbanSuggestion, W as KanbanSuggestionKind, a2 as KanbanText, a3 as KanbanWorkDefinition, a4 as KanbanWorkPlan, a5 as KanbanWorkType, a6 as KanbanWorkflowCommand, ab as kanbanReference } from './planning-CcFZYdIL.js';
7
+ import '@nestos/vfs-core';
8
+ import './discovery-gSqWpuRm.js';
9
+
10
+ interface KanbanCommit {
11
+ boardId: string;
12
+ operationId: string;
13
+ revision: number;
14
+ }
15
+ type Kanban = ReturnType<typeof createKanban>;
16
+ /** Grouped public API; all writes still enter the same authorized transaction path. */
17
+ declare function createKanban(options: KanbanModuleOptions): {
18
+ boards: {
19
+ create: (board: KanbanBoardInput) => Promise<KanbanBoard>;
20
+ get: (boardId: string) => Promise<KanbanBoard>;
21
+ list: () => Promise<KanbanBoardSummary[]>;
22
+ overview: (boardId: string) => Promise<KanbanOverview>;
23
+ };
24
+ items: {
25
+ get: (boardId: string, itemId: string) => Promise<{
26
+ item: KanbanItem;
27
+ task?: KanbanTaskProjection;
28
+ archive?: Omit<KanbanArchivedItem, "item">;
29
+ }>;
30
+ query: (boardId: string, query?: KanbanItemQuery) => Promise<KanbanItemPage>;
31
+ };
32
+ records: {
33
+ get: (boardId: string, recordId: string) => Promise<KanbanProjectRecord>;
34
+ query: (boardId: string, query?: KanbanRecordQuery) => Promise<KanbanRecordPage>;
35
+ };
36
+ planning: {
37
+ get: (boardId: string) => Promise<KanbanWorkflowState>;
38
+ };
39
+ references: {
40
+ resolve: (reference: string) => Promise<KanbanReferenceTarget>;
41
+ suggest: (boardId: string, query: KanbanSuggestionQuery) => Promise<KanbanSuggestionPage>;
42
+ };
43
+ currentPrincipal: () => Promise<KanbanPrincipal>;
44
+ execute(boardId: string, request: KanbanRequest): Promise<KanbanCommit>;
45
+ events: (boardId: string, afterSequence?: number, limit?: number) => Promise<KanbanEvent[]>;
46
+ tick: () => Promise<void>;
47
+ quiesce: () => Promise<void>;
48
+ dispose: () => Promise<void>;
49
+ };
50
+
51
+ declare function isKanbanEventRelevant(event: KanbanEvent, board: KanbanBoard, now: number): boolean;
52
+
53
+ type Item = Pick<KanbanItem, 'id' | 'status' | 'createdAt' | 'launch' | 'analysis' | 'control' | 'issues' | 'blocked' | 'externalRefs' | 'planning'>;
54
+ declare const TASK_START_DELAY_MS = 300000;
55
+ declare function taskStartAt(item: Pick<Item, 'createdAt' | 'launch'>): number;
56
+ declare function taskEditing(item: Pick<Item, 'launch'>, now: number): boolean;
57
+ declare function taskDue(item: Item, now: number): boolean;
58
+ /** Ordered evidence projection shared by storage queries, CLI and UI. Session idle never proves acceptance. */
59
+ declare function projectKanbanTask(item: Item, workflow?: KanbanWorkflowState, now?: number, all?: Array<Pick<KanbanItemSummary, 'id' | 'status'>>): KanbanTaskProjection;
60
+
61
+ export { type Kanban, KanbanArchivedItem, KanbanBoard, KanbanBoardInput, KanbanBoardSummary, type KanbanCommit, KanbanEvent, KanbanItem, KanbanItemPage, KanbanItemQuery, KanbanItemSummary, KanbanModuleOptions, KanbanOverview, KanbanPrincipal, KanbanProjectRecord, KanbanRecordPage, KanbanRecordQuery, KanbanReferenceTarget, KanbanRequest, KanbanSuggestionPage, KanbanSuggestionQuery, KanbanWorkflowState, TASK_START_DELAY_MS, createKanban, isKanbanEventRelevant, projectKanbanTask, taskDue, taskEditing, taskStartAt };
package/dist/index.js ADDED
@@ -0,0 +1,76 @@
1
+ import {
2
+ createKanbanModule
3
+ } from "./chunk-DFTOTBGF.js";
4
+ import {
5
+ SeqKanbanStore
6
+ } from "./chunk-5DLZWW5Y.js";
7
+ import {
8
+ escalationReasons,
9
+ terminal
10
+ } from "./chunk-OHQTKGQN.js";
11
+ import "./chunk-RQP77ZTY.js";
12
+ import "./chunk-ATUFFNLV.js";
13
+ import {
14
+ KanbanError,
15
+ KanbanScanNotStartedError
16
+ } from "./chunk-G6FCDLDF.js";
17
+ import {
18
+ TASK_START_DELAY_MS,
19
+ projectKanbanTask,
20
+ taskDue,
21
+ taskEditing,
22
+ taskStartAt
23
+ } from "./chunk-O4OGAAV4.js";
24
+ import {
25
+ DEFAULT_KANBAN_WORK_TYPES,
26
+ kanbanReference
27
+ } from "./chunk-5XKOCKY2.js";
28
+ import "./chunk-TB2RZGDV.js";
29
+ import "./chunk-QTMTBEBA.js";
30
+
31
+ // src/api.ts
32
+ function createKanban(options) {
33
+ const service = createKanbanModule(options);
34
+ return {
35
+ boards: { create: service.create, get: service.read, list: service.catalog, overview: service.overview },
36
+ items: { get: service.item, query: service.query },
37
+ records: { get: service.record, query: service.records },
38
+ planning: { get: service.workflow },
39
+ references: { resolve: service.resolve, suggest: service.suggest },
40
+ currentPrincipal: service.currentPrincipal,
41
+ async execute(boardId, request) {
42
+ const board = await service.execute(boardId, request);
43
+ return { boardId, operationId: request.operationId, revision: board.revision };
44
+ },
45
+ events: service.events,
46
+ tick: service.scan,
47
+ quiesce: () => service.quiesce(),
48
+ dispose: () => service.dispose()
49
+ };
50
+ }
51
+
52
+ // src/event-policy.ts
53
+ function isKanbanEventRelevant(event, board, now) {
54
+ const item = board.items.find((i) => i.id === event.itemId);
55
+ if (event.kind === "escalated") return !!item && !terminal(item) && (event.data.reason === "transfer-timeout" ? !item.transfer && item.status === "claimed" : escalationReasons(board, item, now).includes(event.data.reason ?? ""));
56
+ if (event.kind === "submit") return item?.status === "review";
57
+ if (event.kind === "request-transfer") return !!item?.transfer && item.transfer.expiresAt > now;
58
+ if (event.kind === "publish-proposal") return item?.status === "open";
59
+ return true;
60
+ }
61
+ export {
62
+ DEFAULT_KANBAN_WORK_TYPES,
63
+ KanbanError,
64
+ KanbanScanNotStartedError,
65
+ SeqKanbanStore,
66
+ TASK_START_DELAY_MS,
67
+ createKanban,
68
+ createKanbanModule,
69
+ isKanbanEventRelevant,
70
+ kanbanReference,
71
+ projectKanbanTask,
72
+ taskDue,
73
+ taskEditing,
74
+ taskStartAt
75
+ };
76
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/api.ts","../src/event-policy.ts"],"sourcesContent":["import {createKanbanModule} from './module';\nimport type {KanbanModuleOptions} from './ports';\nimport type {KanbanRequest} from './contracts';\n\nexport interface KanbanCommit {boardId: string; operationId: string; revision: number}\nexport type Kanban = ReturnType<typeof createKanban>;\n\n/** Grouped public API; all writes still enter the same authorized transaction path. */\nexport function createKanban(options: KanbanModuleOptions) {\n const service = createKanbanModule(options);\n return {\n boards: {create: service.create, get: service.read, list: service.catalog, overview: service.overview},\n items: {get: service.item, query: service.query},\n records: {get: service.record, query: service.records},\n planning: {get: service.workflow},\n references: {resolve: service.resolve, suggest: service.suggest},\n currentPrincipal: service.currentPrincipal,\n async execute(boardId: string, request: KanbanRequest): Promise<KanbanCommit> {\n const board = await service.execute(boardId, request);\n return {boardId, operationId: request.operationId, revision: board.revision};\n },\n events: service.events,\n tick: service.scan,\n quiesce: () => service.quiesce(),\n dispose: () => service.dispose(),\n };\n}\n","import type {KanbanEvent, KanbanBoard} from './contracts';\nimport {terminal} from './planning';\nimport {escalationReasons} from './reducer';\n\nexport function isKanbanEventRelevant(event: KanbanEvent, board: KanbanBoard, now: number): boolean {\n const item = board.items.find(i => i.id === event.itemId);\n if (event.kind === 'escalated') return !!item && !terminal(item) && (event.data.reason === 'transfer-timeout'\n ? !item.transfer && item.status === 'claimed' : escalationReasons(board, item, now).includes(event.data.reason ?? ''));\n if (event.kind === 'submit') return item?.status === 'review';\n if (event.kind === 'request-transfer') return !!item?.transfer && item.transfer.expiresAt > now;\n if (event.kind === 'publish-proposal') return item?.status === 'open';\n return true;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQO,SAAS,aAAa,SAA8B;AACvD,QAAM,UAAU,mBAAmB,OAAO;AAC1C,SAAO;AAAA,IACH,QAAQ,EAAC,QAAQ,QAAQ,QAAQ,KAAK,QAAQ,MAAM,MAAM,QAAQ,SAAS,UAAU,QAAQ,SAAQ;AAAA,IACrG,OAAO,EAAC,KAAK,QAAQ,MAAM,OAAO,QAAQ,MAAK;AAAA,IAC/C,SAAS,EAAC,KAAK,QAAQ,QAAQ,OAAO,QAAQ,QAAO;AAAA,IACrD,UAAU,EAAC,KAAK,QAAQ,SAAQ;AAAA,IAChC,YAAY,EAAC,SAAS,QAAQ,SAAS,SAAS,QAAQ,QAAO;AAAA,IAC/D,kBAAkB,QAAQ;AAAA,IAC1B,MAAM,QAAQ,SAAiB,SAA+C;AAC1E,YAAM,QAAQ,MAAM,QAAQ,QAAQ,SAAS,OAAO;AACpD,aAAO,EAAC,SAAS,aAAa,QAAQ,aAAa,UAAU,MAAM,SAAQ;AAAA,IAC/E;AAAA,IACA,QAAQ,QAAQ;AAAA,IAChB,MAAM,QAAQ;AAAA,IACd,SAAS,MAAM,QAAQ,QAAQ;AAAA,IAC/B,SAAS,MAAM,QAAQ,QAAQ;AAAA,EACnC;AACJ;;;ACtBO,SAAS,sBAAsB,OAAoB,OAAoB,KAAsB;AAChG,QAAM,OAAO,MAAM,MAAM,KAAK,OAAK,EAAE,OAAO,MAAM,MAAM;AACxD,MAAI,MAAM,SAAS,YAAa,QAAO,CAAC,CAAC,QAAQ,CAAC,SAAS,IAAI,MAAM,MAAM,KAAK,WAAW,qBACrF,CAAC,KAAK,YAAY,KAAK,WAAW,YAAY,kBAAkB,OAAO,MAAM,GAAG,EAAE,SAAS,MAAM,KAAK,UAAU,EAAE;AACxH,MAAI,MAAM,SAAS,SAAU,QAAO,MAAM,WAAW;AACrD,MAAI,MAAM,SAAS,mBAAoB,QAAO,CAAC,CAAC,MAAM,YAAY,KAAK,SAAS,YAAY;AAC5F,MAAI,MAAM,SAAS,mBAAoB,QAAO,MAAM,WAAW;AAC/D,SAAO;AACX;","names":[]}
@@ -0,0 +1,11 @@
1
+ import { T as KanbanService } from './planning-CcFZYdIL.cjs';
2
+ import { K as KanbanModuleOptions } from './ports-CaL6geqR.cjs';
3
+
4
+ /** Optional host-owned service; no timer or model calls are started implicitly. */
5
+ declare function createKanbanModule(options: KanbanModuleOptions): KanbanModuleHandle;
6
+ interface KanbanModuleHandle extends KanbanService {
7
+ quiesce(): Promise<void>;
8
+ dispose(): Promise<void>;
9
+ }
10
+
11
+ export { type KanbanModuleHandle as K, createKanbanModule as c };
@@ -0,0 +1,11 @@
1
+ import { T as KanbanService } from './planning-CcFZYdIL.js';
2
+ import { K as KanbanModuleOptions } from './ports-Bn6ro2FB.js';
3
+
4
+ /** Optional host-owned service; no timer or model calls are started implicitly. */
5
+ declare function createKanbanModule(options: KanbanModuleOptions): KanbanModuleHandle;
6
+ interface KanbanModuleHandle extends KanbanService {
7
+ quiesce(): Promise<void>;
8
+ dispose(): Promise<void>;
9
+ }
10
+
11
+ export { type KanbanModuleHandle as K, createKanbanModule as c };