@lssm/lib.work-spec 3.0.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 (55) hide show
  1. package/README.md +66 -0
  2. package/dist/browser/capabilities.js +1 -0
  3. package/dist/browser/common.js +1 -0
  4. package/dist/browser/entities.js +1 -0
  5. package/dist/browser/events.js +1 -0
  6. package/dist/browser/index.js +1 -0
  7. package/dist/browser/models.js +1 -0
  8. package/dist/browser/object-read.js +1 -0
  9. package/dist/browser/operations.js +1 -0
  10. package/dist/browser/sync.js +1 -0
  11. package/dist/browser/task-status.js +1 -0
  12. package/dist/browser/taxonomy.js +1 -0
  13. package/dist/browser/work-spec.feature.js +1 -0
  14. package/dist/browser/workspace-revision.js +1 -0
  15. package/dist/capabilities.d.ts +42 -0
  16. package/dist/capabilities.js +2 -0
  17. package/dist/common.d.ts +115 -0
  18. package/dist/common.js +2 -0
  19. package/dist/entities.d.ts +1143 -0
  20. package/dist/entities.js +2 -0
  21. package/dist/events.d.ts +10057 -0
  22. package/dist/events.js +2 -0
  23. package/dist/index.d.ts +12 -0
  24. package/dist/index.js +2 -0
  25. package/dist/models.d.ts +1080 -0
  26. package/dist/models.js +2 -0
  27. package/dist/node/capabilities.js +1 -0
  28. package/dist/node/common.js +1 -0
  29. package/dist/node/entities.js +1 -0
  30. package/dist/node/events.js +1 -0
  31. package/dist/node/index.js +1 -0
  32. package/dist/node/models.js +1 -0
  33. package/dist/node/object-read.js +1 -0
  34. package/dist/node/operations.js +1 -0
  35. package/dist/node/sync.js +1 -0
  36. package/dist/node/task-status.js +1 -0
  37. package/dist/node/taxonomy.js +1 -0
  38. package/dist/node/work-spec.feature.js +1 -0
  39. package/dist/node/workspace-revision.js +1 -0
  40. package/dist/object-read.d.ts +644 -0
  41. package/dist/object-read.js +2 -0
  42. package/dist/operations.d.ts +165 -0
  43. package/dist/operations.js +2 -0
  44. package/dist/sync.d.ts +545 -0
  45. package/dist/sync.js +2 -0
  46. package/dist/task-status.d.ts +3369 -0
  47. package/dist/task-status.js +2 -0
  48. package/dist/taxonomy.d.ts +84 -0
  49. package/dist/taxonomy.js +2 -0
  50. package/dist/work-spec.feature.d.ts +11 -0
  51. package/dist/work-spec.feature.js +2 -0
  52. package/dist/work-spec.test.d.ts +1 -0
  53. package/dist/workspace-revision.d.ts +19 -0
  54. package/dist/workspace-revision.js +2 -0
  55. package/package.json +343 -0
@@ -0,0 +1,2 @@
1
+ // @bun
2
+ import{z as f}from"zod";import{z as m}from"zod";import{z as u}from"zod";var l=u.enum(["organization","workspace","team","member","guest","contractor","service_principal","cross_organization_acl_grant","portfolio","initiative","program","objective","key_result","roadmap","project","cycle","milestone","task","issue","bug","story","epic","subtask","recurrence_template","occurrence","dependency","relationship","estimate","time_entry","collection","list","folder_projection","status_workflow","custom_field_definition","custom_field_value","saved_view","form","template","comment","mention","reaction","activity","attachment","document_reference","canvas_reference","proofing_request","approval_reference","inbox_item","habit","focus_policy","planning_intent","capture_reference","automation_reference","agent_reference","schedule_binding_reference","external_binding","sync_cursor","sync_conflict","tombstone","evidence_reference"]),s=u.enum(["backlog","unstarted","started","completed","cancelled"]),k=u.enum(["parent","child","blocks","blocked_by","relates_to","duplicates","duplicated_by","supersedes","multi_homed_in"]);var w=/^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,o=m.string().regex(w,"UUIDv7 required"),n=m.string().datetime({offset:!0}),r=m.object({id:o,kind:l}),p=m.object({principalId:o,principalKind:m.enum(["member","guest","contractor","service_principal"])}),h=m.object({tenantId:o,organizationId:o,workspaceId:o}),i=m.object({scope:h,createdAt:n,createdBy:p,updatedAt:n,updatedBy:p,revision:m.number().int().nonnegative()});import{z as t}from"zod";import{z as e}from"zod";var W=e.object({from:r,to:r}).refine(({from:d,to:_})=>d.id!==_.id,"Work graph links cannot self-reference"),H=e.object({id:o,metadata:i,kind:e.enum(["blocks","blocked_by"]),lagMinutes:e.number().int().nonnegative().default(0)}).and(W),b=e.object({id:o,metadata:i,kind:k}).and(W),v=e.object({id:o,metadata:i,workRef:r,body:e.string().min(1).max(1e5),mentionedPrincipalIds:e.array(o).default([]),attachmentRefs:e.array(r).default([]),parentCommentRef:r.optional(),resolvedAt:n.optional(),resolvedBy:p.optional()}),T=e.object({id:o,name:e.string().min(1).max(120),category:s,position:e.number().int().nonnegative(),color:e.string().regex(/^#[0-9a-f]{6}$/i).optional()}),J=e.object({id:o,metadata:i,title:e.string().min(1).max(200),statuses:e.array(T).min(1),allowedTransitions:e.array(e.object({fromStatusId:o,toStatusId:o}))}),Q=e.object({id:o,metadata:i,name:e.string().min(1).max(200),fieldType:e.enum(["text","number","date","person","select","multi_select","checkbox","url","formula"]),options:e.array(e.object({id:o,label:e.string().min(1)})).default([]),formula:e.string().min(1).optional(),required:e.boolean().default(!1)}),x=e.object({id:o,metadata:i,fieldRef:r.refine(({kind:d})=>d==="custom_field_definition","Custom field values must reference a custom-field definition"),workRef:r,value:e.unknown()}),Y=e.object({id:o,metadata:i,name:e.string().min(1).max(200),viewType:e.enum(["list","board","table","calendar","timeline","gantt","workload"]),containerRef:r,filter:e.record(e.string(),e.unknown()).default({}),sort:e.array(e.object({field:e.string().min(1),direction:e.enum(["asc","desc"])})).default([]),groupBy:e.string().min(1).optional(),sharedWith:e.array(r).default([])}),ee=e.object({id:o,metadata:i,goalRef:r,current:e.number(),target:e.number(),unit:e.string().min(1).max(80),updatedAt:n});import{z as a}from"zod";var y=a.object({id:o,kind:l,title:a.string().min(1).max(500),description:a.string().max(1e5).optional(),metadata:i,parentRef:r.optional(),ownerRefs:a.array(r).default([]),assigneeRefs:a.array(r).default([]),statusId:o.optional(),statusCategory:s.optional(),priority:a.number().int().min(0).max(100).optional(),estimateMinutes:a.number().int().positive().optional(),desiredStartAt:n.optional(),dueAt:n.optional(),completedAt:n.optional(),recurrenceTemplateRef:r.optional(),captureRef:r.refine(({kind:d})=>d==="capture_reference","Capture provenance must reference a capture_reference Work object").optional(),customFieldValueRefs:a.array(r).default([]),evidenceRefs:a.array(r).default([]),externalBindingRefs:a.array(r).default([]),archivedAt:n.optional()}),ne=a.object({id:o,metadata:i,from:r,to:r,kind:k}),g=a.object({id:o,metadata:i,templateRef:r,rule:a.object({frequency:a.enum(["daily","weekly","monthly","yearly"]),interval:a.number().int().positive().default(1),timeZone:a.string().min(1),startsAt:n,endsAt:n.optional(),count:a.number().int().positive().optional()})}),j=a.object({id:o,metadata:i,workRef:r,memberRef:r,startedAt:n,endedAt:n.optional(),durationMinutes:a.number().int().nonnegative(),note:a.string().max(1e4).optional()});var de=t.enum(["work.object.created","work.object.updated","work.object.archived","work.object.restored","work.recurrence.set","work.time.started","work.time.stopped","work.relationship.set","work.comment.created","work.attachment.linked","work.custom_field.set"]),c=t.object({eventId:o,eventVersion:t.literal("2.0.0"),aggregate:r,aggregateRevision:t.number().int().positive(),scope:h,actor:p,occurredAt:n,idempotencyKey:t.string().min(1).max(255),correlationId:o,causationId:o.optional(),evidenceRef:t.string().min(1)}),E=c.extend({eventType:t.literal("work.object.created"),payload:t.object({object:y})}),z=c.extend({eventType:t.literal("work.object.updated"),payload:t.object({object:y})}),C=c.extend({eventType:t.literal("work.object.archived"),payload:t.object({}).strict()}),O=c.extend({eventType:t.literal("work.object.restored"),payload:t.object({}).strict()}),A=c.extend({eventType:t.literal("work.recurrence.set"),payload:t.object({recurrence:g})}),R=t.object({timeEntry:j}),I=c.extend({eventType:t.literal("work.time.started"),payload:R}),D=c.extend({eventType:t.literal("work.time.stopped"),payload:R}),K=c.extend({eventType:t.literal("work.relationship.set"),payload:t.object({edge:b})}),V=c.extend({eventType:t.literal("work.comment.created"),payload:t.object({comment:v})}),F=c.extend({eventType:t.literal("work.attachment.linked"),payload:t.object({attachmentRef:r})}),q=c.extend({eventType:t.literal("work.custom_field.set"),payload:t.object({value:x})}),S=t.discriminatedUnion("eventType",[E,z,C,O,A,I,D,K,V,F,q]),le=t.object({id:o,event:S,destination:t.string().min(1),status:t.enum(["pending","leased","delivered","dead_letter"]),availableAt:n,leaseOwner:t.string().min(1).optional(),leaseExpiresAt:n.optional(),deliveryAttempts:t.number().int().nonnegative()}),ke={version:"2.0.0",invariants:["Only the matching unexpired lease owner and delivery attempt can acknowledge or release a record; reusing a worker name never grants an old claim authority over a new attempt.","Expired leases remain recoverable even if their original worker finishes before another worker claims them.","A future availability cutoff cannot expire an active delivery lease.","Lease validity is checked again by the settlement write using the database clock."]};var B=f.object({objectId:o,expectedRevision:f.number().int().positive(),statusCategory:s,idempotencyKey:f.string().min(8).max(200)}).strict(),We=B.omit({objectId:!0}),be=f.object({event:S}).strict(),ve={key:"work.task.status.set",version:"1.1.0",method:"POST",path:"/api/companyos/work/objects/:objectId/status",invariants:["Current write authority, canonical actor and scope are server-derived and checked in the commit transaction.","Only a current unarchived task at the displayed revision can change status; unrelated fields remain unchanged.","A category change clears the previous custom status identifier; only an unchanged category may preserve that identifier.","Completion timestamps use server time; reopening clears completion time. No owner or deadline is inferred.","Identical retries resolve the saved event before current-state validation; changed request keys cannot reuse a receipt.","The existing canonical Work service commits the event, idempotency receipt and outbox atomically."]};export{ve as WORK_TASK_STATUS_CONTRACT,We as WorkTaskStatusBodySchema,B as WorkTaskStatusRequestSchema,be as WorkTaskStatusResponseSchema};
@@ -0,0 +1,84 @@
1
+ import { z } from 'zod';
2
+ export declare const WorkObjectKindSchema: z.ZodEnum<{
3
+ activity: "activity";
4
+ agent_reference: "agent_reference";
5
+ approval_reference: "approval_reference";
6
+ attachment: "attachment";
7
+ automation_reference: "automation_reference";
8
+ bug: "bug";
9
+ canvas_reference: "canvas_reference";
10
+ capture_reference: "capture_reference";
11
+ collection: "collection";
12
+ comment: "comment";
13
+ contractor: "contractor";
14
+ cross_organization_acl_grant: "cross_organization_acl_grant";
15
+ custom_field_definition: "custom_field_definition";
16
+ custom_field_value: "custom_field_value";
17
+ cycle: "cycle";
18
+ dependency: "dependency";
19
+ document_reference: "document_reference";
20
+ epic: "epic";
21
+ estimate: "estimate";
22
+ evidence_reference: "evidence_reference";
23
+ external_binding: "external_binding";
24
+ focus_policy: "focus_policy";
25
+ folder_projection: "folder_projection";
26
+ form: "form";
27
+ guest: "guest";
28
+ habit: "habit";
29
+ inbox_item: "inbox_item";
30
+ initiative: "initiative";
31
+ issue: "issue";
32
+ key_result: "key_result";
33
+ list: "list";
34
+ member: "member";
35
+ mention: "mention";
36
+ milestone: "milestone";
37
+ objective: "objective";
38
+ occurrence: "occurrence";
39
+ organization: "organization";
40
+ planning_intent: "planning_intent";
41
+ portfolio: "portfolio";
42
+ program: "program";
43
+ project: "project";
44
+ proofing_request: "proofing_request";
45
+ reaction: "reaction";
46
+ recurrence_template: "recurrence_template";
47
+ relationship: "relationship";
48
+ roadmap: "roadmap";
49
+ saved_view: "saved_view";
50
+ schedule_binding_reference: "schedule_binding_reference";
51
+ service_principal: "service_principal";
52
+ status_workflow: "status_workflow";
53
+ story: "story";
54
+ subtask: "subtask";
55
+ sync_conflict: "sync_conflict";
56
+ sync_cursor: "sync_cursor";
57
+ task: "task";
58
+ team: "team";
59
+ template: "template";
60
+ time_entry: "time_entry";
61
+ tombstone: "tombstone";
62
+ workspace: "workspace";
63
+ }>;
64
+ export type WorkObjectKind = z.infer<typeof WorkObjectKindSchema>;
65
+ export declare const WorkStatusCategorySchema: z.ZodEnum<{
66
+ backlog: "backlog";
67
+ cancelled: "cancelled";
68
+ completed: "completed";
69
+ started: "started";
70
+ unstarted: "unstarted";
71
+ }>;
72
+ export type WorkStatusCategory = z.infer<typeof WorkStatusCategorySchema>;
73
+ export declare const WorkRelationshipKindSchema: z.ZodEnum<{
74
+ blocked_by: "blocked_by";
75
+ blocks: "blocks";
76
+ child: "child";
77
+ duplicated_by: "duplicated_by";
78
+ duplicates: "duplicates";
79
+ multi_homed_in: "multi_homed_in";
80
+ parent: "parent";
81
+ relates_to: "relates_to";
82
+ supersedes: "supersedes";
83
+ }>;
84
+ export type WorkRelationshipKind = z.infer<typeof WorkRelationshipKindSchema>;
@@ -0,0 +1,2 @@
1
+ // @bun
2
+ import{z as e}from"zod";var o=e.enum(["organization","workspace","team","member","guest","contractor","service_principal","cross_organization_acl_grant","portfolio","initiative","program","objective","key_result","roadmap","project","cycle","milestone","task","issue","bug","story","epic","subtask","recurrence_template","occurrence","dependency","relationship","estimate","time_entry","collection","list","folder_projection","status_workflow","custom_field_definition","custom_field_value","saved_view","form","template","comment","mention","reaction","activity","attachment","document_reference","canvas_reference","proofing_request","approval_reference","inbox_item","habit","focus_policy","planning_intent","capture_reference","automation_reference","agent_reference","schedule_binding_reference","external_binding","sync_cursor","sync_conflict","tombstone","evidence_reference"]),r=e.enum(["backlog","unstarted","started","completed","cancelled"]),n=e.enum(["parent","child","blocks","blocked_by","relates_to","duplicates","duplicated_by","supersedes","multi_homed_in"]);export{o as WorkObjectKindSchema,n as WorkRelationshipKindSchema,r as WorkStatusCategorySchema};
@@ -0,0 +1,11 @@
1
+ export declare const workSpecFeatureDoc: {
2
+ readonly id: 'libs.work-spec.feature';
3
+ readonly title: 'Canonical Work Graph';
4
+ readonly body: string;
5
+ readonly kind: 'reference';
6
+ readonly visibility: 'public';
7
+ readonly route: '/libs/work-spec';
8
+ readonly version: '2.0.0';
9
+ readonly owners: ["@companyos-work"];
10
+ readonly relatedSpecs: ["work.*@2.0.0"];
11
+ };
@@ -0,0 +1,2 @@
1
+ // @bun
2
+ var e={id:"libs.work-spec.feature",title:"Canonical Work Graph",body:["Defines provider-neutral Work OS v2 identity and contracts.","CompanyOS retains authority and evidence; OPA retains schedule placement.","Remote provider identifiers are external bindings and UUIDv7 Work IDs remain canonical.","Every mutation includes actor, scope, idempotency, correlation, evidence, and autonomy class."].join(" "),kind:"reference",visibility:"public",route:"/libs/work-spec",version:"2.0.0",owners:["@companyos-work"],relatedSpecs:["work.*@2.0.0"]};export{e as workSpecFeatureDoc};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,19 @@
1
+ import { z } from 'zod';
2
+ import { type WorkScope } from './common.js';
3
+ /** Canonical event heads include archived/completed and currently unplaced work. */
4
+ export declare const WorkWorkspaceRevisionSchema: z.ZodObject<{
5
+ scope: z.ZodObject<{
6
+ tenantId: z.ZodString;
7
+ organizationId: z.ZodString;
8
+ workspaceId: z.ZodString;
9
+ }, z.core.$strip>;
10
+ heads: z.ZodArray<z.ZodObject<{
11
+ aggregateId: z.ZodString;
12
+ revision: z.ZodNumber;
13
+ }, z.core.$strict>>;
14
+ }, z.core.$strict>;
15
+ export declare const workWorkspaceRevisionLockKey: (scope: WorkScope) => string;
16
+ export declare const WORK_WORKSPACE_REVISION_CONTRACT: {
17
+ readonly version: '1.0.0';
18
+ readonly invariants: readonly ['Canonical Work commits acquire a shared workspace revision lock before aggregate writes.', 'Proposal publication holds the exclusive matching workspace lock while checking all event heads and committing its proposal.', 'A changed, added or removed event head invalidates a prior snapshot, including unscheduled and completed work.', 'Mixed-version writers that omit the lock do not satisfy this concurrency contract.'];
19
+ };
@@ -0,0 +1,2 @@
1
+ // @bun
2
+ import{z as n}from"zod";import{z as e}from"zod";import{z as i}from"zod";var s=i.enum(["organization","workspace","team","member","guest","contractor","service_principal","cross_organization_acl_grant","portfolio","initiative","program","objective","key_result","roadmap","project","cycle","milestone","task","issue","bug","story","epic","subtask","recurrence_template","occurrence","dependency","relationship","estimate","time_entry","collection","list","folder_projection","status_workflow","custom_field_definition","custom_field_value","saved_view","form","template","comment","mention","reaction","activity","attachment","document_reference","canvas_reference","proofing_request","approval_reference","inbox_item","habit","focus_policy","planning_intent","capture_reference","automation_reference","agent_reference","schedule_binding_reference","external_binding","sync_cursor","sync_conflict","tombstone","evidence_reference"]),k=i.enum(["backlog","unstarted","started","completed","cancelled"]),l=i.enum(["parent","child","blocks","blocked_by","relates_to","duplicates","duplicated_by","supersedes","multi_homed_in"]);var m=/^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,t=e.string().regex(m,"UUIDv7 required"),p=e.string().datetime({offset:!0}),_=e.object({id:t,kind:s}),d=e.object({principalId:t,principalKind:e.enum(["member","guest","contractor","service_principal"])}),c=e.object({tenantId:t,organizationId:t,workspaceId:t}),y=e.object({scope:c,createdAt:p,createdBy:d,updatedAt:p,updatedBy:d,revision:e.number().int().nonnegative()});var v=n.object({scope:c,heads:n.array(n.object({aggregateId:t,revision:n.number().int().positive()}).strict()).max(1e4)}).strict().superRefine((o,r)=>{for(let a=1;a<o.heads.length;a++)if(o.heads[a-1].aggregateId>=o.heads[a].aggregateId)r.addIssue({code:"custom",message:"Work revision heads must be unique and sorted"})}),x=(o)=>{let r=c.parse(o);return JSON.stringify(["work-workspace-revision",r.tenantId,r.organizationId,r.workspaceId])},I={version:"1.0.0",invariants:["Canonical Work commits acquire a shared workspace revision lock before aggregate writes.","Proposal publication holds the exclusive matching workspace lock while checking all event heads and committing its proposal.","A changed, added or removed event head invalidates a prior snapshot, including unscheduled and completed work.","Mixed-version writers that omit the lock do not satisfy this concurrency contract."]};export{I as WORK_WORKSPACE_REVISION_CONTRACT,v as WorkWorkspaceRevisionSchema,x as workWorkspaceRevisionLockKey};
package/package.json ADDED
@@ -0,0 +1,343 @@
1
+ {
2
+ "name": "@lssm/lib.work-spec",
3
+ "version": "3.0.1",
4
+ "description": "Canonical provider-neutral Work Graph contracts for CompanyOS and modular Work OS consumers.",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "types": "./dist/index.d.ts",
8
+ "files": [
9
+ "dist",
10
+ "README.md"
11
+ ],
12
+ "scripts": {
13
+ "publish:pkg": "bun publish --tolerate-republish --ignore-scripts --verbose",
14
+ "publish:pkg:canary": "bun publish:pkg --tag canary",
15
+ "build": "contractspec-bun-build build",
16
+ "build:bundle": "contractspec-bun-build transpile",
17
+ "build:types": "contractspec-bun-build types",
18
+ "dev": "contractspec-bun-build dev",
19
+ "clean": "rimraf dist .turbo",
20
+ "lint": "bun lint:fix",
21
+ "lint:fix": "node ../../../scripts/biome.cjs check --write .",
22
+ "lint:check": "node ../../../scripts/biome.cjs check .",
23
+ "test": "bun test",
24
+ "prebuild": "contractspec-bun-build prebuild",
25
+ "typecheck": "tsgo --noEmit"
26
+ },
27
+ "exports": {
28
+ ".": {
29
+ "types": "./dist/index.d.ts",
30
+ "browser": "./dist/browser/index.js",
31
+ "bun": "./dist/index.js",
32
+ "node": "./dist/node/index.js",
33
+ "default": "./dist/index.js"
34
+ },
35
+ "./capabilities": {
36
+ "types": "./dist/capabilities.d.ts",
37
+ "browser": "./dist/browser/capabilities.js",
38
+ "bun": "./dist/capabilities.js",
39
+ "node": "./dist/node/capabilities.js",
40
+ "default": "./dist/capabilities.js"
41
+ },
42
+ "./common": {
43
+ "types": "./dist/common.d.ts",
44
+ "browser": "./dist/browser/common.js",
45
+ "bun": "./dist/common.js",
46
+ "node": "./dist/node/common.js",
47
+ "default": "./dist/common.js"
48
+ },
49
+ "./entities": {
50
+ "types": "./dist/entities.d.ts",
51
+ "browser": "./dist/browser/entities.js",
52
+ "bun": "./dist/entities.js",
53
+ "node": "./dist/node/entities.js",
54
+ "default": "./dist/entities.js"
55
+ },
56
+ "./events": {
57
+ "types": "./dist/events.d.ts",
58
+ "browser": "./dist/browser/events.js",
59
+ "bun": "./dist/events.js",
60
+ "node": "./dist/node/events.js",
61
+ "default": "./dist/events.js"
62
+ },
63
+ "./models": {
64
+ "types": "./dist/models.d.ts",
65
+ "browser": "./dist/browser/models.js",
66
+ "bun": "./dist/models.js",
67
+ "node": "./dist/node/models.js",
68
+ "default": "./dist/models.js"
69
+ },
70
+ "./object-read": {
71
+ "types": "./dist/object-read.d.ts",
72
+ "browser": "./dist/browser/object-read.js",
73
+ "bun": "./dist/object-read.js",
74
+ "node": "./dist/node/object-read.js",
75
+ "default": "./dist/object-read.js"
76
+ },
77
+ "./operations": {
78
+ "types": "./dist/operations.d.ts",
79
+ "browser": "./dist/browser/operations.js",
80
+ "bun": "./dist/operations.js",
81
+ "node": "./dist/node/operations.js",
82
+ "default": "./dist/operations.js"
83
+ },
84
+ "./sync": {
85
+ "types": "./dist/sync.d.ts",
86
+ "browser": "./dist/browser/sync.js",
87
+ "bun": "./dist/sync.js",
88
+ "node": "./dist/node/sync.js",
89
+ "default": "./dist/sync.js"
90
+ },
91
+ "./task-status": {
92
+ "types": "./dist/task-status.d.ts",
93
+ "browser": "./dist/browser/task-status.js",
94
+ "bun": "./dist/task-status.js",
95
+ "node": "./dist/node/task-status.js",
96
+ "default": "./dist/task-status.js"
97
+ },
98
+ "./taxonomy": {
99
+ "types": "./dist/taxonomy.d.ts",
100
+ "browser": "./dist/browser/taxonomy.js",
101
+ "bun": "./dist/taxonomy.js",
102
+ "node": "./dist/node/taxonomy.js",
103
+ "default": "./dist/taxonomy.js"
104
+ },
105
+ "./work-spec.feature": {
106
+ "types": "./dist/work-spec.feature.d.ts",
107
+ "browser": "./dist/browser/work-spec.feature.js",
108
+ "bun": "./dist/work-spec.feature.js",
109
+ "node": "./dist/node/work-spec.feature.js",
110
+ "default": "./dist/work-spec.feature.js"
111
+ },
112
+ "./workspace-revision": {
113
+ "types": "./dist/workspace-revision.d.ts",
114
+ "browser": "./dist/browser/workspace-revision.js",
115
+ "bun": "./dist/workspace-revision.js",
116
+ "node": "./dist/node/workspace-revision.js",
117
+ "default": "./dist/workspace-revision.js"
118
+ }
119
+ },
120
+ "dependencies": {
121
+ "zod": "^4.5.4",
122
+ "@lssm/lib.contracts-spec": "^17.3.2"
123
+ },
124
+ "devDependencies": {
125
+ "@lssm-tech/tool.bun": "5.0.3",
126
+ "@lssm-tech/tool.typescript": "5.0.1",
127
+ "typescript": "^7.0.2"
128
+ },
129
+ "repository": {
130
+ "type": "git",
131
+ "url": "https://github.com/lssm-tech/contractspec.git",
132
+ "directory": "packages/libs/work-spec"
133
+ },
134
+ "publishConfig": {
135
+ "access": "public",
136
+ "registry": "https://registry.npmjs.org",
137
+ "exports": {
138
+ ".": {
139
+ "types": "./dist/index.d.ts",
140
+ "browser": "./dist/browser/index.js",
141
+ "bun": "./dist/index.js",
142
+ "node": "./dist/node/index.js",
143
+ "default": "./dist/index.js"
144
+ },
145
+ "./capabilities": {
146
+ "types": "./dist/capabilities.d.ts",
147
+ "browser": "./dist/browser/capabilities.js",
148
+ "bun": "./dist/capabilities.js",
149
+ "node": "./dist/node/capabilities.js",
150
+ "default": "./dist/capabilities.js"
151
+ },
152
+ "./common": {
153
+ "types": "./dist/common.d.ts",
154
+ "browser": "./dist/browser/common.js",
155
+ "bun": "./dist/common.js",
156
+ "node": "./dist/node/common.js",
157
+ "default": "./dist/common.js"
158
+ },
159
+ "./entities": {
160
+ "types": "./dist/entities.d.ts",
161
+ "browser": "./dist/browser/entities.js",
162
+ "bun": "./dist/entities.js",
163
+ "node": "./dist/node/entities.js",
164
+ "default": "./dist/entities.js"
165
+ },
166
+ "./events": {
167
+ "types": "./dist/events.d.ts",
168
+ "browser": "./dist/browser/events.js",
169
+ "bun": "./dist/events.js",
170
+ "node": "./dist/node/events.js",
171
+ "default": "./dist/events.js"
172
+ },
173
+ "./models": {
174
+ "types": "./dist/models.d.ts",
175
+ "browser": "./dist/browser/models.js",
176
+ "bun": "./dist/models.js",
177
+ "node": "./dist/node/models.js",
178
+ "default": "./dist/models.js"
179
+ },
180
+ "./object-read": {
181
+ "types": "./dist/object-read.d.ts",
182
+ "browser": "./dist/browser/object-read.js",
183
+ "bun": "./dist/object-read.js",
184
+ "node": "./dist/node/object-read.js",
185
+ "default": "./dist/object-read.js"
186
+ },
187
+ "./operations": {
188
+ "types": "./dist/operations.d.ts",
189
+ "browser": "./dist/browser/operations.js",
190
+ "bun": "./dist/operations.js",
191
+ "node": "./dist/node/operations.js",
192
+ "default": "./dist/operations.js"
193
+ },
194
+ "./sync": {
195
+ "types": "./dist/sync.d.ts",
196
+ "browser": "./dist/browser/sync.js",
197
+ "bun": "./dist/sync.js",
198
+ "node": "./dist/node/sync.js",
199
+ "default": "./dist/sync.js"
200
+ },
201
+ "./task-status": {
202
+ "types": "./dist/task-status.d.ts",
203
+ "browser": "./dist/browser/task-status.js",
204
+ "bun": "./dist/task-status.js",
205
+ "node": "./dist/node/task-status.js",
206
+ "default": "./dist/task-status.js"
207
+ },
208
+ "./taxonomy": {
209
+ "types": "./dist/taxonomy.d.ts",
210
+ "browser": "./dist/browser/taxonomy.js",
211
+ "bun": "./dist/taxonomy.js",
212
+ "node": "./dist/node/taxonomy.js",
213
+ "default": "./dist/taxonomy.js"
214
+ },
215
+ "./work-spec.feature": {
216
+ "types": "./dist/work-spec.feature.d.ts",
217
+ "browser": "./dist/browser/work-spec.feature.js",
218
+ "bun": "./dist/work-spec.feature.js",
219
+ "node": "./dist/node/work-spec.feature.js",
220
+ "default": "./dist/work-spec.feature.js"
221
+ },
222
+ "./workspace-revision": {
223
+ "types": "./dist/workspace-revision.d.ts",
224
+ "browser": "./dist/browser/workspace-revision.js",
225
+ "bun": "./dist/workspace-revision.js",
226
+ "node": "./dist/node/workspace-revision.js",
227
+ "default": "./dist/workspace-revision.js"
228
+ }
229
+ }
230
+ },
231
+ "contractspec": {
232
+ "catalog": {
233
+ "family": "contracts",
234
+ "kind": "library",
235
+ "status": "active",
236
+ "adoptionMode": "adoptable",
237
+ "stability": "experimental",
238
+ "platforms": [
239
+ "server"
240
+ ],
241
+ "runtimes": [
242
+ "node"
243
+ ],
244
+ "entrypoints": [
245
+ ".",
246
+ "./capabilities",
247
+ "./common",
248
+ "./entities",
249
+ "./events",
250
+ "./models",
251
+ "./operations",
252
+ "./sync",
253
+ "./taxonomy",
254
+ "./work-spec.feature"
255
+ ],
256
+ "documentation": [
257
+ {
258
+ "title": "Lib Work Spec documentation",
259
+ "url": "https://www.npmjs.com/package/%40lssm%2Flib.work-spec",
260
+ "kind": "readme"
261
+ }
262
+ ],
263
+ "examples": [],
264
+ "replacements": [],
265
+ "capabilities": [
266
+ {
267
+ "id": "package.lssm.tech.lib.work.spec",
268
+ "title": "Lib Work Spec",
269
+ "description": "Canonical provider-neutral Work Graph contracts for CompanyOS and modular Work OS consumers.",
270
+ "status": "active",
271
+ "useCases": [
272
+ "Adopt canonical provider-neutral work graph contracts for companyos and modular work os consumers"
273
+ ],
274
+ "aliases": [
275
+ "lib",
276
+ "work",
277
+ "spec"
278
+ ],
279
+ "pythonEquivalents": [],
280
+ "canonicalImports": [
281
+ {
282
+ "from": "@lssm/lib.work-spec",
283
+ "symbols": []
284
+ },
285
+ {
286
+ "from": "@lssm/lib.work-spec/capabilities",
287
+ "symbols": []
288
+ },
289
+ {
290
+ "from": "@lssm/lib.work-spec/common",
291
+ "symbols": []
292
+ },
293
+ {
294
+ "from": "@lssm/lib.work-spec/entities",
295
+ "symbols": []
296
+ },
297
+ {
298
+ "from": "@lssm/lib.work-spec/events",
299
+ "symbols": []
300
+ },
301
+ {
302
+ "from": "@lssm/lib.work-spec/models",
303
+ "symbols": []
304
+ },
305
+ {
306
+ "from": "@lssm/lib.work-spec/operations",
307
+ "symbols": []
308
+ },
309
+ {
310
+ "from": "@lssm/lib.work-spec/sync",
311
+ "symbols": []
312
+ },
313
+ {
314
+ "from": "@lssm/lib.work-spec/taxonomy",
315
+ "symbols": []
316
+ },
317
+ {
318
+ "from": "@lssm/lib.work-spec/work-spec.feature",
319
+ "symbols": []
320
+ }
321
+ ],
322
+ "constraints": {
323
+ "platforms": [
324
+ "server"
325
+ ],
326
+ "runtimes": [
327
+ "node"
328
+ ],
329
+ "avoidWhen": [
330
+ "The @lssm/lib.work-spec package constraints do not match the target runtime or platform."
331
+ ],
332
+ "requires": [
333
+ "TypeScript"
334
+ ]
335
+ },
336
+ "alternatives": [],
337
+ "relationships": [],
338
+ "resolutionPriority": 50
339
+ }
340
+ ]
341
+ }
342
+ }
343
+ }