@undefineds.co/linx 0.3.20 → 0.3.22

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 (97) hide show
  1. package/dist/generated/version.js +1 -1
  2. package/dist/index.js +6 -1
  3. package/dist/index.js.map +1 -1
  4. package/dist/lib/auto-mode/pod-persistence.js +53 -3
  5. package/dist/lib/auto-mode/pod-persistence.js.map +1 -1
  6. package/dist/lib/auto-mode/secretary.js +2 -2
  7. package/dist/lib/auto-mode/secretary.js.map +1 -1
  8. package/dist/lib/chat-api.js +23 -61
  9. package/dist/lib/chat-api.js.map +1 -1
  10. package/dist/lib/codex-plugin/index.js +1 -0
  11. package/dist/lib/codex-plugin/index.js.map +1 -1
  12. package/dist/lib/codex-plugin/symphony-mcp.js +335 -0
  13. package/dist/lib/codex-plugin/symphony-mcp.js.map +1 -0
  14. package/dist/lib/linx-cloud-errors.js +0 -5
  15. package/dist/lib/linx-cloud-errors.js.map +1 -1
  16. package/dist/lib/linx-status-line.js +1 -8
  17. package/dist/lib/linx-status-line.js.map +1 -1
  18. package/dist/lib/models.js +3 -2
  19. package/dist/lib/models.js.map +1 -1
  20. package/dist/lib/pi-adapter/auth.js +68 -0
  21. package/dist/lib/pi-adapter/auth.js.map +1 -0
  22. package/dist/lib/pi-adapter/branding.js +34 -103
  23. package/dist/lib/pi-adapter/branding.js.map +1 -1
  24. package/dist/lib/pi-adapter/interactive.js +35 -49
  25. package/dist/lib/pi-adapter/interactive.js.map +1 -1
  26. package/dist/lib/pi-adapter/pod-mirror.js +38 -107
  27. package/dist/lib/pi-adapter/pod-mirror.js.map +1 -1
  28. package/dist/lib/pi-adapter/pod-native.js +2 -0
  29. package/dist/lib/pi-adapter/pod-native.js.map +1 -1
  30. package/dist/lib/pi-adapter/pod-tools.js +140 -0
  31. package/dist/lib/pi-adapter/pod-tools.js.map +1 -0
  32. package/dist/lib/pi-adapter/runtime.js +2 -12
  33. package/dist/lib/pi-adapter/runtime.js.map +1 -1
  34. package/dist/lib/pi-adapter/session.js +13 -17
  35. package/dist/lib/pi-adapter/session.js.map +1 -1
  36. package/dist/lib/pi-adapter/stream.js +2 -20
  37. package/dist/lib/pi-adapter/stream.js.map +1 -1
  38. package/dist/lib/pod-chat-store.js +53 -4
  39. package/dist/lib/pod-chat-store.js.map +1 -1
  40. package/dist/lib/resource-identity.js +2 -0
  41. package/dist/lib/resource-identity.js.map +1 -0
  42. package/dist/lib/status-line-command.js +2 -2
  43. package/dist/lib/status-line-command.js.map +1 -1
  44. package/dist/lib/symphony/archive.js +15 -37
  45. package/dist/lib/symphony/archive.js.map +1 -1
  46. package/dist/lib/symphony/pod-projection.js +189 -1346
  47. package/dist/lib/symphony/pod-projection.js.map +1 -1
  48. package/dist/lib/symphony-command.js +209 -109
  49. package/dist/lib/symphony-command.js.map +1 -1
  50. package/dist/plugins/linx-symphony-codex/.codex-plugin/plugin.json +38 -0
  51. package/dist/plugins/linx-symphony-codex/.mcp.json +10 -0
  52. package/dist/plugins/linx-symphony-codex/README.md +9 -0
  53. package/dist/plugins/linx-symphony-codex/hooks.json +60 -0
  54. package/dist/plugins/linx-symphony-codex/scripts/symphony-hook-events.mjs +119 -0
  55. package/dist/plugins/linx-symphony-codex/scripts/symphony-mcp.mjs +335 -0
  56. package/dist/plugins/linx-symphony-codex/skills/symphony/SKILL.md +791 -0
  57. package/dist/skills/symphony/SKILL.md +7 -0
  58. package/dist/skills/xpod-cli/SKILL.md +2 -13
  59. package/package.json +4 -4
  60. package/vendor/agent-runtime/dist/chat-reconciler.d.ts +33 -0
  61. package/vendor/agent-runtime/dist/chat-reconciler.js +108 -0
  62. package/vendor/agent-runtime/dist/index.d.ts +4 -1
  63. package/vendor/agent-runtime/dist/index.js +4 -1
  64. package/vendor/agent-runtime/dist/matrix-client.d.ts +149 -0
  65. package/vendor/agent-runtime/dist/matrix-client.js +220 -0
  66. package/vendor/agent-runtime/dist/pod-resource-identity.d.ts +17 -0
  67. package/vendor/agent-runtime/dist/pod-resource-identity.js +54 -0
  68. package/vendor/agent-runtime/dist/reconciler.d.ts +0 -11
  69. package/vendor/agent-runtime/dist/reconciler.js +5 -43
  70. package/vendor/agent-runtime/dist/symphony.d.ts +272 -27
  71. package/vendor/agent-runtime/dist/symphony.js +1268 -21
  72. package/vendor/agent-runtime/dist/workspace.d.ts +61 -0
  73. package/vendor/agent-runtime/dist/workspace.js +81 -0
  74. package/vendor/agent-runtime/package.json +5 -1
  75. package/vendor/stores/dist/current-pod-base.d.ts +2 -0
  76. package/vendor/stores/dist/current-pod-base.js +14 -0
  77. package/vendor/stores/dist/exact-records.d.ts +7 -0
  78. package/vendor/stores/dist/exact-records.js +87 -0
  79. package/vendor/stores/dist/index.d.ts +1 -0
  80. package/vendor/stores/dist/index.js +1 -0
  81. package/vendor/stores/dist/login.d.ts +51 -0
  82. package/vendor/stores/dist/login.js +195 -0
  83. package/vendor/stores/dist/pod-collection.d.ts +28 -0
  84. package/vendor/stores/dist/pod-collection.js +194 -0
  85. package/vendor/stores/dist/pod-write-guard.d.ts +5 -0
  86. package/vendor/stores/dist/pod-write-guard.js +133 -0
  87. package/vendor/stores/dist/symphony-control.d.ts +245 -0
  88. package/vendor/stores/dist/symphony-control.js +2175 -0
  89. package/vendor/stores/package.json +14 -0
  90. package/dist/lib/capture/persistence.js +0 -377
  91. package/dist/lib/capture/persistence.js.map +0 -1
  92. package/dist/lib/capture/tool.js +0 -242
  93. package/dist/lib/capture/tool.js.map +0 -1
  94. package/dist/skills/basic/SKILL.md +0 -46
  95. package/dist/skills/capture/SKILL.md +0 -165
  96. package/vendor/agent-runtime/dist/coordination.d.ts +0 -93
  97. package/vendor/agent-runtime/dist/coordination.js +0 -145
@@ -1 +0,0 @@
1
- {"version":3,"file":"tool.js","sourceRoot":"","sources":["../../../src/lib/capture/tool.ts"],"names":[],"mappings":"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"}
@@ -1,46 +0,0 @@
1
- ---
2
- name: basic
3
- description: Use when LinX Secretary needs default runtime capabilities such as web research, URL fetching, source lookup, shell/file inspection, or other common tool use that is not a domain-specific product workflow.
4
- ---
5
-
6
- # Basic
7
-
8
- This is LinX's default runtime capability bundle for Secretary. It is the
9
- user-facing umbrella for common runtime tools. Do not expose upstream package or
10
- internal skill names such as `pi-web-access` or `librarian` to the user.
11
-
12
- Use domain-specific skills first when they apply:
13
-
14
- - `symphony` for system-evolution control-plane judgment, work coordination,
15
- and evidence feedback.
16
- - `xpod-cli` for Solid Pod inspection, object operations, secrets, and durable
17
- product data.
18
-
19
- Use Basic for ordinary runtime capabilities that do not need a domain control
20
- skill.
21
-
22
- ## Current Capabilities
23
-
24
- ### Web Research And Fetching
25
-
26
- When web access tools are available, use them for current facts, official docs,
27
- source pages, repositories, PDFs, and other external evidence. Prefer official
28
- or primary sources. Cite the source used in the final answer when external
29
- facts materially affect the response.
30
-
31
- For open-source implementation questions, prefer source-backed answers: inspect
32
- repository files when available, identify the relevant implementation, and cite
33
- stable source links or file references instead of relying on summaries alone.
34
-
35
- ### Workspace Inspection
36
-
37
- Use shell and file tools for local, non-destructive inspection of the current
38
- workspace. Follow repository instructions, prefer precise searches, and avoid
39
- large raw dumps when a focused read is enough.
40
-
41
- ### Future Basic Capabilities
42
-
43
- Additional low-level runtime tools may be grouped here later. Keep Basic as a
44
- capability umbrella, not a product workflow. If a capability gains product
45
- state, authority rules, or durable Pod semantics, move that guidance into a
46
- specific skill or shared model contract instead of expanding Basic indefinitely.
@@ -1,165 +0,0 @@
1
- ---
2
- name: capture
3
- description: Use when LinX Secretary should save, remember, collect, classify, or propose durable Pod memory from chat, files, URLs, fetched documents, or already-observed workspace/Pod content.
4
- ---
5
-
6
- # Capture
7
-
8
- Capture is LinX Secretary's product workflow for turning useful observed
9
- content into durable user-owned Pod resources. It is not a raw Pod IO skill and
10
- not a private memory bucket.
11
-
12
- Use `linx_capture` for CaptureCandidate/CaptureEvent ledger records and
13
- ApprovalRequest/InputRequest gates. Use `xpod-cli` for formal typed resource
14
- writes when the final user-facing object itself must be created. Capture owns
15
- the judgment: whether something is worth saving, what semantic type it should
16
- become, where it belongs, and whether the user must approve or provide missing
17
- information.
18
-
19
- ## Entry Points
20
-
21
- ### Explicit Capture
22
-
23
- Use this path when the user says things like:
24
-
25
- - "记住这个"
26
- - "保存这个"
27
- - "收藏这个链接"
28
- - "放到这个项目的决策里"
29
- - "这个以后作为证据"
30
-
31
- If the user gives a clear type, location, and content, write the formal typed
32
- resource directly, then call `linx_capture` with `direct_commit_event` to
33
- record a `CaptureEvent`.
34
-
35
- If the user asks to save but leaves type, location, or summary for Secretary to
36
- infer, use optimistic capture: write the best formal resource when safe,
37
- create/attach an `ApprovalRequest`, and call `linx_capture` with
38
- `optimistic_commit_event`. The resource may appear in normal views with a
39
- pending marker derived from Approval; Approval remains the authority state.
40
-
41
- ### Observed Capture
42
-
43
- Use this path when Secretary notices important content while doing normal work
44
- after read/find/fetch/search. This is passive. Do not perform extra scans only
45
- for capture.
46
-
47
- Observed capture creates a `CaptureCandidate` and `CaptureEvent` with decision
48
- `candidate_created` through `linx_capture` operation `observed_candidate`,
49
- unless an explicit user rule authorizes auto-promotion.
50
-
51
- ### Requested Scan
52
-
53
- Use this path only when the user explicitly asks to scan/import a directory,
54
- project, Pod area, URL set, or other source set. Requested scans normally
55
- create a batch of `CaptureCandidate` records. Auto-promotion requires explicit
56
- scope and approval.
57
-
58
- ## Classification
59
-
60
- Classify by both semantic type and target location.
61
-
62
- Semantic examples:
63
-
64
- - `Idea`: uncommitted system/product direction.
65
- - `Evidence`: proof, findings, logs, screenshots, patches, runtime artifacts.
66
- - `Report`: closure, review, status, handoff, or quality summary.
67
- - `Note`: general user memory or excerpt.
68
- - `Decision`: durable decision.
69
- - `Preference`, `Grant`, `AutomationRule`, `AgentConfig`: behavior-changing
70
- resources; pending versions may be visible but must not affect behavior.
71
- - `Link` / `Favorite`: saved URLs or resources.
72
- - `ContactInfo`: people-related facts.
73
-
74
- Target examples:
75
-
76
- - existing project, collection, folder, chat, thread, task, issue, run, or
77
- workspace;
78
- - LinX system-owned capture areas for candidates/events;
79
- - a proposed target that needs user input or approval.
80
-
81
- Use this priority:
82
-
83
- 1. User explicitly specified type or location.
84
- 2. Current thread/task/workspace/project context.
85
- 3. Existing Pod project/collection/folder/resource patterns.
86
- 4. Learned user correction rules.
87
- 5. LinX system-owned capture area.
88
- 6. `CaptureCandidate` plus `InputRequest` when still ambiguous.
89
-
90
- Do not impose a fixed LinX taxonomy when the user's Pod already has a relevant
91
- folder, collection, project, or resource type.
92
-
93
- ## Structure Creation
94
-
95
- Capture may create structure only under these authority levels:
96
-
97
- - system-owned: `/.data/capture/candidates/`, `/.data/capture/events/`.
98
- - user-directed: the user explicitly names the target structure.
99
- - learned-rule: the user has previously confirmed the same scoped placement.
100
- - AI-inferred: do not silently create user taxonomy; create a candidate,
101
- `InputRequest`, or `ApprovalRequest`.
102
-
103
- ## Approval and Input
104
-
105
- Do not create a capture-specific approval state machine.
106
-
107
- Use `ApprovalRequest` when authority is needed to:
108
-
109
- - commit or promote a candidate;
110
- - create user-facing folders/collections/resource types;
111
- - rollback or delete an optimistic capture;
112
- - enable a learned auto-promote rule;
113
- - activate behavior-changing resources.
114
-
115
- Use `InputRequest` when information is missing:
116
-
117
- - type;
118
- - location;
119
- - title;
120
- - merge target;
121
- - requested scan/import scope.
122
-
123
- `InboxNotification` is only the envelope. The authoritative state is the linked
124
- `ApprovalRequest` or `InputRequest`.
125
-
126
- `linx_capture` operations:
127
-
128
- - `observed_candidate`: creates `CaptureCandidate` and
129
- `CaptureEvent(candidate_created)`.
130
- - `direct_commit_event`: records a direct formal-resource commit after the
131
- formal resource was written.
132
- - `optimistic_commit_event`: records an optimistic formal-resource commit linked
133
- to an `ApprovalRequest`.
134
- - `ambiguous_input`: creates `CaptureCandidate`, `InputRequest`, and linked
135
- event when type/location/title is missing.
136
- - `approval_request`: creates `CaptureCandidate`, `ApprovalRequest`, and linked
137
- event when AI-inferred structure or authority is required.
138
- - `review_event`: records `promoted`, `rejected`, `corrected`, or `rollback`.
139
-
140
- ## Data Writing
141
-
142
- Prefer model-backed resources through `@undefineds.co/models` descriptors. When
143
- operating from a terminal/tool context, use `xpod obj` rather than hand-patching
144
- modeled TTL.
145
-
146
- Write:
147
-
148
- - `CaptureCandidate` for uncertain observed content.
149
- - `CaptureEvent` for every capture decision, correction, duplicate, rejection,
150
- rollback, or ignored item.
151
- - Formal typed resources when the result is clear enough.
152
-
153
- Do not inline long article/report/note bodies into TTL. Use file-primary
154
- resources with metadata.
155
-
156
- ## Duplicate and Correction Rules
157
-
158
- Before writing a formal resource, check whether the same source or target was
159
- already captured. If duplicate, do not create another formal resource; record
160
- `CaptureEvent(duplicate)` and ask about merge only if useful.
161
-
162
- When the user corrects type, target, title, summary, or content, record
163
- `CaptureEvent(corrected)` and treat it as a scoped classification hint for
164
- future captures. Do not silently generalize corrections across unrelated Pod
165
- areas.
@@ -1,93 +0,0 @@
1
- /**
2
- * Runtime-only Reconciler coordination helpers.
3
- *
4
- * Private/group is not a persisted Chat or Session type here. The runtime derives
5
- * ownership from explicit product policy and, when available, the number of
6
- * distinct human authorities participating in the surface.
7
- */
8
- export type ReconcilerOwner = 'client' | 'server';
9
- export type ResourceRef = string;
10
- export type WakeAgentReason = 'mention' | 'reconciler_decision' | 'manual';
11
- export type WakeAgentStatus = 'queued' | 'leased' | 'completed' | 'failed';
12
- export interface ReconcilerOwnership {
13
- reconcilerOwner: ReconcilerOwner;
14
- humanAuthorityCount?: number;
15
- }
16
- export interface SharedWakeAgentJob {
17
- id: string;
18
- thread: ResourceRef;
19
- triggerMessage: ResourceRef;
20
- agent: ResourceRef;
21
- reason: WakeAgentReason;
22
- status: WakeAgentStatus;
23
- createdAt: string;
24
- }
25
- export interface WakeAgentLeaseFields {
26
- priority?: 'low' | 'normal' | 'high';
27
- leaseOwner?: string;
28
- leaseExpiresAt?: string;
29
- }
30
- export interface ClientCapability {
31
- clientId: string;
32
- kind: 'cli' | 'desktop' | 'mobile' | 'web';
33
- user: string;
34
- canCoordinateClientOwned: boolean;
35
- canRunAgent: boolean;
36
- workspaceRefs: string[];
37
- heartbeatAt: string;
38
- }
39
- export interface ClientReconcilerLease {
40
- thread: ResourceRef;
41
- ownerClientId: string;
42
- ownerUser: string;
43
- fencingToken: string;
44
- expiresAt: string;
45
- }
46
- export interface ClientReconcilerLeaseGrantOptions {
47
- thread: ResourceRef;
48
- ownerUser: string;
49
- clients: ClientCapability[];
50
- previousLease?: ClientReconcilerLease | null;
51
- now?: Date | string | number;
52
- leaseTtlMs?: number;
53
- heartbeatTtlMs?: number;
54
- fencingToken?: string;
55
- randomId?: string;
56
- }
57
- export declare const CLIENT_RECONCILER_LEASE_TTL_MS = 30000;
58
- export declare const CLIENT_CAPABILITY_HEARTBEAT_TTL_MS = 45000;
59
- export declare function defaultReconcilerOwnerForPolicyKind(policyKind: string | undefined): ReconcilerOwner;
60
- export declare function resolveReconcilerOwnership(input?: {
61
- policyKind?: string;
62
- humanAuthorities?: readonly unknown[];
63
- humanAuthorityCount?: unknown;
64
- reconcilerOwner?: unknown;
65
- }): ReconcilerOwnership;
66
- export declare function isSingleHumanAuthority(input: {
67
- humanAuthorities?: readonly unknown[];
68
- humanAuthorityCount?: unknown;
69
- }): boolean;
70
- export declare function hasMultipleHumanAuthorities(input: {
71
- humanAuthorities?: readonly unknown[];
72
- humanAuthorityCount?: unknown;
73
- }): boolean;
74
- export declare function defaultSharedWakeAgentJobDedupeKey(input: Pick<SharedWakeAgentJob, 'thread' | 'triggerMessage' | 'agent'>): string;
75
- export declare function createSharedWakeAgentJob(input: Omit<SharedWakeAgentJob, 'id'> & {
76
- id?: string;
77
- }): SharedWakeAgentJob;
78
- export declare function sharedWakeAgentJobId(input: Pick<SharedWakeAgentJob, 'thread' | 'triggerMessage' | 'agent'>): string;
79
- export declare function isClientReconcilerLeaseActive(lease: ClientReconcilerLease | null | undefined, now?: Date | string | number): lease is ClientReconcilerLease;
80
- export declare function canClientCoordinateThread(input: {
81
- clientId?: string | null;
82
- thread: ResourceRef;
83
- lease?: ClientReconcilerLease | null;
84
- now?: Date | string | number;
85
- }): boolean;
86
- export declare function isClientCapabilityAlive(client: ClientCapability, now?: Date | string | number, heartbeatTtlMs?: number): boolean;
87
- export declare function selectClientReconciler(clients: ClientCapability[], options?: {
88
- ownerUser?: string;
89
- now?: Date | string | number;
90
- heartbeatTtlMs?: number;
91
- }): ClientCapability | null;
92
- export declare function grantClientReconcilerLease(options: ClientReconcilerLeaseGrantOptions): ClientReconcilerLease | null;
93
- export declare function createClientReconcilerFencingToken(thread: ResourceRef, clientId: string, now?: Date | string | number, randomId?: string): string;
@@ -1,145 +0,0 @@
1
- export const CLIENT_RECONCILER_LEASE_TTL_MS = 30_000;
2
- export const CLIENT_CAPABILITY_HEARTBEAT_TTL_MS = 45_000;
3
- const CLIENT_KIND_PRIORITY = {
4
- cli: 40,
5
- desktop: 30,
6
- mobile: 20,
7
- web: 10,
8
- };
9
- export function defaultReconcilerOwnerForPolicyKind(policyKind) {
10
- return policyKind === 'open_group' ? 'server' : 'client';
11
- }
12
- export function resolveReconcilerOwnership(input = {}) {
13
- const humanAuthorityCount = resolveHumanAuthorityCount(input);
14
- const owner = input.reconcilerOwner === 'client' || input.reconcilerOwner === 'server'
15
- ? input.reconcilerOwner
16
- : humanAuthorityCount !== undefined && humanAuthorityCount > 1
17
- ? 'server'
18
- : defaultReconcilerOwnerForPolicyKind(input.policyKind);
19
- return {
20
- reconcilerOwner: owner,
21
- ...(humanAuthorityCount !== undefined ? { humanAuthorityCount } : {}),
22
- };
23
- }
24
- export function isSingleHumanAuthority(input) {
25
- return resolveHumanAuthorityCount(input) === 1;
26
- }
27
- export function hasMultipleHumanAuthorities(input) {
28
- const count = resolveHumanAuthorityCount(input);
29
- return count !== undefined && count > 1;
30
- }
31
- export function defaultSharedWakeAgentJobDedupeKey(input) {
32
- return [input.thread, input.triggerMessage, input.agent].join('|');
33
- }
34
- export function createSharedWakeAgentJob(input) {
35
- const job = {
36
- ...input,
37
- id: input.id ?? sharedWakeAgentJobId(input),
38
- };
39
- return job;
40
- }
41
- export function sharedWakeAgentJobId(input) {
42
- return `wake_${hashString(defaultSharedWakeAgentJobDedupeKey(input))}`;
43
- }
44
- export function isClientReconcilerLeaseActive(lease, now = Date.now()) {
45
- if (!lease?.fencingToken || !lease.thread || !lease.ownerClientId || !lease.ownerUser || !lease.expiresAt) {
46
- return false;
47
- }
48
- const expiresAt = Date.parse(lease.expiresAt);
49
- const nowMs = toEpochMs(now);
50
- return Number.isFinite(expiresAt) && Number.isFinite(nowMs) && expiresAt > nowMs;
51
- }
52
- export function canClientCoordinateThread(input) {
53
- const clientId = normalizeText(input.clientId);
54
- if (!clientId || !input.thread || !isClientReconcilerLeaseActive(input.lease, input.now)) {
55
- return false;
56
- }
57
- return input.lease.thread === input.thread && input.lease.ownerClientId === clientId;
58
- }
59
- export function isClientCapabilityAlive(client, now = Date.now(), heartbeatTtlMs = CLIENT_CAPABILITY_HEARTBEAT_TTL_MS) {
60
- const heartbeatAt = Date.parse(client.heartbeatAt);
61
- const nowMs = toEpochMs(now);
62
- return Number.isFinite(heartbeatAt) && Number.isFinite(nowMs) && nowMs - heartbeatAt <= heartbeatTtlMs;
63
- }
64
- export function selectClientReconciler(clients, options = {}) {
65
- const now = options.now ?? Date.now();
66
- const eligible = clients
67
- .filter((client) => client.canCoordinateClientOwned)
68
- .filter((client) => !options.ownerUser || client.user === options.ownerUser)
69
- .filter((client) => isClientCapabilityAlive(client, now, options.heartbeatTtlMs))
70
- .sort(compareClientCapabilityForCoordination);
71
- return eligible[0] ?? null;
72
- }
73
- export function grantClientReconcilerLease(options) {
74
- const now = options.now ?? Date.now();
75
- const ttl = options.leaseTtlMs ?? CLIENT_RECONCILER_LEASE_TTL_MS;
76
- const previousOwner = options.previousLease && isClientReconcilerLeaseActive(options.previousLease, now)
77
- ? options.clients.find((client) => (client.clientId === options.previousLease?.ownerClientId
78
- && client.user === options.ownerUser
79
- && client.canCoordinateClientOwned
80
- && isClientCapabilityAlive(client, now, options.heartbeatTtlMs)))
81
- : undefined;
82
- const selected = previousOwner ?? selectClientReconciler(options.clients, {
83
- ownerUser: options.ownerUser,
84
- now,
85
- heartbeatTtlMs: options.heartbeatTtlMs,
86
- });
87
- if (!selected) {
88
- return null;
89
- }
90
- const nowMs = toEpochMs(now);
91
- const expiresAt = new Date(nowMs + ttl).toISOString();
92
- return {
93
- thread: options.thread,
94
- ownerClientId: selected.clientId,
95
- ownerUser: selected.user,
96
- fencingToken: options.fencingToken ?? createClientReconcilerFencingToken(options.thread, selected.clientId, nowMs, options.randomId),
97
- expiresAt,
98
- };
99
- }
100
- export function createClientReconcilerFencingToken(thread, clientId, now = Date.now(), randomId) {
101
- const epoch = toEpochMs(now);
102
- const entropy = normalizeText(randomId) ?? Math.random().toString(36).slice(2, 10);
103
- return `client_${hashString(`${thread}|${clientId}|${epoch}|${entropy}`)}`;
104
- }
105
- function compareClientCapabilityForCoordination(a, b) {
106
- const priority = CLIENT_KIND_PRIORITY[b.kind] - CLIENT_KIND_PRIORITY[a.kind];
107
- if (priority !== 0)
108
- return priority;
109
- const heartbeat = Date.parse(b.heartbeatAt) - Date.parse(a.heartbeatAt);
110
- if (heartbeat !== 0)
111
- return heartbeat;
112
- return a.clientId.localeCompare(b.clientId);
113
- }
114
- function resolveHumanAuthorityCount(input) {
115
- if (typeof input.humanAuthorityCount === 'number' && Number.isFinite(input.humanAuthorityCount)) {
116
- return Math.max(0, Math.floor(input.humanAuthorityCount));
117
- }
118
- if (!input.humanAuthorities)
119
- return undefined;
120
- const unique = new Set();
121
- for (const value of input.humanAuthorities) {
122
- const normalized = normalizeText(value);
123
- if (normalized)
124
- unique.add(normalized);
125
- }
126
- return unique.size;
127
- }
128
- function toEpochMs(value) {
129
- if (typeof value === 'number')
130
- return value;
131
- if (value instanceof Date)
132
- return value.getTime();
133
- return Date.parse(value);
134
- }
135
- function normalizeText(value) {
136
- return typeof value === 'string' && value.trim() ? value.trim() : undefined;
137
- }
138
- function hashString(value) {
139
- let hash = 0x811c9dc5;
140
- for (let index = 0; index < value.length; index += 1) {
141
- hash ^= value.charCodeAt(index);
142
- hash = Math.imul(hash, 0x01000193);
143
- }
144
- return (hash >>> 0).toString(36);
145
- }