@nextclaw/shared 0.4.14 → 0.4.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +22 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +55 -1
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -105,6 +105,10 @@ declare class DisposableStore implements Disposable {
|
|
|
105
105
|
type UiShowContentPurpose = "read" | "preview" | "edit" | "interact";
|
|
106
106
|
type UiShowContentPlacement = "inline" | "side_panel";
|
|
107
107
|
type UiShowContentFileViewer = "auto" | "source" | "rendered";
|
|
108
|
+
type UiContentParamValue = null | boolean | number | string | UiContentParamValue[] | {
|
|
109
|
+
[key: string]: UiContentParamValue;
|
|
110
|
+
};
|
|
111
|
+
type UiContentParams = Record<string, UiContentParamValue>;
|
|
108
112
|
type UiShowContentTarget = {
|
|
109
113
|
type: "file";
|
|
110
114
|
payload: {
|
|
@@ -112,6 +116,7 @@ type UiShowContentTarget = {
|
|
|
112
116
|
line: number | undefined;
|
|
113
117
|
column: number | undefined;
|
|
114
118
|
viewer: UiShowContentFileViewer | undefined;
|
|
119
|
+
params?: UiContentParams;
|
|
115
120
|
};
|
|
116
121
|
} | {
|
|
117
122
|
type: "url";
|
|
@@ -123,6 +128,7 @@ type UiShowContentTarget = {
|
|
|
123
128
|
payload: {
|
|
124
129
|
appId: string;
|
|
125
130
|
path?: string;
|
|
131
|
+
params?: UiContentParams;
|
|
126
132
|
};
|
|
127
133
|
};
|
|
128
134
|
type UiShowContentEventPayload = {
|
|
@@ -394,5 +400,20 @@ type InlineContentElement = {
|
|
|
394
400
|
};
|
|
395
401
|
declare function readInlineContentHeight(body: InlineContentElement | null | undefined, documentElement: InlineContentElement): number;
|
|
396
402
|
//#endregion
|
|
397
|
-
|
|
403
|
+
//#region src/utils/ui-content-params.utils.d.ts
|
|
404
|
+
declare const UI_CONTENT_PARAMS_HOST_CONTRACT: {
|
|
405
|
+
readonly bootstrapQueryParam: "nextclawContentParams";
|
|
406
|
+
readonly bootstrapQueryValue: "1";
|
|
407
|
+
readonly maxDepth: 32;
|
|
408
|
+
readonly maxSerializedBytes: number;
|
|
409
|
+
readonly windowNamePrefix: "nextclaw:content-params:v1:";
|
|
410
|
+
};
|
|
411
|
+
declare class UiContentParamsError extends Error {
|
|
412
|
+
constructor(message: string);
|
|
413
|
+
}
|
|
414
|
+
declare function readUiContentParams(value: unknown): UiContentParams | undefined;
|
|
415
|
+
declare function createUiContentParamsWindowName(params: UiContentParams | undefined): string | undefined;
|
|
416
|
+
declare function appendUiContentParamsBootstrapQuery(url: string, params: UiContentParams | undefined): string;
|
|
417
|
+
//#endregion
|
|
418
|
+
export { type AgentRunSendIngressPayload, type AgentRunSessionMaterializationMetadata, type AgentRunSessionMessageRequestPayload, type AppEvent, type AppEventEmitOptions, type AppEventEnvelope, type AppEventHandler, type AppEventKey, type AppEventSource, CHAT_INLINE_TOKENS_METADATA_KEY, CHAT_INLINE_TOKENS_SCHEMA_VERSION, CHAT_SESSION_MATERIALIZATION_METADATA_KEY, CHAT_WORKSPACE_DIRECTORY_TOKEN_KIND, CHAT_WORKSPACE_FILE_TOKEN_KIND, type ChatInlineTokenMetadata, type ChatInlineTokensMetadata, type ChatSkillInlineTokenMetadata, type ChatSkillSource, type ChatWorkspaceInlineTokenMetadata, type Cleanup, type Disposable, DisposableOwner, DisposableStore, EventBus, type EventBusOptions, type EventEmitOptions, type EventEnvelope, type EventHandler, type EventKey, type EventSource, type ExtensionChannelCommandExecuteIngressPayload, type ExtensionChannelCommandExecuteResponse, type ExtensionChannelCommandListIngressPayload, type ExtensionChannelCommandListResponse, type ExtensionChannelCommandOption, type ExtensionChannelCommandOptionType, type ExtensionChannelCommandSpec, type ExtensionChannelConfigGetIngressPayload, type ExtensionChannelFileContent, type ExtensionChannelImageContent, type ExtensionChannelMessageContent, type ExtensionChannelMessageSubmitIngressPayload, type ExtensionChannelSubmittedAttachment, type ExtensionChannelTextContent, type ExtensionResponseIngressPayload, Ingress, type IngressContext, type IngressEnvelope, type IngressHandler, type InstallationKind, type Key, PANEL_APP_INLINE_HOST_CONTRACT, RUNTIME_DEFAULT_MODEL_VALUE, type RuntimeModelSelectionMode, type TypedKey, UI_CONTENT_PARAMS_HOST_CONTRACT, type UiContentParamValue, type UiContentParams, UiContentParamsError, type UiShowContentEventPayload, type UiShowContentFileViewer, type UiShowContentPlacement, type UiShowContentPurpose, type UiShowContentTarget, type Unsubscribe, type UpdateBlockReason, type UpdateFailureStage, type UpdateProgress, type UpdateSnapshot, type UpdateStatus, appendUiContentParamsBootstrapQuery, createAppEventKey, createEventKey, createTypedKey, createUiContentParamsWindowName, eventKeys, getKeyId, ingressKeys, isRuntimeDefaultModelValue, normalizeRuntimeModelSelectionMode, readInlineContentHeight, readUiContentParams, toDisposable };
|
|
398
419
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/types/typed-key.types.ts","../src/types/event-bus.types.ts","../src/services/event-bus.service.ts","../src/services/ingress.service.ts","../src/services/disposable.service.ts","../src/types/ui-show-content.types.ts","../src/types/update.types.ts","../src/configs/event-keys.config.ts","../src/configs/ingress-keys.config.ts","../src/configs/runtime-model.config.ts","../src/configs/chat-composer-token.config.ts","../src/configs/panel-app-inline-host.config.ts","../src/utils/inline-content-height.utils.ts"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/types/typed-key.types.ts","../src/types/event-bus.types.ts","../src/services/event-bus.service.ts","../src/services/ingress.service.ts","../src/services/disposable.service.ts","../src/types/ui-show-content.types.ts","../src/types/update.types.ts","../src/configs/event-keys.config.ts","../src/configs/ingress-keys.config.ts","../src/configs/runtime-model.config.ts","../src/configs/chat-composer-token.config.ts","../src/configs/panel-app-inline-host.config.ts","../src/utils/inline-content-height.utils.ts","../src/utils/ui-content-params.utils.ts"],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -267,6 +267,60 @@ function readInlineContentHeight(body, documentElement) {
|
|
|
267
267
|
return Math.ceil(Math.max(body?.clientHeight ?? 0, body?.offsetHeight ?? 0, body?.scrollHeight ?? 0, documentElement.offsetHeight));
|
|
268
268
|
}
|
|
269
269
|
//#endregion
|
|
270
|
-
|
|
270
|
+
//#region src/utils/ui-content-params.utils.ts
|
|
271
|
+
const UI_CONTENT_PARAMS_HOST_CONTRACT = {
|
|
272
|
+
bootstrapQueryParam: "nextclawContentParams",
|
|
273
|
+
bootstrapQueryValue: "1",
|
|
274
|
+
maxDepth: 32,
|
|
275
|
+
maxSerializedBytes: 64 * 1024,
|
|
276
|
+
windowNamePrefix: "nextclaw:content-params:v1:"
|
|
277
|
+
};
|
|
278
|
+
var UiContentParamsError = class extends Error {
|
|
279
|
+
constructor(message) {
|
|
280
|
+
super(message);
|
|
281
|
+
this.name = "UiContentParamsError";
|
|
282
|
+
}
|
|
283
|
+
};
|
|
284
|
+
function assertJsonValue(value, depth, ancestors) {
|
|
285
|
+
if (value === null || typeof value === "string" || typeof value === "boolean") return;
|
|
286
|
+
if (typeof value === "number") {
|
|
287
|
+
if (!Number.isFinite(value)) throw new UiContentParamsError("params must contain only finite numbers.");
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
if (typeof value !== "object") throw new UiContentParamsError("params must contain only JSON values.");
|
|
291
|
+
if (depth >= UI_CONTENT_PARAMS_HOST_CONTRACT.maxDepth) throw new UiContentParamsError(`params must not exceed ${UI_CONTENT_PARAMS_HOST_CONTRACT.maxDepth} nested levels.`);
|
|
292
|
+
if (ancestors.includes(value)) throw new UiContentParamsError("params must not contain circular references.");
|
|
293
|
+
const nextAncestors = [...ancestors, value];
|
|
294
|
+
if (Array.isArray(value)) {
|
|
295
|
+
for (const item of value) assertJsonValue(item, depth + 1, nextAncestors);
|
|
296
|
+
return;
|
|
297
|
+
}
|
|
298
|
+
const prototype = Object.getPrototypeOf(value);
|
|
299
|
+
if (prototype !== Object.prototype && prototype !== null) throw new UiContentParamsError("params must contain only plain objects.");
|
|
300
|
+
for (const item of Object.values(value)) assertJsonValue(item, depth + 1, nextAncestors);
|
|
301
|
+
}
|
|
302
|
+
function readUiContentParams(value) {
|
|
303
|
+
if (typeof value === "undefined") return;
|
|
304
|
+
if (value === null || typeof value !== "object" || Array.isArray(value)) throw new UiContentParamsError("params must be a JSON object.");
|
|
305
|
+
assertJsonValue(value, 0, []);
|
|
306
|
+
const serialized = JSON.stringify(value);
|
|
307
|
+
if (new TextEncoder().encode(serialized).byteLength > UI_CONTENT_PARAMS_HOST_CONTRACT.maxSerializedBytes) throw new UiContentParamsError(`params must not exceed ${UI_CONTENT_PARAMS_HOST_CONTRACT.maxSerializedBytes} serialized bytes.`);
|
|
308
|
+
return value;
|
|
309
|
+
}
|
|
310
|
+
function createUiContentParamsWindowName(params) {
|
|
311
|
+
const normalized = readUiContentParams(params);
|
|
312
|
+
return normalized ? `${UI_CONTENT_PARAMS_HOST_CONTRACT.windowNamePrefix}${JSON.stringify(normalized)}` : void 0;
|
|
313
|
+
}
|
|
314
|
+
function appendUiContentParamsBootstrapQuery(url, params) {
|
|
315
|
+
if (!readUiContentParams(params)) return url;
|
|
316
|
+
const [withoutHash, hash] = url.split("#", 2);
|
|
317
|
+
const queryStart = withoutHash.indexOf("?");
|
|
318
|
+
const pathname = queryStart >= 0 ? withoutHash.slice(0, queryStart) : withoutHash;
|
|
319
|
+
const query = new URLSearchParams(queryStart >= 0 ? withoutHash.slice(queryStart + 1) : "");
|
|
320
|
+
query.set(UI_CONTENT_PARAMS_HOST_CONTRACT.bootstrapQueryParam, UI_CONTENT_PARAMS_HOST_CONTRACT.bootstrapQueryValue);
|
|
321
|
+
return `${pathname}?${query.toString()}${typeof hash === "string" ? `#${hash}` : ""}`;
|
|
322
|
+
}
|
|
323
|
+
//#endregion
|
|
324
|
+
export { CHAT_INLINE_TOKENS_METADATA_KEY, CHAT_INLINE_TOKENS_SCHEMA_VERSION, CHAT_SESSION_MATERIALIZATION_METADATA_KEY, CHAT_WORKSPACE_DIRECTORY_TOKEN_KIND, CHAT_WORKSPACE_FILE_TOKEN_KIND, DisposableOwner, DisposableStore, EventBus, Ingress, PANEL_APP_INLINE_HOST_CONTRACT, RUNTIME_DEFAULT_MODEL_VALUE, UI_CONTENT_PARAMS_HOST_CONTRACT, UiContentParamsError, appendUiContentParamsBootstrapQuery, createAppEventKey, createEventKey, createTypedKey, createUiContentParamsWindowName, eventKeys, getKeyId, ingressKeys, isRuntimeDefaultModelValue, normalizeRuntimeModelSelectionMode, readInlineContentHeight, readUiContentParams, toDisposable };
|
|
271
325
|
|
|
272
326
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../src/types/typed-key.types.ts","../src/services/event-bus.service.ts","../src/services/ingress.service.ts","../src/services/disposable.service.ts","../src/configs/event-keys.config.ts","../src/configs/ingress-keys.config.ts","../src/configs/runtime-model.config.ts","../src/configs/chat-composer-token.config.ts","../src/configs/panel-app-inline-host.config.ts","../src/utils/inline-content-height.utils.ts"],"sourcesContent":["export type TypedKey<T = unknown> = {\n readonly id: string;\n readonly _type?: T;\n};\n\nexport type Key<T = unknown> = TypedKey<T> | string;\n\nexport function createTypedKey<T>(id: string): TypedKey<T> {\n const normalizedId = id.trim();\n if (!normalizedId) {\n throw new Error(\"typed key id is required\");\n }\n return { id: normalizedId };\n}\n\nexport function getKeyId(key: Key<unknown>): string {\n return typeof key === \"string\" ? key.trim() : key.id;\n}\n","import type {\n AppEventEmitOptions,\n AppEventEnvelope,\n AppEventHandler,\n AppEventKey,\n EventBusOptions,\n Unsubscribe,\n} from \"../types/event-bus.types.js\";\nimport { getKeyId, type Key } from \"../types/typed-key.types.js\";\n\nexport class EventBus {\n private readonly listeners = new Map<string, Set<AppEventHandler<unknown>>>();\n private readonly globalListeners = new Set<(event: AppEventEnvelope) => void>();\n private listenerCount = 0;\n private readonly onFirstSubscriber?: EventBusOptions[\"onFirstSubscriber\"];\n private readonly onListenerError?: EventBusOptions[\"onListenerError\"];\n private readonly onNoSubscribers?: EventBusOptions[\"onNoSubscribers\"];\n\n constructor(options: EventBusOptions = {}) {\n this.onFirstSubscriber = options.onFirstSubscriber;\n this.onListenerError = options.onListenerError;\n this.onNoSubscribers = options.onNoSubscribers;\n }\n\n emit = <T>(\n key: Key<T>,\n payload: T,\n options: AppEventEmitOptions = {},\n ): void => {\n const envelope: AppEventEnvelope<T> = {\n type: getKeyId(key),\n payload,\n ...(options.emittedAt ? { emittedAt: options.emittedAt } : {}),\n ...(options.source ? { source: options.source } : {}),\n };\n this.emitEnvelope(envelope);\n };\n\n emitEnvelope = <T>(event: AppEventEnvelope<T>): void => {\n const listeners = this.listeners.get(event.type);\n if (listeners) {\n for (const listener of listeners) {\n this.safeInvokeListener(event, listener as AppEventHandler<T>);\n }\n }\n if (this.globalListeners.size === 0) {\n return;\n }\n for (const listener of this.globalListeners) {\n this.safeInvokeGlobalListener(event, listener);\n }\n };\n\n on = <T>(key: AppEventKey<T>, handler: AppEventHandler<T>): Unsubscribe => {\n const keyId = getKeyId(key);\n const listeners = this.listeners.get(keyId) ?? new Set<AppEventHandler<unknown>>();\n const typedHandler = handler as AppEventHandler<unknown>;\n const added = !listeners.has(typedHandler);\n listeners.add(typedHandler);\n this.listeners.set(keyId, listeners);\n if (added) {\n this.registerSubscriber();\n }\n return () => {\n this.off(key, handler);\n };\n };\n\n off = <T>(key: AppEventKey<T>, handler: AppEventHandler<T>): void => {\n const keyId = getKeyId(key);\n const listeners = this.listeners.get(keyId);\n if (!listeners) {\n return;\n }\n const deleted = listeners.delete(handler as AppEventHandler<unknown>);\n if (listeners.size === 0) {\n this.listeners.delete(keyId);\n }\n if (deleted) {\n this.unregisterSubscriber();\n }\n };\n\n once = <T>(key: AppEventKey<T>, handler: AppEventHandler<T>): Unsubscribe => {\n const wrappedHandler: AppEventHandler<T> = (payload, envelope) => {\n unsubscribe();\n handler(payload, envelope);\n };\n const unsubscribe = this.on(key, wrappedHandler);\n return unsubscribe;\n };\n\n subscribeAll = (handler: (event: AppEventEnvelope) => void): Unsubscribe => {\n const added = !this.globalListeners.has(handler);\n this.globalListeners.add(handler);\n if (added) {\n this.registerSubscriber();\n }\n return () => {\n if (this.globalListeners.delete(handler)) {\n this.unregisterSubscriber();\n }\n };\n };\n\n private registerSubscriber = (): void => {\n this.listenerCount += 1;\n if (this.listenerCount === 1) {\n this.onFirstSubscriber?.();\n }\n };\n\n private unregisterSubscriber = (): void => {\n this.listenerCount = Math.max(0, this.listenerCount - 1);\n if (this.listenerCount === 0) {\n this.onNoSubscribers?.();\n }\n };\n\n private safeInvokeListener = <T>(\n event: AppEventEnvelope<T>,\n listener: AppEventHandler<T>,\n ): void => {\n try {\n listener(event.payload, event);\n } catch (error) {\n this.onListenerError?.({\n type: event.type,\n payload: event.payload,\n error,\n });\n }\n };\n\n private safeInvokeGlobalListener = (\n event: AppEventEnvelope,\n listener: (event: AppEventEnvelope) => void,\n ): void => {\n try {\n listener(event);\n } catch (error) {\n this.onListenerError?.({\n type: event.type,\n payload: event.payload,\n error,\n });\n }\n };\n}\n","import { getKeyId, type Key } from \"../types/typed-key.types.js\";\n\nexport type IngressEnvelope<TPayload = unknown> = {\n type: Key<TPayload>;\n extensionId?: string;\n payload?: TPayload;\n source?: string;\n};\n\nexport type IngressContext = {\n source: string;\n token?: string | null;\n};\n\nexport type IngressHandler<TPayload = unknown, TResult = unknown> = (\n envelope: IngressEnvelope<TPayload>,\n context: IngressContext,\n) => Promise<TResult> | TResult;\n\nexport class Ingress {\n private readonly handlers = new Map<string, IngressHandler<unknown, unknown>>();\n\n readonly addHandler = <TPayload = unknown, TResult = unknown>(\n type: Key<TPayload>,\n handler: IngressHandler<TPayload, TResult>,\n ): (() => void) => {\n const normalizedType = getKeyId(type);\n if (!normalizedType) {\n throw new Error(\"ingress type is required\");\n }\n this.handlers.set(normalizedType, handler as IngressHandler<unknown, unknown>);\n return () => {\n if (this.handlers.get(normalizedType) === handler) {\n this.handlers.delete(normalizedType);\n }\n };\n };\n\n readonly handle = async <TPayload = unknown, TResult = unknown>(\n envelope: IngressEnvelope<TPayload>,\n context: IngressContext,\n ): Promise<TResult> => {\n const normalizedType = getKeyId(envelope.type);\n const handler = this.handlers.get(normalizedType);\n if (!handler) {\n throw new Error(`Unsupported ingress type: ${normalizedType}`);\n }\n return await (handler as IngressHandler<TPayload, TResult>)(envelope, context);\n };\n}\n","export type Cleanup = () => void;\n\nexport type Disposable = {\n dispose: () => void;\n};\n\nconst once = (cleanup: Cleanup): Cleanup => {\n let disposed = false;\n return () => {\n if (disposed) {\n return;\n }\n disposed = true;\n cleanup();\n };\n};\n\nconst runCleanups = (cleanups: Cleanup[]): void => {\n const errors: unknown[] = [];\n for (const cleanup of cleanups) {\n try {\n cleanup();\n } catch (error) {\n errors.push(error);\n }\n }\n if (errors.length === 1) {\n throw errors[0];\n }\n if (errors.length > 1) {\n throw new AggregateError(errors, \"Failed to run cleanups.\");\n }\n};\n\nexport const toDisposable = (dispose: Cleanup): Disposable => ({\n dispose: once(dispose),\n});\n\nexport abstract class DisposableOwner implements Disposable {\n protected readonly cleanups: Cleanup[] = [];\n private disposed = false;\n\n protected get isDisposed(): boolean {\n return this.disposed;\n }\n\n protected addCleanup = (cleanup: Cleanup): Cleanup => {\n const disposableCleanup = once(cleanup);\n if (this.disposed) {\n disposableCleanup();\n return disposableCleanup;\n }\n this.cleanups.push(disposableCleanup);\n return disposableCleanup;\n };\n\n protected addDisposable = <T extends Disposable>(disposable: T): T => {\n this.addCleanup(() => {\n disposable.dispose();\n });\n return disposable;\n };\n\n dispose = (): void => {\n if (this.disposed) {\n return;\n }\n this.disposed = true;\n const current = this.cleanups.splice(0);\n runCleanups(current.reverse());\n };\n}\n\nexport class DisposableStore implements Disposable {\n private readonly disposables = new Set<Disposable>();\n\n private isDisposed = false;\n\n add = <T extends Disposable>(disposable: T): T => {\n if (this.isDisposed) {\n disposable.dispose();\n return disposable;\n }\n this.disposables.add(disposable);\n return disposable;\n };\n\n clear = (): void => {\n const current = [...this.disposables];\n this.disposables.clear();\n for (const disposable of current.reverse()) {\n disposable.dispose();\n }\n };\n\n dispose = (): void => {\n if (this.isDisposed) {\n return;\n }\n this.isDisposed = true;\n this.clear();\n };\n}\n","import type { NcpEndpointEvent, NcpSessionSummary } from \"@nextclaw/ncp\";\nimport type { AppEventKey, EventKey } from \"../types/event-bus.types.js\";\nimport { createTypedKey } from \"../types/typed-key.types.js\";\nimport type { UiShowContentEventPayload } from \"../types/ui-show-content.types.js\";\nimport type { UpdateSnapshot } from \"../types/update.types.js\";\n\nexport function createEventKey<T>(id: string): EventKey<T> {\n return createTypedKey<T>(id);\n}\n\nexport function createAppEventKey<T>(id: string): AppEventKey<T> {\n return createTypedKey<T>(id);\n}\n\nexport const eventKeys = {\n configUpdated: createAppEventKey<{ path: string }>(\"config.updated\"),\n channelConfigApplyStatus: createAppEventKey<{\n channel: string;\n status: \"started\" | \"succeeded\" | \"failed\";\n message?: string;\n }>(\"channel.config.apply-status\"),\n sessionUpdated: createAppEventKey<{ sessionKey: string }>(\"session.updated\"),\n sessionRunStatus: createAppEventKey<{\n sessionKey: string;\n status: \"running\" | \"idle\";\n }>(\"session.run-status\"),\n sessionRunQueueUpdated: createAppEventKey<{ sessionKey: string }>(\n \"session.run-queue.updated\",\n ),\n sessionMetadataChanged: createAppEventKey<{\n metadata: Record<string, unknown>;\n mode: \"set\" | \"update\";\n sessionKey: string;\n }>(\"session.metadata.changed\"),\n ncpEvent: createAppEventKey<NcpEndpointEvent>(\"ncp.event\"),\n sessionSummaryUpsert: createAppEventKey<{ summary: NcpSessionSummary }>(\n \"session.summary.upsert\",\n ),\n sessionSummaryDelete: createAppEventKey<{ sessionKey: string }>(\n \"session.summary.delete\",\n ),\n uiShowContent: createAppEventKey<UiShowContentEventPayload>(\"ui.show-content\"),\n configReloadStarted: createAppEventKey<Record<string, unknown> | undefined>(\n \"config.reload.started\",\n ),\n configReloadFinished: createAppEventKey<Record<string, unknown> | undefined>(\n \"config.reload.finished\",\n ),\n error: createAppEventKey<{ message: string; code?: string }>(\"error\"),\n connectionOpen: createAppEventKey<Record<string, never> | undefined>(\n \"connection.open\",\n ),\n connectionClose: createAppEventKey<Record<string, never> | undefined>(\n \"connection.close\",\n ),\n connectionError: createAppEventKey<{ message?: string } | undefined>(\n \"connection.error\",\n ),\n runtimeUpdateSnapshot: createAppEventKey<UpdateSnapshot>(\n \"runtime.update.snapshot\",\n ),\n} as const;\n","import type {\n NcpAgentSendEnvelope,\n NcpMessage,\n NcpMessageAbortPayload,\n NcpMessagePart,\n} from \"@nextclaw/ncp\";\nimport { createTypedKey } from \"../types/typed-key.types.js\";\n\nexport type ExtensionChannelTextContent = {\n type: \"text\";\n text: string;\n};\n\ntype ExtensionChannelResourceRef = {\n url?: string;\n assetUri?: string;\n mimeType?: string;\n name?: string;\n};\n\nexport type ExtensionChannelImageContent = ExtensionChannelResourceRef & { type: \"image\" };\n\nexport type ExtensionChannelFileContent = ExtensionChannelResourceRef & { type: \"file\" };\n\nexport type ExtensionChannelMessageContent =\n | ExtensionChannelTextContent\n | ExtensionChannelImageContent\n | ExtensionChannelFileContent;\n\nexport type ExtensionChannelSubmittedAttachment = ExtensionChannelResourceRef & {\n id?: string;\n path?: string;\n size?: number;\n source?: string;\n status?: \"ready\" | \"remote-only\";\n errorCode?: \"too_large\" | \"download_failed\" | \"http_error\" | \"invalid_payload\";\n};\n\nexport type ExtensionChannelConfigGetIngressPayload = {\n channelId: string;\n};\n\nexport type ExtensionChannelMessageSubmitIngressPayload = {\n channelId: string;\n conversationId: string;\n senderId: string;\n content: ExtensionChannelMessageContent;\n attachments?: ExtensionChannelSubmittedAttachment[];\n metadata?: Record<string, unknown>;\n};\n\nexport type ExtensionChannelCommandOptionType = \"string\" | \"boolean\" | \"number\";\n\nexport type ExtensionChannelCommandOption = {\n name: string;\n description: string;\n type: ExtensionChannelCommandOptionType;\n required?: boolean;\n};\n\nexport type ExtensionChannelCommandSpec = {\n name: string;\n description: string;\n options?: ExtensionChannelCommandOption[];\n};\n\nexport type ExtensionChannelCommandListIngressPayload = {\n channelId: string;\n};\n\nexport type ExtensionChannelCommandListResponse = {\n commands: ExtensionChannelCommandSpec[];\n};\n\nexport type ExtensionChannelCommandExecuteIngressPayload = {\n channelId: string;\n conversationId: string;\n senderId: string;\n commandName?: string;\n rawText?: string;\n args?: Record<string, unknown>;\n metadata?: Record<string, unknown>;\n};\n\nexport type ExtensionChannelCommandExecuteResponse = {\n content: string;\n ephemeral?: boolean;\n};\n\nexport type ExtensionResponseIngressPayload =\n | {\n requestId: string;\n ok: true;\n data?: unknown;\n }\n | {\n requestId: string;\n ok: false;\n error: {\n message: string;\n };\n };\n\nexport type AgentRunSessionMessageRequestPayload = {\n message: NcpMessage;\n requestId: string;\n sessionId: string;\n};\n\nexport const CHAT_SESSION_MATERIALIZATION_METADATA_KEY = \"session_materialization\";\n\nexport type AgentRunSessionMaterializationMetadata = {\n kind: \"child\";\n parentSessionId: string;\n inheritContext: true;\n};\n\nexport type AgentRunSendIngressMetadata = Record<string, unknown> & {\n agentRuntimeId?: string;\n agentId?: string;\n projectRoot?: string;\n channel?: string;\n model?: string;\n maxTokens?: number;\n thinkingEffort?: string | null;\n chatId?: string;\n accountId?: string;\n senderId?: string;\n sessionKey?: string;\n label?: string;\n [CHAT_SESSION_MATERIALIZATION_METADATA_KEY]?: AgentRunSessionMaterializationMetadata;\n};\n\nexport type AgentRunSendIngressPayload =\n | (Omit<NcpAgentSendEnvelope, \"metadata\"> & {\n content?: never;\n metadata?: AgentRunSendIngressMetadata;\n peerId?: string;\n })\n | (Omit<NcpAgentSendEnvelope, \"message\" | \"metadata\"> & {\n content: NcpMessagePart[];\n metadata?: AgentRunSendIngressMetadata;\n message?: never;\n peerId?: string;\n });\n\nexport const ingressKeys = {\n extension: {\n channelConfigGet: createTypedKey<ExtensionChannelConfigGetIngressPayload>(\n \"extension.channel.config.get\",\n ),\n channelMessageSubmit:\n createTypedKey<ExtensionChannelMessageSubmitIngressPayload>(\n \"extension.channel.message.submit\",\n ),\n channelCommandList: createTypedKey<ExtensionChannelCommandListIngressPayload>(\n \"extension.channel.command.list\",\n ),\n channelCommandExecute:\n createTypedKey<ExtensionChannelCommandExecuteIngressPayload>(\n \"extension.channel.command.execute\",\n ),\n response: createTypedKey<ExtensionResponseIngressPayload>(\"extension.response\"),\n },\n agentRun: {\n send: createTypedKey<AgentRunSendIngressPayload>(\"agent-run.send\"),\n abort: createTypedKey<NcpMessageAbortPayload>(\"agent-run.abort\"),\n sessionMessageRequest:\n createTypedKey<AgentRunSessionMessageRequestPayload>(\n \"agent-run.session-message.request\",\n ),\n },\n} as const;\n","export const RUNTIME_DEFAULT_MODEL_VALUE = \"__nextclaw_runtime_default__\";\n\nexport type RuntimeModelSelectionMode =\n | \"nextclaw\"\n | \"optional\"\n | \"runtime-default\";\n\nexport function isRuntimeDefaultModelValue(value: unknown): boolean {\n return value === RUNTIME_DEFAULT_MODEL_VALUE;\n}\n\nexport function normalizeRuntimeModelSelectionMode(\n value: unknown,\n): RuntimeModelSelectionMode {\n if (value === \"optional\" || value === \"runtime-default\") {\n return value;\n }\n return \"nextclaw\";\n}\n","export const CHAT_INLINE_TOKENS_METADATA_KEY = \"ui_inline_tokens\";\nexport const CHAT_INLINE_TOKENS_SCHEMA_VERSION = 2;\nexport const CHAT_WORKSPACE_FILE_TOKEN_KIND = \"workspace_file\";\nexport const CHAT_WORKSPACE_DIRECTORY_TOKEN_KIND = \"workspace_directory\";\n\nexport type ChatSkillSource = \"builtin\" | \"global\" | \"project\" | \"workspace\";\n\nexport type ChatSkillInlineTokenMetadata = {\n kind: \"skill\";\n ref: string;\n name: string;\n source: ChatSkillSource;\n path: string;\n label: string;\n rawText: string;\n};\n\nexport type ChatWorkspaceInlineTokenMetadata = {\n kind:\n | typeof CHAT_WORKSPACE_FILE_TOKEN_KIND\n | typeof CHAT_WORKSPACE_DIRECTORY_TOKEN_KIND;\n key: string;\n label: string;\n rawText: string;\n};\n\nexport type ChatInlineTokenMetadata =\n | ChatSkillInlineTokenMetadata\n | ChatWorkspaceInlineTokenMetadata;\n\nexport type ChatInlineTokensMetadata = {\n schemaVersion: typeof CHAT_INLINE_TOKENS_SCHEMA_VERSION;\n items: ChatInlineTokenMetadata[];\n};\n","export const PANEL_APP_INLINE_HOST_CONTRACT = {\n contentHeightMessageType: \"nextclaw:panel-app-content-height\",\n displayMode: \"card\",\n displayModeSearchParam: \"nextclawDisplayMode\",\n placement: \"inline\",\n placementSearchParam: \"nextclawPlacement\",\n} as const;\n","type InlineContentElement = {\n readonly clientHeight: number;\n readonly offsetHeight: number;\n readonly scrollHeight: number;\n};\n\nexport function readInlineContentHeight(\n body: InlineContentElement | null | undefined,\n documentElement: InlineContentElement,\n): number {\n return Math.ceil(\n Math.max(\n body?.clientHeight ?? 0,\n body?.offsetHeight ?? 0,\n body?.scrollHeight ?? 0,\n documentElement.offsetHeight,\n ),\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../src/types/typed-key.types.ts","../src/services/event-bus.service.ts","../src/services/ingress.service.ts","../src/services/disposable.service.ts","../src/configs/event-keys.config.ts","../src/configs/ingress-keys.config.ts","../src/configs/runtime-model.config.ts","../src/configs/chat-composer-token.config.ts","../src/configs/panel-app-inline-host.config.ts","../src/utils/inline-content-height.utils.ts","../src/utils/ui-content-params.utils.ts"],"sourcesContent":["export type TypedKey<T = unknown> = {\n readonly id: string;\n readonly _type?: T;\n};\n\nexport type Key<T = unknown> = TypedKey<T> | string;\n\nexport function createTypedKey<T>(id: string): TypedKey<T> {\n const normalizedId = id.trim();\n if (!normalizedId) {\n throw new Error(\"typed key id is required\");\n }\n return { id: normalizedId };\n}\n\nexport function getKeyId(key: Key<unknown>): string {\n return typeof key === \"string\" ? key.trim() : key.id;\n}\n","import type {\n AppEventEmitOptions,\n AppEventEnvelope,\n AppEventHandler,\n AppEventKey,\n EventBusOptions,\n Unsubscribe,\n} from \"../types/event-bus.types.js\";\nimport { getKeyId, type Key } from \"../types/typed-key.types.js\";\n\nexport class EventBus {\n private readonly listeners = new Map<string, Set<AppEventHandler<unknown>>>();\n private readonly globalListeners = new Set<(event: AppEventEnvelope) => void>();\n private listenerCount = 0;\n private readonly onFirstSubscriber?: EventBusOptions[\"onFirstSubscriber\"];\n private readonly onListenerError?: EventBusOptions[\"onListenerError\"];\n private readonly onNoSubscribers?: EventBusOptions[\"onNoSubscribers\"];\n\n constructor(options: EventBusOptions = {}) {\n this.onFirstSubscriber = options.onFirstSubscriber;\n this.onListenerError = options.onListenerError;\n this.onNoSubscribers = options.onNoSubscribers;\n }\n\n emit = <T>(\n key: Key<T>,\n payload: T,\n options: AppEventEmitOptions = {},\n ): void => {\n const envelope: AppEventEnvelope<T> = {\n type: getKeyId(key),\n payload,\n ...(options.emittedAt ? { emittedAt: options.emittedAt } : {}),\n ...(options.source ? { source: options.source } : {}),\n };\n this.emitEnvelope(envelope);\n };\n\n emitEnvelope = <T>(event: AppEventEnvelope<T>): void => {\n const listeners = this.listeners.get(event.type);\n if (listeners) {\n for (const listener of listeners) {\n this.safeInvokeListener(event, listener as AppEventHandler<T>);\n }\n }\n if (this.globalListeners.size === 0) {\n return;\n }\n for (const listener of this.globalListeners) {\n this.safeInvokeGlobalListener(event, listener);\n }\n };\n\n on = <T>(key: AppEventKey<T>, handler: AppEventHandler<T>): Unsubscribe => {\n const keyId = getKeyId(key);\n const listeners = this.listeners.get(keyId) ?? new Set<AppEventHandler<unknown>>();\n const typedHandler = handler as AppEventHandler<unknown>;\n const added = !listeners.has(typedHandler);\n listeners.add(typedHandler);\n this.listeners.set(keyId, listeners);\n if (added) {\n this.registerSubscriber();\n }\n return () => {\n this.off(key, handler);\n };\n };\n\n off = <T>(key: AppEventKey<T>, handler: AppEventHandler<T>): void => {\n const keyId = getKeyId(key);\n const listeners = this.listeners.get(keyId);\n if (!listeners) {\n return;\n }\n const deleted = listeners.delete(handler as AppEventHandler<unknown>);\n if (listeners.size === 0) {\n this.listeners.delete(keyId);\n }\n if (deleted) {\n this.unregisterSubscriber();\n }\n };\n\n once = <T>(key: AppEventKey<T>, handler: AppEventHandler<T>): Unsubscribe => {\n const wrappedHandler: AppEventHandler<T> = (payload, envelope) => {\n unsubscribe();\n handler(payload, envelope);\n };\n const unsubscribe = this.on(key, wrappedHandler);\n return unsubscribe;\n };\n\n subscribeAll = (handler: (event: AppEventEnvelope) => void): Unsubscribe => {\n const added = !this.globalListeners.has(handler);\n this.globalListeners.add(handler);\n if (added) {\n this.registerSubscriber();\n }\n return () => {\n if (this.globalListeners.delete(handler)) {\n this.unregisterSubscriber();\n }\n };\n };\n\n private registerSubscriber = (): void => {\n this.listenerCount += 1;\n if (this.listenerCount === 1) {\n this.onFirstSubscriber?.();\n }\n };\n\n private unregisterSubscriber = (): void => {\n this.listenerCount = Math.max(0, this.listenerCount - 1);\n if (this.listenerCount === 0) {\n this.onNoSubscribers?.();\n }\n };\n\n private safeInvokeListener = <T>(\n event: AppEventEnvelope<T>,\n listener: AppEventHandler<T>,\n ): void => {\n try {\n listener(event.payload, event);\n } catch (error) {\n this.onListenerError?.({\n type: event.type,\n payload: event.payload,\n error,\n });\n }\n };\n\n private safeInvokeGlobalListener = (\n event: AppEventEnvelope,\n listener: (event: AppEventEnvelope) => void,\n ): void => {\n try {\n listener(event);\n } catch (error) {\n this.onListenerError?.({\n type: event.type,\n payload: event.payload,\n error,\n });\n }\n };\n}\n","import { getKeyId, type Key } from \"../types/typed-key.types.js\";\n\nexport type IngressEnvelope<TPayload = unknown> = {\n type: Key<TPayload>;\n extensionId?: string;\n payload?: TPayload;\n source?: string;\n};\n\nexport type IngressContext = {\n source: string;\n token?: string | null;\n};\n\nexport type IngressHandler<TPayload = unknown, TResult = unknown> = (\n envelope: IngressEnvelope<TPayload>,\n context: IngressContext,\n) => Promise<TResult> | TResult;\n\nexport class Ingress {\n private readonly handlers = new Map<string, IngressHandler<unknown, unknown>>();\n\n readonly addHandler = <TPayload = unknown, TResult = unknown>(\n type: Key<TPayload>,\n handler: IngressHandler<TPayload, TResult>,\n ): (() => void) => {\n const normalizedType = getKeyId(type);\n if (!normalizedType) {\n throw new Error(\"ingress type is required\");\n }\n this.handlers.set(normalizedType, handler as IngressHandler<unknown, unknown>);\n return () => {\n if (this.handlers.get(normalizedType) === handler) {\n this.handlers.delete(normalizedType);\n }\n };\n };\n\n readonly handle = async <TPayload = unknown, TResult = unknown>(\n envelope: IngressEnvelope<TPayload>,\n context: IngressContext,\n ): Promise<TResult> => {\n const normalizedType = getKeyId(envelope.type);\n const handler = this.handlers.get(normalizedType);\n if (!handler) {\n throw new Error(`Unsupported ingress type: ${normalizedType}`);\n }\n return await (handler as IngressHandler<TPayload, TResult>)(envelope, context);\n };\n}\n","export type Cleanup = () => void;\n\nexport type Disposable = {\n dispose: () => void;\n};\n\nconst once = (cleanup: Cleanup): Cleanup => {\n let disposed = false;\n return () => {\n if (disposed) {\n return;\n }\n disposed = true;\n cleanup();\n };\n};\n\nconst runCleanups = (cleanups: Cleanup[]): void => {\n const errors: unknown[] = [];\n for (const cleanup of cleanups) {\n try {\n cleanup();\n } catch (error) {\n errors.push(error);\n }\n }\n if (errors.length === 1) {\n throw errors[0];\n }\n if (errors.length > 1) {\n throw new AggregateError(errors, \"Failed to run cleanups.\");\n }\n};\n\nexport const toDisposable = (dispose: Cleanup): Disposable => ({\n dispose: once(dispose),\n});\n\nexport abstract class DisposableOwner implements Disposable {\n protected readonly cleanups: Cleanup[] = [];\n private disposed = false;\n\n protected get isDisposed(): boolean {\n return this.disposed;\n }\n\n protected addCleanup = (cleanup: Cleanup): Cleanup => {\n const disposableCleanup = once(cleanup);\n if (this.disposed) {\n disposableCleanup();\n return disposableCleanup;\n }\n this.cleanups.push(disposableCleanup);\n return disposableCleanup;\n };\n\n protected addDisposable = <T extends Disposable>(disposable: T): T => {\n this.addCleanup(() => {\n disposable.dispose();\n });\n return disposable;\n };\n\n dispose = (): void => {\n if (this.disposed) {\n return;\n }\n this.disposed = true;\n const current = this.cleanups.splice(0);\n runCleanups(current.reverse());\n };\n}\n\nexport class DisposableStore implements Disposable {\n private readonly disposables = new Set<Disposable>();\n\n private isDisposed = false;\n\n add = <T extends Disposable>(disposable: T): T => {\n if (this.isDisposed) {\n disposable.dispose();\n return disposable;\n }\n this.disposables.add(disposable);\n return disposable;\n };\n\n clear = (): void => {\n const current = [...this.disposables];\n this.disposables.clear();\n for (const disposable of current.reverse()) {\n disposable.dispose();\n }\n };\n\n dispose = (): void => {\n if (this.isDisposed) {\n return;\n }\n this.isDisposed = true;\n this.clear();\n };\n}\n","import type { NcpEndpointEvent, NcpSessionSummary } from \"@nextclaw/ncp\";\nimport type { AppEventKey, EventKey } from \"../types/event-bus.types.js\";\nimport { createTypedKey } from \"../types/typed-key.types.js\";\nimport type { UiShowContentEventPayload } from \"../types/ui-show-content.types.js\";\nimport type { UpdateSnapshot } from \"../types/update.types.js\";\n\nexport function createEventKey<T>(id: string): EventKey<T> {\n return createTypedKey<T>(id);\n}\n\nexport function createAppEventKey<T>(id: string): AppEventKey<T> {\n return createTypedKey<T>(id);\n}\n\nexport const eventKeys = {\n configUpdated: createAppEventKey<{ path: string }>(\"config.updated\"),\n channelConfigApplyStatus: createAppEventKey<{\n channel: string;\n status: \"started\" | \"succeeded\" | \"failed\";\n message?: string;\n }>(\"channel.config.apply-status\"),\n sessionUpdated: createAppEventKey<{ sessionKey: string }>(\"session.updated\"),\n sessionRunStatus: createAppEventKey<{\n sessionKey: string;\n status: \"running\" | \"idle\";\n }>(\"session.run-status\"),\n sessionRunQueueUpdated: createAppEventKey<{ sessionKey: string }>(\n \"session.run-queue.updated\",\n ),\n sessionMetadataChanged: createAppEventKey<{\n metadata: Record<string, unknown>;\n mode: \"set\" | \"update\";\n sessionKey: string;\n }>(\"session.metadata.changed\"),\n ncpEvent: createAppEventKey<NcpEndpointEvent>(\"ncp.event\"),\n sessionSummaryUpsert: createAppEventKey<{ summary: NcpSessionSummary }>(\n \"session.summary.upsert\",\n ),\n sessionSummaryDelete: createAppEventKey<{ sessionKey: string }>(\n \"session.summary.delete\",\n ),\n uiShowContent: createAppEventKey<UiShowContentEventPayload>(\"ui.show-content\"),\n configReloadStarted: createAppEventKey<Record<string, unknown> | undefined>(\n \"config.reload.started\",\n ),\n configReloadFinished: createAppEventKey<Record<string, unknown> | undefined>(\n \"config.reload.finished\",\n ),\n error: createAppEventKey<{ message: string; code?: string }>(\"error\"),\n connectionOpen: createAppEventKey<Record<string, never> | undefined>(\n \"connection.open\",\n ),\n connectionClose: createAppEventKey<Record<string, never> | undefined>(\n \"connection.close\",\n ),\n connectionError: createAppEventKey<{ message?: string } | undefined>(\n \"connection.error\",\n ),\n runtimeUpdateSnapshot: createAppEventKey<UpdateSnapshot>(\n \"runtime.update.snapshot\",\n ),\n} as const;\n","import type {\n NcpAgentSendEnvelope,\n NcpMessage,\n NcpMessageAbortPayload,\n NcpMessagePart,\n} from \"@nextclaw/ncp\";\nimport { createTypedKey } from \"../types/typed-key.types.js\";\n\nexport type ExtensionChannelTextContent = {\n type: \"text\";\n text: string;\n};\n\ntype ExtensionChannelResourceRef = {\n url?: string;\n assetUri?: string;\n mimeType?: string;\n name?: string;\n};\n\nexport type ExtensionChannelImageContent = ExtensionChannelResourceRef & { type: \"image\" };\n\nexport type ExtensionChannelFileContent = ExtensionChannelResourceRef & { type: \"file\" };\n\nexport type ExtensionChannelMessageContent =\n | ExtensionChannelTextContent\n | ExtensionChannelImageContent\n | ExtensionChannelFileContent;\n\nexport type ExtensionChannelSubmittedAttachment = ExtensionChannelResourceRef & {\n id?: string;\n path?: string;\n size?: number;\n source?: string;\n status?: \"ready\" | \"remote-only\";\n errorCode?: \"too_large\" | \"download_failed\" | \"http_error\" | \"invalid_payload\";\n};\n\nexport type ExtensionChannelConfigGetIngressPayload = {\n channelId: string;\n};\n\nexport type ExtensionChannelMessageSubmitIngressPayload = {\n channelId: string;\n conversationId: string;\n senderId: string;\n content: ExtensionChannelMessageContent;\n attachments?: ExtensionChannelSubmittedAttachment[];\n metadata?: Record<string, unknown>;\n};\n\nexport type ExtensionChannelCommandOptionType = \"string\" | \"boolean\" | \"number\";\n\nexport type ExtensionChannelCommandOption = {\n name: string;\n description: string;\n type: ExtensionChannelCommandOptionType;\n required?: boolean;\n};\n\nexport type ExtensionChannelCommandSpec = {\n name: string;\n description: string;\n options?: ExtensionChannelCommandOption[];\n};\n\nexport type ExtensionChannelCommandListIngressPayload = {\n channelId: string;\n};\n\nexport type ExtensionChannelCommandListResponse = {\n commands: ExtensionChannelCommandSpec[];\n};\n\nexport type ExtensionChannelCommandExecuteIngressPayload = {\n channelId: string;\n conversationId: string;\n senderId: string;\n commandName?: string;\n rawText?: string;\n args?: Record<string, unknown>;\n metadata?: Record<string, unknown>;\n};\n\nexport type ExtensionChannelCommandExecuteResponse = {\n content: string;\n ephemeral?: boolean;\n};\n\nexport type ExtensionResponseIngressPayload =\n | {\n requestId: string;\n ok: true;\n data?: unknown;\n }\n | {\n requestId: string;\n ok: false;\n error: {\n message: string;\n };\n };\n\nexport type AgentRunSessionMessageRequestPayload = {\n message: NcpMessage;\n requestId: string;\n sessionId: string;\n};\n\nexport const CHAT_SESSION_MATERIALIZATION_METADATA_KEY = \"session_materialization\";\n\nexport type AgentRunSessionMaterializationMetadata = {\n kind: \"child\";\n parentSessionId: string;\n inheritContext: true;\n};\n\nexport type AgentRunSendIngressMetadata = Record<string, unknown> & {\n agentRuntimeId?: string;\n agentId?: string;\n projectRoot?: string;\n channel?: string;\n model?: string;\n maxTokens?: number;\n thinkingEffort?: string | null;\n chatId?: string;\n accountId?: string;\n senderId?: string;\n sessionKey?: string;\n label?: string;\n [CHAT_SESSION_MATERIALIZATION_METADATA_KEY]?: AgentRunSessionMaterializationMetadata;\n};\n\nexport type AgentRunSendIngressPayload =\n | (Omit<NcpAgentSendEnvelope, \"metadata\"> & {\n content?: never;\n metadata?: AgentRunSendIngressMetadata;\n peerId?: string;\n })\n | (Omit<NcpAgentSendEnvelope, \"message\" | \"metadata\"> & {\n content: NcpMessagePart[];\n metadata?: AgentRunSendIngressMetadata;\n message?: never;\n peerId?: string;\n });\n\nexport const ingressKeys = {\n extension: {\n channelConfigGet: createTypedKey<ExtensionChannelConfigGetIngressPayload>(\n \"extension.channel.config.get\",\n ),\n channelMessageSubmit:\n createTypedKey<ExtensionChannelMessageSubmitIngressPayload>(\n \"extension.channel.message.submit\",\n ),\n channelCommandList: createTypedKey<ExtensionChannelCommandListIngressPayload>(\n \"extension.channel.command.list\",\n ),\n channelCommandExecute:\n createTypedKey<ExtensionChannelCommandExecuteIngressPayload>(\n \"extension.channel.command.execute\",\n ),\n response: createTypedKey<ExtensionResponseIngressPayload>(\"extension.response\"),\n },\n agentRun: {\n send: createTypedKey<AgentRunSendIngressPayload>(\"agent-run.send\"),\n abort: createTypedKey<NcpMessageAbortPayload>(\"agent-run.abort\"),\n sessionMessageRequest:\n createTypedKey<AgentRunSessionMessageRequestPayload>(\n \"agent-run.session-message.request\",\n ),\n },\n} as const;\n","export const RUNTIME_DEFAULT_MODEL_VALUE = \"__nextclaw_runtime_default__\";\n\nexport type RuntimeModelSelectionMode =\n | \"nextclaw\"\n | \"optional\"\n | \"runtime-default\";\n\nexport function isRuntimeDefaultModelValue(value: unknown): boolean {\n return value === RUNTIME_DEFAULT_MODEL_VALUE;\n}\n\nexport function normalizeRuntimeModelSelectionMode(\n value: unknown,\n): RuntimeModelSelectionMode {\n if (value === \"optional\" || value === \"runtime-default\") {\n return value;\n }\n return \"nextclaw\";\n}\n","export const CHAT_INLINE_TOKENS_METADATA_KEY = \"ui_inline_tokens\";\nexport const CHAT_INLINE_TOKENS_SCHEMA_VERSION = 2;\nexport const CHAT_WORKSPACE_FILE_TOKEN_KIND = \"workspace_file\";\nexport const CHAT_WORKSPACE_DIRECTORY_TOKEN_KIND = \"workspace_directory\";\n\nexport type ChatSkillSource = \"builtin\" | \"global\" | \"project\" | \"workspace\";\n\nexport type ChatSkillInlineTokenMetadata = {\n kind: \"skill\";\n ref: string;\n name: string;\n source: ChatSkillSource;\n path: string;\n label: string;\n rawText: string;\n};\n\nexport type ChatWorkspaceInlineTokenMetadata = {\n kind:\n | typeof CHAT_WORKSPACE_FILE_TOKEN_KIND\n | typeof CHAT_WORKSPACE_DIRECTORY_TOKEN_KIND;\n key: string;\n label: string;\n rawText: string;\n};\n\nexport type ChatInlineTokenMetadata =\n | ChatSkillInlineTokenMetadata\n | ChatWorkspaceInlineTokenMetadata;\n\nexport type ChatInlineTokensMetadata = {\n schemaVersion: typeof CHAT_INLINE_TOKENS_SCHEMA_VERSION;\n items: ChatInlineTokenMetadata[];\n};\n","export const PANEL_APP_INLINE_HOST_CONTRACT = {\n contentHeightMessageType: \"nextclaw:panel-app-content-height\",\n displayMode: \"card\",\n displayModeSearchParam: \"nextclawDisplayMode\",\n placement: \"inline\",\n placementSearchParam: \"nextclawPlacement\",\n} as const;\n","type InlineContentElement = {\n readonly clientHeight: number;\n readonly offsetHeight: number;\n readonly scrollHeight: number;\n};\n\nexport function readInlineContentHeight(\n body: InlineContentElement | null | undefined,\n documentElement: InlineContentElement,\n): number {\n return Math.ceil(\n Math.max(\n body?.clientHeight ?? 0,\n body?.offsetHeight ?? 0,\n body?.scrollHeight ?? 0,\n documentElement.offsetHeight,\n ),\n );\n}\n","import type {\n UiContentParams,\n UiContentParamValue,\n} from \"../types/ui-show-content.types.js\";\n\nexport const UI_CONTENT_PARAMS_HOST_CONTRACT = {\n bootstrapQueryParam: \"nextclawContentParams\",\n bootstrapQueryValue: \"1\",\n maxDepth: 32,\n maxSerializedBytes: 64 * 1024,\n windowNamePrefix: \"nextclaw:content-params:v1:\",\n} as const;\n\nexport class UiContentParamsError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"UiContentParamsError\";\n }\n}\n\nfunction assertJsonValue(\n value: unknown,\n depth: number,\n ancestors: readonly object[],\n): asserts value is UiContentParamValue {\n if (\n value === null ||\n typeof value === \"string\" ||\n typeof value === \"boolean\"\n ) {\n return;\n }\n if (typeof value === \"number\") {\n if (!Number.isFinite(value)) {\n throw new UiContentParamsError(\n \"params must contain only finite numbers.\",\n );\n }\n return;\n }\n if (typeof value !== \"object\") {\n throw new UiContentParamsError(\"params must contain only JSON values.\");\n }\n if (depth >= UI_CONTENT_PARAMS_HOST_CONTRACT.maxDepth) {\n throw new UiContentParamsError(\n `params must not exceed ${UI_CONTENT_PARAMS_HOST_CONTRACT.maxDepth} nested levels.`,\n );\n }\n if (ancestors.includes(value)) {\n throw new UiContentParamsError(\n \"params must not contain circular references.\",\n );\n }\n const nextAncestors = [...ancestors, value];\n if (Array.isArray(value)) {\n for (const item of value) {\n assertJsonValue(item, depth + 1, nextAncestors);\n }\n return;\n }\n const prototype = Object.getPrototypeOf(value);\n if (prototype !== Object.prototype && prototype !== null) {\n throw new UiContentParamsError(\"params must contain only plain objects.\");\n }\n for (const item of Object.values(value)) {\n assertJsonValue(item, depth + 1, nextAncestors);\n }\n}\n\nexport function readUiContentParams(\n value: unknown,\n): UiContentParams | undefined {\n if (typeof value === \"undefined\") {\n return undefined;\n }\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n throw new UiContentParamsError(\"params must be a JSON object.\");\n }\n assertJsonValue(value, 0, []);\n const serialized = JSON.stringify(value);\n const byteLength = new TextEncoder().encode(serialized).byteLength;\n if (byteLength > UI_CONTENT_PARAMS_HOST_CONTRACT.maxSerializedBytes) {\n throw new UiContentParamsError(\n `params must not exceed ${UI_CONTENT_PARAMS_HOST_CONTRACT.maxSerializedBytes} serialized bytes.`,\n );\n }\n return value as UiContentParams;\n}\n\nexport function createUiContentParamsWindowName(\n params: UiContentParams | undefined,\n): string | undefined {\n const normalized = readUiContentParams(params);\n return normalized\n ? `${UI_CONTENT_PARAMS_HOST_CONTRACT.windowNamePrefix}${JSON.stringify(normalized)}`\n : undefined;\n}\n\nexport function appendUiContentParamsBootstrapQuery(\n url: string,\n params: UiContentParams | undefined,\n): string {\n if (!readUiContentParams(params)) {\n return url;\n }\n const [withoutHash, hash] = url.split(\"#\", 2);\n const queryStart = withoutHash.indexOf(\"?\");\n const pathname =\n queryStart >= 0 ? withoutHash.slice(0, queryStart) : withoutHash;\n const query = new URLSearchParams(\n queryStart >= 0 ? withoutHash.slice(queryStart + 1) : \"\",\n );\n query.set(\n UI_CONTENT_PARAMS_HOST_CONTRACT.bootstrapQueryParam,\n UI_CONTENT_PARAMS_HOST_CONTRACT.bootstrapQueryValue,\n );\n return `${pathname}?${query.toString()}${\n typeof hash === \"string\" ? `#${hash}` : \"\"\n }`;\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nextclaw/shared",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.15",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Shared lightweight primitives and contracts for NextClaw packages.",
|
|
6
6
|
"type": "module",
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"dist"
|
|
16
16
|
],
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@nextclaw/ncp": "0.7.
|
|
18
|
+
"@nextclaw/ncp": "0.7.14"
|
|
19
19
|
},
|
|
20
20
|
"devDependencies": {
|
|
21
21
|
"@types/node": "^20.17.6",
|