@deepseek-ai/dsh-cordis-client-runner 0.1.2-alpha.3 → 0.1.2-alpha.4

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/README.i18n.yaml CHANGED
@@ -2,5 +2,5 @@
2
2
  # side as of the last confirmed-consistent state. Both languages carry equal authority;
3
3
  # after editing either side, bring the other along and re-record with:
4
4
  # pnpm run verify-translation-pairing --write packages/extensions/cordis-client-runner/README.md
5
- README.md: ba813e3498752902b80102ecad5802187d95a129
6
- README.zh.md: 1b975550dc4d08aef90f8e7a79a81a67983dfce1
5
+ README.md: 3b5762786e0f5b00fc80533ca4fa97a3d4cd0a4b
6
+ README.zh.md: d68dc218f75e65c9a1787a5e43f018c9cdfa3383
package/README.md CHANGED
@@ -140,3 +140,5 @@ These limits define where the browser half needs special care. They are current
140
140
  None.
141
141
 
142
142
  </details>
143
+
144
+ **Runtime invariant:** No companion is published. The owned relation (a live Plugin's loader entry exists exactly while one Plugin Run ID is live) is browser-only state reachable through the client half's service, which the node-plane companion cannot observe. The relation is asserted by the package's own load/teardown coverage instead.
package/README.zh.md CHANGED
@@ -140,3 +140,5 @@ kind: "package-reference"
140
140
  无。
141
141
 
142
142
  </details>
143
+
144
+ **运行时不变式:** 不发布伴生入口。live Plugin 与 Plugin Run ID 的关系只存在于浏览器侧 service,Host 不变式无法观察;包内 load/teardown 测试直接覆盖该关系。
package/lib/client.js CHANGED
@@ -1720,7 +1720,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
1720
1720
  },
1721
1721
  {
1722
1722
  name: "InjectFace",
1723
- declaration: "export type InjectFace<I extends object> = I extends {\n hooks: infer HS extends HooksSources;\n} ? Omit<I, 'hooks'> & PropsHooks<HS> : I;"
1723
+ declaration: "export type InjectFace<I extends object> = I extends {\n hooks: infer HS extends HooksSources;\n} ? I extends {\n keyedHooks: infer KS extends KeyedHooksSources;\n} ? Omit<I, 'hooks' | 'keyedHooks'> & PropsHooks<HS> & PropsKeyedHooks<KS> : Omit<I, 'hooks'> & PropsHooks<HS> : I extends {\n keyedHooks: infer KS extends KeyedHooksSources;\n} ? Omit<I, 'keyedHooks'> & PropsKeyedHooks<KS> : I;"
1724
1724
  },
1725
1725
  {
1726
1726
  name: "InjectParams",
@@ -1728,7 +1728,19 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
1728
1728
  },
1729
1729
  {
1730
1730
  name: "ISession",
1731
- declaration: "export interface ISession {\n readonly sessionId: SessionId;\n readonly projections: ProjectionsFace;\n beginSubmission(input: BeginSubmissionInput): SubmissionHandle;\n prompt(content: PromptContentPart[], mode: 'queue' | 'steer', signal?: AbortSignal, requestId?: SessionRequestId): Promise<RemoteResult<{\n accepted: true;\n }>>;\n readAttachment(attachmentId: AttachmentIdType): Promise<RemoteResult<{\n attachment: ImageAttachmentRef;\n data: Uint8Array;\n }>>;\n updateQueue(itemId: MessageId, action: QueueAction): Promise<RemoteResult<{\n accepted: true;\n }>>;\n cancel(): Promise<RemoteResult<{\n accepted: true;\n }>>;\n rename(title: string): Promise<RemoteResult<{\n title: string;\n seq: number;\n }>>;\n loadOlder(): Promise<void>;\n loadThrough(seq: number): Promise<void>;\n command(line: string): Promise<RemoteResult<{\n matched: boolean;\n }>>;\n}"
1731
+ declaration: "export interface ISession {\n readonly sessionId: SessionId;\n readonly projections: ProjectionsFace;\n beginSubmission(input: BeginSubmissionInput): SubmissionHandle;\n prompt(content: PromptContentPart[], mode: 'queue' | 'steer', signal?: AbortSignal, requestId?: SessionRequestId): Promise<RemoteResult<{\n accepted: true;\n }>>;\n readAttachment(attachmentId: AttachmentIdType): Promise<RemoteResult<{\n attachment: ImageAttachmentRef;\n data: Uint8Array;\n }>>;\n updateQueue(itemId: MessageId, action: QueueAction): Promise<RemoteResult<{\n accepted: true;\n }>>;\n cancel(): Promise<RemoteResult<{\n accepted: true;\n }>>;\n rename(title: string): Promise<RemoteResult<{\n title: string;\n seq: SessionSeq;\n }>>;\n loadOlder(): Promise<void>;\n loadThrough(seq: SessionSeq): Promise<void>;\n command(line: string): Promise<RemoteResult<{\n matched: boolean;\n }>>;\n}"
1732
+ },
1733
+ {
1734
+ name: "KeyedHooksSources",
1735
+ declaration: "export type KeyedHooksSources = Record<string, KeyedStandardSource>;"
1736
+ },
1737
+ {
1738
+ name: "KeyedSnapshotSelectorHook",
1739
+ declaration: "export type KeyedSnapshotSelectorHook<Snapshot> = {\n (key: string): Snapshot | undefined;\n <Selected>(key: string, selector: (value: Snapshot | undefined) => Selected, equal?: (left: Selected, right: Selected) => boolean): Selected;\n};"
1740
+ },
1741
+ {
1742
+ name: "KeyedStandardSource",
1743
+ declaration: "export type KeyedStandardSource = (key: string) => HostObservable<unknown> | undefined;"
1732
1744
  },
1733
1745
  {
1734
1746
  name: "KeyPropsOf",
@@ -1814,6 +1826,10 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
1814
1826
  name: "PropsHooks",
1815
1827
  declaration: "export type PropsHooks<HS extends HooksSources> = {\n [N in keyof HS & string as `use${Capitalize<N>}`]: SnapshotSelectorHook<HS[N] extends HostObservable<infer T> ? T : never>;\n};"
1816
1828
  },
1829
+ {
1830
+ name: "PropsKeyedHooks",
1831
+ declaration: "export type PropsKeyedHooks<HS extends KeyedHooksSources> = {\n [N in keyof HS & string as `use${Capitalize<N>}`]: KeyedSnapshotSelectorHook<HS[N] extends (key: string) => HostObservable<infer T> | undefined ? T : never>;\n};"
1832
+ },
1817
1833
  {
1818
1834
  name: "PropsLocale",
1819
1835
  declaration: "export type PropsLocale<N> = N extends keyof LocaleNamespaceMap & string ? {\n t: TranslateNS<N>;\n} : object;"
@@ -2228,7 +2244,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2228
2244
  occupants: ["client-ui-message-feedback MessageFeedbackActions id 'feedback'"],
2229
2245
  replaceRisk: "none",
2230
2246
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.chat.assistant-actions', () => ctx.slots.register(\n { name: 'conversation.chat.assistant-actions', id: 'my-entry', order: 100, label: 'My entry' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
2231
- source: "packages/client/ui-chat/src/client/contract/slots.ts:204"
2247
+ source: "packages/client/ui-chat/src/client/contract/slots.ts:221"
2232
2248
  },
2233
2249
  {
2234
2250
  key: "conversation.chat.commandview",
@@ -2269,7 +2285,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2269
2285
  occupants: [],
2270
2286
  replaceRisk: "none",
2271
2287
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.chat.commandview', () => ctx.slots.register(\n { name: 'conversation.chat.commandview', key: '<one key the owner dispatches>' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
2272
- source: "packages/client/ui-chat/src/client/contract/slots.ts:192"
2288
+ source: "packages/client/ui-chat/src/client/contract/slots.ts:209"
2273
2289
  },
2274
2290
  {
2275
2291
  key: "conversation.chat.node",
@@ -2305,7 +2321,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2305
2321
  "useTrajectory: UseTrajectory"
2306
2322
  ],
2307
2323
  keyDomain: "fixed by the owner's key table { [Kind in ChatNodeKind]: { node: ChatNode<Kind> } }, already taken: assistant-step, command, command-input, compaction, context, manual-compaction, model-retry, steering, system-prompt, tool-call, turn-error, turn-max-tokens, turn-process, turn-tail, unknown, user, workflow-run",
2308
- hookContext: "string",
2324
+ hookContext: "ConversationLocationDataStore<ConversationTurnDataMap> | undefined",
2309
2325
  slotInject: "ChatNodeTurnDataInjected",
2310
2326
  declaredBy: "an entry in 'conversation.view' (client-ui-chat), so it exists while that entry is mounted",
2311
2327
  occupants: [
@@ -2329,7 +2345,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2329
2345
  ],
2330
2346
  replaceRisk: "shadows-shipped-ui",
2331
2347
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.chat.node', () => ctx.slots.register(\n { name: 'conversation.chat.node', key: '<one key the owner dispatches>' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
2332
- source: "packages/client/ui-chat/src/client/contract/slots.ts:173"
2348
+ source: "packages/client/ui-chat/src/client/contract/slots.ts:190"
2333
2349
  },
2334
2350
  {
2335
2351
  key: "conversation.chat.turnTail",
@@ -2366,7 +2382,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2366
2382
  occupants: ["client-ui-deliverables ProducedFiles"],
2367
2383
  replaceRisk: "none",
2368
2384
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.chat.turnTail', () => ctx.slots.register(\n { name: 'conversation.chat.turnTail', select: owner => null },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
2369
- source: "packages/client/ui-chat/src/client/contract/slots.ts:198"
2385
+ source: "packages/client/ui-chat/src/client/contract/slots.ts:215"
2370
2386
  },
2371
2387
  {
2372
2388
  key: "conversation.composer",
@@ -2420,7 +2436,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2420
2436
  summary: "Resident composer body, including the no-Session inert state.",
2421
2437
  doc: "Resident composer body, including the no-Session inert state.",
2422
2438
  registerOptions: [],
2423
- ownerProps: ["/** Owner share of the resident composer bar. */\nexport interface ComposerBarOwnerProps {\n /** Hero uses centered placement; composer uses the active bottom placement. */\n variant: 'hero' | 'composer'\n /** A feature-owned reason that makes message input inert while leaving model selection live. */\n blocked?: { readonly reason: string }\n /** Lock all message actions while preserving the resident composer surface. */\n disabled?: boolean\n /** Whether the shared Workspace picker is expanded. */\n workspacePickerOpen?: boolean\n /** Open the Workspace picker from the inert composer surface. */\n onRequestWorkspace?: () => void\n placeholder?: string\n /** Optional content rendered above the composer surface. */\n accessory?: ReactNode\n /** Floating overlay content rendered inside the composer card. */\n overlay?: ReactNode\n /** Left-side input controls. */\n leftItems?: ReactNode\n /** Right-side input controls. */\n rightItems?: ReactNode\n /** Ambient content below the card. */\n footer?: ReactNode\n}"],
2439
+ ownerProps: ["/** Owner share of the resident composer bar. */\nexport interface ComposerBarOwnerProps {\n /** Hero uses centered placement; composer uses the active bottom placement. */\n variant: 'hero' | 'composer'\n /** A feature-owned reason that makes message input inert while leaving model selection live. */\n blocked?: { readonly reason: string }\n /** Lock all message actions while preserving the resident composer surface. */\n disabled?: boolean\n /** Whether the shared Workspace picker is expanded. */\n workspacePickerOpen?: boolean\n /** Open the Workspace picker from the inert composer surface. */\n onRequestWorkspace?: () => void\n placeholder?: string\n /** Optional content rendered above the composer surface. */\n accessory?: ReactNode\n}"],
2424
2440
  ownerPropsReferences: ["Workspace"],
2425
2441
  standardProps: [
2426
2442
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
@@ -2469,8 +2485,8 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2469
2485
  doc: "Display text where the owner projects one (nav rows, tabs). A thunk is re-read on every projection, so localized text follows the active locale without re-registering."
2470
2486
  }
2471
2487
  ],
2472
- ownerProps: ["/** Point-in-time owner values for composer extension entries. */\nexport interface InputZone {\n readonly session: SessionSnapshot\n readonly input: InputState\n}"],
2473
- ownerPropsReferences: ["InputState", "SessionSnapshot"],
2488
+ ownerProps: [],
2489
+ ownerPropsReferences: [],
2474
2490
  standardProps: [
2475
2491
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2476
2492
  "useSessions: UseSessions",
@@ -2488,7 +2504,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2488
2504
  keyDomain: "",
2489
2505
  hookContext: "",
2490
2506
  slotInject: "",
2491
- declaredBy: "an entry in 'conversation' (client-ui-conversation), so it exists while that entry is mounted",
2507
+ declaredBy: "an entry in 'conversation.composer.bar' (client-ui-conversation), so it exists while that entry is mounted",
2492
2508
  occupants: ["client-ui-chat StatsLine id 'stats'"],
2493
2509
  replaceRisk: "none",
2494
2510
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.composer.dock', () => ctx.slots.register(\n { name: 'conversation.composer.dock', id: 'my-entry', order: 100, label: 'My entry' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
@@ -2524,7 +2540,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2524
2540
  occupants: ["client-ui-tool ToolDetails"],
2525
2541
  replaceRisk: "shadows-shipped-ui",
2526
2542
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.details.tool', () => ctx.slots.register(\n { name: 'conversation.details.tool' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
2527
- source: "packages/client/ui-chat/src/client/contract/slots.ts:210"
2543
+ source: "packages/client/ui-chat/src/client/contract/slots.ts:227"
2528
2544
  },
2529
2545
  {
2530
2546
  key: "conversation.hero.agentPreset",
@@ -2733,8 +2749,8 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2733
2749
  doc: "Display text where the owner projects one (nav rows, tabs). A thunk is re-read on every projection, so localized text follows the active locale without re-registering."
2734
2750
  }
2735
2751
  ],
2736
- ownerProps: ["/** Point-in-time owner values for composer extension entries. */\nexport interface InputZone {\n readonly session: SessionSnapshot\n readonly input: InputState\n}"],
2737
- ownerPropsReferences: ["InputState", "SessionSnapshot"],
2752
+ ownerProps: [],
2753
+ ownerPropsReferences: [],
2738
2754
  standardProps: [
2739
2755
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2740
2756
  "useSessions: UseSessions",
@@ -2752,7 +2768,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2752
2768
  keyDomain: "",
2753
2769
  hookContext: "",
2754
2770
  slotInject: "",
2755
- declaredBy: "an entry in 'conversation' (client-ui-conversation), so it exists while that entry is mounted",
2771
+ declaredBy: "an entry in 'conversation.composer.bar' (client-ui-conversation), so it exists while that entry is mounted",
2756
2772
  occupants: [],
2757
2773
  replaceRisk: "none",
2758
2774
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.input.left', () => ctx.slots.register(\n { name: 'conversation.input.left', id: 'my-entry', order: 100, label: 'My entry' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
@@ -2835,7 +2851,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2835
2851
  keyDomain: "",
2836
2852
  hookContext: "",
2837
2853
  slotInject: "",
2838
- declaredBy: "an entry in 'conversation' (client-ui-conversation), so it exists while that entry is mounted",
2854
+ declaredBy: "an entry in 'conversation.composer.bar' (client-ui-conversation), so it exists while that entry is mounted",
2839
2855
  occupants: ["client-ui-commands PopupSelectView id 'command-popup'", "client-ui-input-trigger MenuView id 'slash-menu'"],
2840
2856
  replaceRisk: "none",
2841
2857
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.input.overlay', () => ctx.slots.register(\n { name: 'conversation.input.overlay', id: 'my-entry', order: 100, label: 'My entry' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
@@ -2899,8 +2915,8 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2899
2915
  doc: "Display text where the owner projects one (nav rows, tabs). A thunk is re-read on every projection, so localized text follows the active locale without re-registering."
2900
2916
  }
2901
2917
  ],
2902
- ownerProps: ["/** Point-in-time owner values for composer extension entries. */\nexport interface InputZone {\n readonly session: SessionSnapshot\n readonly input: InputState\n}"],
2903
- ownerPropsReferences: ["InputState", "SessionSnapshot"],
2918
+ ownerProps: [],
2919
+ ownerPropsReferences: [],
2904
2920
  standardProps: [
2905
2921
  "useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>",
2906
2922
  "useSessions: UseSessions",
@@ -2918,7 +2934,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2918
2934
  keyDomain: "",
2919
2935
  hookContext: "",
2920
2936
  slotInject: "",
2921
- declaredBy: "an entry in 'conversation' (client-ui-conversation), so it exists while that entry is mounted",
2937
+ declaredBy: "an entry in 'conversation.composer.bar' (client-ui-conversation), so it exists while that entry is mounted",
2922
2938
  occupants: [],
2923
2939
  replaceRisk: "none",
2924
2940
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.input.right', () => ctx.slots.register(\n { name: 'conversation.input.right', id: 'my-entry', order: 100, label: 'My entry' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
@@ -2958,7 +2974,7 @@ call: (method, args = null) => env.invoke(method, args) }, harnessTrap(), ...Obj
2958
2974
  occupants: ["client-ui-attachment MessageImages"],
2959
2975
  replaceRisk: "shadows-shipped-ui",
2960
2976
  example: "return {\n inject: ['slots'],\n apply(ctx) {\n ctx.slots.inject('conversation.message.images', () => ctx.slots.register(\n { name: 'conversation.message.images' },\n () => React.createElement('div', null, 'hello'),\n ))\n },\n}",
2961
- source: "packages/client/ui-chat/src/client/contract/slots.ts:186"
2977
+ source: "packages/client/ui-chat/src/client/contract/slots.ts:203"
2962
2978
  },
2963
2979
  {
2964
2980
  key: "conversation.session",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@deepseek-ai/dsh-cordis-client-runner",
3
3
  "description": "Browser half of dynamic dual-half plugin packages: event subscription, closure evaluation, guard facade, and loader entries",
4
- "version": "0.1.2-alpha.3",
4
+ "version": "0.1.2-alpha.4",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -18,10 +18,6 @@
18
18
  "types": "./lib/types/index.d.ts",
19
19
  "default": "./lib/index.js"
20
20
  },
21
- "./invariant": {
22
- "types": "./lib/types/invariant.d.ts",
23
- "default": "./lib/invariant.js"
24
- },
25
21
  "./client": {
26
22
  "types": "./lib/types/client/index.d.ts",
27
23
  "default": "./lib/client.js"
@@ -47,18 +43,16 @@
47
43
  "devDependencies": {
48
44
  "@types/react": "~18.3.1",
49
45
  "react": "^18.2.0",
50
- "@deepseek-ai/dsh-api-remotes": "^0.1.2-alpha.3",
51
- "@deepseek-ai/dsh-client-modules": "^0.1.2-alpha.3",
52
46
  "@deepseek-ai/cordis-plugin-loader": "^1.0.3",
53
- "@deepseek-ai/dsh-client-ui-renderer": "^0.1.2-alpha.3",
54
- "@deepseek-ai/dsh-client-ui-theme": "^0.1.2-alpha.3",
55
- "@deepseek-ai/dsh-invariants": "^0.1.2-alpha.3",
56
- "@deepseek-ai/dsh-util-values": "^0.1.2-alpha.3",
47
+ "@deepseek-ai/dsh-api-remotes": "^0.1.2-alpha.4",
48
+ "@deepseek-ai/dsh-client-modules": "^0.1.2-alpha.4",
49
+ "@deepseek-ai/dsh-client-ui-renderer": "^0.1.2-alpha.4",
50
+ "@deepseek-ai/dsh-client-ui-theme": "^0.1.2-alpha.4",
51
+ "@deepseek-ai/dsh-util-values": "^0.1.2-alpha.4",
57
52
  "@deepseek-ai/cordis": "^4.0.2"
58
53
  },
59
54
  "files": [
60
55
  "lib/index.js",
61
- "lib/invariant.js",
62
56
  "lib/client.js",
63
57
  "lib/types/**/*.d.ts"
64
58
  ],
package/lib/invariant.js DELETED
@@ -1,26 +0,0 @@
1
- //#region lib/types/invariant.js
2
- /**
3
- * Package-owned invariant companion for `@deepseek-ai/dsh-cordis-client-runner`.
4
- * @module @deepseek-ai/dsh-cordis-client-runner/invariant
5
- */
6
- const PACKAGE_NAME = "@deepseek-ai/dsh-cordis-client-runner";
7
- /** Cordis companion plugin name. */
8
- const name = "cordis-client-runner-invariant";
9
- /** Service required before the companion can reserve package ownership. */
10
- const inject = ["invariants"];
11
- /**
12
- * No runtime invariant: the owned relation (a live
13
- * Plugin's loader entry exists exactly while one Plugin Run ID is live) is
14
- * browser-only state reachable through the client half's service, which the
15
- * node-plane companion cannot observe. The relation is asserted by the
16
- * package's own load/teardown coverage instead.
17
- */
18
- const install = () => {};
19
- /**
20
- * Register this package's invariant companion.
21
- * @param ctx - Cordis context carrying the invariant service.
22
- * @returns the installed registration's disposer after setup succeeds.
23
- */
24
- const apply = (ctx) => Promise.resolve(ctx.invariants.register(PACKAGE_NAME, install));
25
- //#endregion
26
- export { apply, inject, name };
@@ -1,16 +0,0 @@
1
- /**
2
- * Package-owned invariant companion for `@deepseek-ai/dsh-cordis-client-runner`.
3
- * @module @deepseek-ai/dsh-cordis-client-runner/invariant
4
- */
5
- import type { Context } from '@deepseek-ai/cordis';
6
- /** Cordis companion plugin name. */
7
- export declare const name = "cordis-client-runner-invariant";
8
- /** Service required before the companion can reserve package ownership. */
9
- export declare const inject: string[];
10
- /**
11
- * Register this package's invariant companion.
12
- * @param ctx - Cordis context carrying the invariant service.
13
- * @returns the installed registration's disposer after setup succeeds.
14
- */
15
- export declare const apply: (ctx: Context) => Promise<() => void>;
16
- //# sourceMappingURL=invariant.d.ts.map