@ai-matrx/context-menu 0.1.9 → 0.1.11
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/CHANGELOG.md +12 -0
- package/dist/builder.cjs +17 -18
- package/dist/builder.cjs.map +1 -1
- package/dist/builder.js +2 -3
- package/dist/builder.js.map +1 -1
- package/dist/{chunk-ECKA474B.js → chunk-2B37SXQW.js} +21 -12
- package/dist/chunk-2B37SXQW.js.map +1 -0
- package/dist/{chunk-TSOUI723.cjs → chunk-7TIZAANU.cjs} +26 -11
- package/dist/chunk-7TIZAANU.cjs.map +1 -0
- package/dist/{chunk-A24SBKSA.js → chunk-EG23Y2KW.js} +14 -13
- package/dist/{chunk-A24SBKSA.js.map → chunk-EG23Y2KW.js.map} +1 -1
- package/dist/{chunk-7VDSMZWI.cjs → chunk-ERFH2RZC.cjs} +18 -17
- package/dist/chunk-ERFH2RZC.cjs.map +1 -0
- package/dist/{chunk-EIP5YS4Y.js → chunk-HJU3RU2B.js} +27 -12
- package/dist/chunk-HJU3RU2B.js.map +1 -0
- package/dist/{chunk-SWEWOUHK.cjs → chunk-IH5WN5JP.cjs} +31 -26
- package/dist/chunk-IH5WN5JP.cjs.map +1 -0
- package/dist/{chunk-QXHLM7SS.cjs → chunk-LDMYNYFC.cjs} +42 -33
- package/dist/chunk-LDMYNYFC.cjs.map +1 -0
- package/dist/{chunk-ANJYKQAA.cjs → chunk-MBU4Y22O.cjs} +3 -3
- package/dist/{chunk-ANJYKQAA.cjs.map → chunk-MBU4Y22O.cjs.map} +1 -1
- package/dist/{chunk-L6DPISFT.js → chunk-NBEXJ25Z.js} +24 -19
- package/dist/{chunk-L6DPISFT.js.map → chunk-NBEXJ25Z.js.map} +1 -1
- package/dist/{chunk-LE6ZUVCO.js → chunk-PB3PMDKV.js} +2 -2
- package/dist/{chunk-NOYMFNSU.js → chunk-SJWKMZEJ.js} +33 -12
- package/dist/chunk-SJWKMZEJ.js.map +1 -0
- package/dist/{chunk-XERD2YCJ.cjs → chunk-WROBL3DR.cjs} +32 -11
- package/dist/chunk-WROBL3DR.cjs.map +1 -0
- package/dist/design-store.cjs +0 -1
- package/dist/design-store.cjs.map +1 -1
- package/dist/design-store.js +0 -1
- package/dist/design-store.js.map +1 -1
- package/dist/engine.cjs +64 -96
- package/dist/engine.cjs.map +1 -1
- package/dist/engine.d.cts +7 -7
- package/dist/engine.d.ts +7 -7
- package/dist/engine.js +72 -104
- package/dist/engine.js.map +1 -1
- package/dist/index.cjs +3 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +2 -3
- package/dist/menu-content.cjs +18 -19
- package/dist/menu-content.cjs.map +1 -1
- package/dist/menu-content.js +4 -5
- package/dist/menu-content.js.map +1 -1
- package/dist/menu-inspect.cjs +0 -1
- package/dist/menu-inspect.cjs.map +1 -1
- package/dist/menu-inspect.js +0 -1
- package/dist/menu-inspect.js.map +1 -1
- package/dist/model.cjs +4 -5
- package/dist/model.cjs.map +1 -1
- package/dist/model.js +3 -4
- package/dist/react.cjs +52 -44
- package/dist/react.cjs.map +1 -1
- package/dist/react.js +30 -22
- package/dist/react.js.map +1 -1
- package/package.json +6 -6
- package/dist/chunk-7VDSMZWI.cjs.map +0 -1
- package/dist/chunk-CUODNUAD.cjs +0 -24
- package/dist/chunk-CUODNUAD.cjs.map +0 -1
- package/dist/chunk-ECKA474B.js.map +0 -1
- package/dist/chunk-EIP5YS4Y.js.map +0 -1
- package/dist/chunk-NOYMFNSU.js.map +0 -1
- package/dist/chunk-PE3ZHHM5.js +0 -24
- package/dist/chunk-PE3ZHHM5.js.map +0 -1
- package/dist/chunk-QXHLM7SS.cjs.map +0 -1
- package/dist/chunk-SWEWOUHK.cjs.map +0 -1
- package/dist/chunk-TSOUI723.cjs.map +0 -1
- package/dist/chunk-XERD2YCJ.cjs.map +0 -1
- /package/dist/{chunk-LE6ZUVCO.js.map → chunk-PB3PMDKV.js.map} +0 -0
|
@@ -1,17 +1,23 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import {
|
|
3
|
-
__reExport
|
|
4
|
-
} from "./chunk-PE3ZHHM5.js";
|
|
5
2
|
|
|
6
3
|
// src/engine/utils/menu-deadline.ts
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
4
|
+
import {
|
|
5
|
+
MENU_LIBRARY_DEADLINE_MS,
|
|
6
|
+
MenuLibraryTimeoutError,
|
|
7
|
+
withMenuDeadline
|
|
8
|
+
} from "@ai-matrx/chat/context-menu/utils/menu-deadline";
|
|
10
9
|
|
|
11
10
|
// src/engine/model/requirement-gate.ts
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
import {
|
|
12
|
+
GLOBAL_SCOPE,
|
|
13
|
+
buildAvailableKeys,
|
|
14
|
+
decideOffer,
|
|
15
|
+
domainOfSurfaceName,
|
|
16
|
+
readMenuScope,
|
|
17
|
+
requirementsOf,
|
|
18
|
+
scopeReaches,
|
|
19
|
+
writeMenuScope
|
|
20
|
+
} from "@ai-matrx/chat/context-menu/model/requirement-gate";
|
|
15
21
|
|
|
16
22
|
// src/engine/utils/already-here.ts
|
|
17
23
|
var SAVE_INTO_WHERE_YOU_ARE = [
|
|
@@ -186,8 +192,17 @@ var MANAGED_CONTEXT_MENU_AGENT_CONFIG = {
|
|
|
186
192
|
};
|
|
187
193
|
|
|
188
194
|
export {
|
|
189
|
-
|
|
190
|
-
|
|
195
|
+
MENU_LIBRARY_DEADLINE_MS,
|
|
196
|
+
MenuLibraryTimeoutError,
|
|
197
|
+
withMenuDeadline,
|
|
198
|
+
GLOBAL_SCOPE,
|
|
199
|
+
buildAvailableKeys,
|
|
200
|
+
decideOffer,
|
|
201
|
+
domainOfSurfaceName,
|
|
202
|
+
readMenuScope,
|
|
203
|
+
requirementsOf,
|
|
204
|
+
scopeReaches,
|
|
205
|
+
writeMenuScope,
|
|
191
206
|
actionsAlreadyHere,
|
|
192
207
|
buildJsonMenuSection,
|
|
193
208
|
jsonSectionLabel,
|
|
@@ -197,4 +212,4 @@ export {
|
|
|
197
212
|
fieldPreview,
|
|
198
213
|
MANAGED_CONTEXT_MENU_AGENT_CONFIG
|
|
199
214
|
};
|
|
200
|
-
//# sourceMappingURL=chunk-
|
|
215
|
+
//# sourceMappingURL=chunk-HJU3RU2B.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/engine/utils/menu-deadline.ts","../src/engine/model/requirement-gate.ts","../src/engine/utils/already-here.ts","../src/engine/utils/json-menu-actions.ts","../src/engine/utils/field-menu-header.ts","../src/engine/managed-agent-launch.ts"],"sourcesContent":["// Named, never `export *`: the bundler (esbuild) cannot see through a nested\n// `export * from \"<external>\"`, so the names went missing from the ESM entry and\n// every internal reader went through a runtime namespace copy (a TDZ under ts-jest).\nexport {\n MENU_LIBRARY_DEADLINE_MS,\n MenuLibraryTimeoutError,\n withMenuDeadline,\n} from \"@ai-matrx/chat/context-menu/utils/menu-deadline\";\n","// Named, never `export *`: the bundler (esbuild) cannot see through a nested\n// `export * from \"<external>\"`, so the names went missing from the ESM entry and\n// every internal reader went through a runtime namespace copy (a TDZ under ts-jest).\nexport {\n GLOBAL_SCOPE,\n buildAvailableKeys,\n decideOffer,\n domainOfSurfaceName,\n readMenuScope,\n requirementsOf,\n scopeReaches,\n writeMenuScope,\n} from \"@ai-matrx/chat/context-menu/model/requirement-gate\";\nexport type {\n AvailableKeysArgs,\n GateableItem,\n MenuScope,\n MenuScopeLevel,\n OfferContext,\n OfferDecision,\n OfferRefusal,\n} from \"@ai-matrx/chat/context-menu/model/requirement-gate\";\n","// features/context-menu-v3/utils/already-here.ts\n//\n// ACTIONS THAT TARGET THE THING YOU ARE ALREADY IN ARE ABSENT (page-pass\n// 2026-09-27, /notes/<id>): the menu inside a note offered \"Save to Notes\", and\n// the menu inside the editor offered \"Edit content\" and \"Open in full-screen\n// editor\". Each rich-document action id listed here is excluded for the menu\n// instance that is already that place.\n\nexport interface WhereTheMenuIs {\n /** The rich-document source type (`note`, `task`, `chat-message`, `raw`, …). */\n sourceType: string;\n /** The registry surface the menu belongs to. */\n surfaceName?: string | null | undefined;\n /** The menu wraps an editor (EditableContextMenu). */\n isEditable: boolean;\n}\n\n/** \"Save to X\" where the menu already IS an X. */\nconst SAVE_INTO_WHERE_YOU_ARE: ReadonlyArray<{ sourceType: string; surface: string; actionId: string }> = [\n { sourceType: \"note\", surface: \"matrx-user/notes\", actionId: \"save-to-notes\" },\n { sourceType: \"task\", surface: \"matrx-user/tasks\", actionId: \"save-to-task\" },\n];\n\n/** Opening a window from inside that same window (surface-only rules). */\nconst OPEN_WHERE_YOU_ARE: ReadonlyArray<{ surface: string; actionId: string }> = [\n // The Feedback window's menus offered \"Submit feedback\" — reopening itself.\n { surface: \"matrx-user/feedback\", actionId: \"submit-feedback\" },\n];\n\n/** Opening an editor from inside the editor. */\nconst EDITOR_DOORS = [\"edit\", \"open-fullscreen-editor\"] as const;\n\nexport function actionsAlreadyHere(where: WhereTheMenuIs): string[] {\n const out: string[] = [];\n for (const rule of SAVE_INTO_WHERE_YOU_ARE) {\n if (where.sourceType === rule.sourceType || where.surfaceName === rule.surface) out.push(rule.actionId);\n }\n for (const rule of OPEN_WHERE_YOU_ARE) {\n if (where.surfaceName === rule.surface) out.push(rule.actionId);\n }\n // On a record's OWN page (a note's source on the notes surface) the page is\n // its editor — its Write / Read toggle is the door — so the preview offers no\n // second one (live 2026-09-27, /notes/<id> in Read mode). Editor and preview\n // menus now carry the same set.\n // Matched by the SOURCE as well as the surface: live, the Read-mode menu on\n // /notes/<id> carried the note source under a surface name other than the\n // notes one, so a surface-only match missed it.\n const ownPage = SAVE_INTO_WHERE_YOU_ARE.some(\n (rule) => where.sourceType === rule.sourceType || where.surfaceName === rule.surface,\n );\n if (where.isEditable || ownPage) out.push(...EDITOR_DOORS);\n return [...new Set(out)];\n}\n","// features/context-menu-v3/utils/json-menu-actions.ts\n//\n// The JSON section of the universal context menu. Highlight something that\n// looks like JSON — fenced or bare — and the menu offers the things you\n// actually want for JSON: condense it, squeeze it onto one line, open it back\n// up, sort its keys, add or strip the code fence.\n//\n// Design rules:\n// - The menu ASKS the engine, it does not sniff. Detection and formatting\n// both come from `lib/json-format` (the shared primitive), so the notes\n// cleanup pass and this menu can never disagree about what \"condensed\"\n// means.\n// - Every action carries a REAL before/after hint (\"13 lines -> 3 lines\"),\n// computed from the actual formatted output. No action promises a change\n// it will not make: one that would be a no-op is dropped.\n// - On an EDITABLE surface the action rewrites the text in place (the exact\n// selection when there is one, the whole field otherwise). On a read-only\n// surface it copies the formatted text instead — the same intent, the only\n// verb available.\n// - Unparseable-but-JSON-shaped text still produces a section: one disabled\n// row carrying the parse error. Silently showing nothing on a selection\n// the user clearly believes is JSON is the \"fake menu\" failure this\n// codebase kills on sight.\n//\n// Pure except for the two side-effect callbacks handed in by the hook.\n\nimport { detectJson } from \"@ai-matrx/kit/json-format\";\nimport { formatJsonText } from \"@ai-matrx/kit/json-format\";\nimport type {\n JsonDetection,\n JsonFenceMode,\n JsonFormatStyle,\n} from \"@ai-matrx/kit/json-format\";\n\nexport interface JsonMenuAction {\n id: string;\n label: string;\n /** Real before -> after size, e.g. \"13 lines -> 3 lines\". */\n hint?: string | undefined;\n disabled?: boolean | undefined;\n run: () => void | Promise<void>;\n}\n\nexport interface JsonMenuSection {\n /** The detection that produced this section (null when the text isn't JSON-ish). */\n detection: JsonDetection;\n /** True when the surface will rewrite text; false when actions copy instead. */\n writes: boolean;\n actions: JsonMenuAction[];\n}\n\nexport interface BuildJsonMenuActionsParams {\n /** The text the menu is acting on (selection, else resolved content). */\n text: string;\n /** True when the action should REWRITE the text rather than copy it. */\n canWrite: boolean;\n /** Rewrite the acted-on text with `next`. Only called when `canWrite`. */\n onReplace: (next: string) => void;\n /** Copy `next` to the clipboard. Used on read-only surfaces. */\n onCopy: (next: string) => void | Promise<void>;\n}\n\nfunction lineCount(text: string): number {\n let n = text === \"\" ? 0 : 1;\n for (let i = 0; i < text.length; i++) if (text[i] === \"\\n\") n++;\n return n;\n}\n\nfunction sizeHint(before: string, after: string): string {\n const b = lineCount(before);\n const a = lineCount(after);\n if (b !== a) {\n return `${b} line${b !== 1 ? \"s\" : \"\"} -> ${a} line${a !== 1 ? \"s\" : \"\"}`;\n }\n return `${before.length} -> ${after.length} chars`;\n}\n\n/**\n * The style that preserves the user's rough layout — used by actions whose\n * point is NOT re-layout (sort keys, fence toggling). Re-printing a hand-\n * formatted blob as something else because the user asked to sort its keys is\n * a change they did not request.\n */\nfunction shapePreservingStyle(detection: JsonDetection): JsonFormatStyle {\n return detection.payload.includes(\"\\n\") ? \"pretty\" : \"minify\";\n}\n\n/**\n * Build the JSON section for the given text, or `null` when the text is not\n * JSON-shaped at all (the overwhelmingly common case — the section simply\n * does not render).\n */\nexport function buildJsonMenuSection(\n params: BuildJsonMenuActionsParams,\n): JsonMenuSection | null {\n const { text, canWrite, onReplace, onCopy } = params;\n if (!text.trim()) return null;\n\n const detection = detectJson(text);\n if (!detection.looksLikeJson) return null;\n\n // JSON-shaped but broken: one honest, disabled row.\n if (!detection.ok) {\n return {\n detection,\n writes: false,\n actions: [\n {\n id: \"json-invalid\",\n label: \"Invalid JSON\",\n hint: detection.error,\n disabled: true,\n run: () => {},\n },\n ],\n };\n }\n\n const apply = (next: string) => {\n if (canWrite) onReplace(next);\n else void onCopy(next);\n };\n\n const verb = canWrite ? \"\" : \"Copy \";\n const actions: JsonMenuAction[] = [];\n\n const addFormat = (\n id: string,\n label: string,\n style: JsonFormatStyle,\n fence: JsonFenceMode = \"preserve\",\n sortKeys = false,\n ) => {\n const result = formatJsonText(text, { style, fence, sortKeys });\n if (!result.ok) return;\n // Copying an identical string is still useful; rewriting it is not.\n if (canWrite && !result.changed) return;\n actions.push({\n id,\n label,\n hint: result.changed ? sizeHint(text, result.text) : undefined,\n run: () => apply(result.text),\n });\n };\n\n addFormat(\"json-condense\", `${verb}Condense`, \"compact\");\n addFormat(\"json-minify\", `${verb}Minify (one line)`, \"minify\");\n addFormat(\"json-expand\", `${verb}Expand`, \"pretty\");\n addFormat(\n \"json-sort-keys\",\n `${verb}Sort keys A-Z`,\n shapePreservingStyle(detection),\n \"preserve\",\n true,\n );\n\n // Fence toggle — only the direction that applies.\n if (detection.fence) {\n addFormat(\n \"json-strip-fence\",\n `${verb}Remove code fence`,\n shapePreservingStyle(detection),\n \"strip\",\n );\n } else {\n addFormat(\n \"json-add-fence\",\n `${verb}Wrap in json code fence`,\n shapePreservingStyle(detection),\n \"add\",\n );\n }\n\n // An editable surface still benefits from a plain \"give me the one-liner on\n // the clipboard\" that does NOT touch the document.\n if (canWrite) {\n const minified = formatJsonText(text, { style: \"minify\", fence: \"strip\" });\n if (minified.ok) {\n actions.push({\n id: \"json-copy-minified\",\n label: \"Copy minified\",\n hint: sizeHint(text, minified.text),\n run: () => void onCopy(minified.text),\n });\n }\n }\n\n if (actions.length === 0) return null;\n return { detection, writes: canWrite, actions };\n}\n\n/** Short label for the submenu trigger, e.g. \"JSON · 13 lines\". */\nexport function jsonSectionLabel(section: JsonMenuSection): string {\n const { detection } = section;\n if (!detection.ok) return \"JSON (invalid)\";\n const n = detection.lineCount;\n const kind = detection.root === \"array\" ? \"array\" : \"object\";\n return `JSON ${kind} · ${n} line${n !== 1 ? \"s\" : \"\"}`;\n}\n","/**\n * THE MENU OPENED IN A FIELD NAMES THE FIELD (page-pass 2026-09-27,\n * /chat/message-templates/<id>). Right-clicking the Body box headed the menu\n * \"Content: {{reply.body}}\" — the field's raw text. The header is now the\n * field's own name (\"Body\"), with a short plain preview only when it helps:\n * merge fields read as their names (\"Reply body\"), and text that is ONLY merge\n * fields gets no preview (the name already says it). Pure, so it is tested\n * without a DOM menu.\n */\n\n/** A field's name, the way a person reads it on screen. `null` when it has none. */\nexport function fieldLabelOf(element: Element | null | undefined): string | null {\n if (!element) return null;\n const clean = (s: string | null | undefined) => (s ?? \"\").replace(/\\s+/g, \" \").replace(/\\s*\\*$/, \"\").trim() || null;\n const aria = clean(element.getAttribute(\"aria-label\"));\n if (aria) return aria;\n const labelledBy = element.getAttribute(\"aria-labelledby\");\n if (labelledBy) {\n const text = labelledBy\n .split(/\\s+/)\n .map((id) => element.ownerDocument?.getElementById(id)?.textContent ?? \"\")\n .join(\" \");\n if (clean(text)) return clean(text);\n }\n const labels = (element as HTMLInputElement).labels;\n if (labels && labels.length > 0) {\n const text = clean(labels[0]?.textContent);\n if (text) return text;\n }\n const id = element.getAttribute(\"id\");\n if (id && element.ownerDocument) {\n const label = element.ownerDocument.querySelector(`label[for=\"${CSS.escape(id)}\"]`);\n if (clean(label?.textContent)) return clean(label?.textContent);\n }\n return null;\n}\n\nconst MERGE_FIELD = /\\{\\{\\s*([^{}]+?)\\s*\\}\\}/g;\n\n/** \"reply.body\" / \"reply_body\" → \"Reply body\". */\nexport function mergeFieldName(token: string): string {\n const words = token.replace(/[._-]+/g, \" \").replace(/([a-z])([A-Z])/g, \"$1 $2\").trim().toLowerCase();\n return words ? words[0]!.toUpperCase() + words.slice(1) : token;\n}\n\nexport const FIELD_PREVIEW_MAX = 60;\n\n/**\n * The preview beside the field's name: plain words with merge fields named,\n * clipped; `\"\"` when the text holds nothing but merge fields (or nothing).\n */\nexport function fieldPreview(text: string): string {\n const withoutFields = text.replace(MERGE_FIELD, \"\").replace(/[\\s\\p{P}]+/gu, \"\");\n if (!withoutFields) return \"\";\n const readable = text.replace(MERGE_FIELD, (_, name: string) => mergeFieldName(name)).replace(/\\s+/g, \" \").trim();\n return readable.length > FIELD_PREVIEW_MAX ? `${readable.slice(0, FIELD_PREVIEW_MAX - 1).trimEnd()}…` : readable;\n}\n","import type { AgentExecutionConfig } from \"@ai-matrx/chat/agents/types/agent-execution-config.types\";\n\n/**\n * Framework-owned launch defaults for agents listed in the managed \"Agents\"\n * context-menu section. Shortcuts do not use this config: their persisted\n * execution definitions remain authoritative.\n */\nexport const MANAGED_CONTEXT_MENU_AGENT_CONFIG = {\n displayMode: \"flexible-panel\",\n allowChat: true,\n showVariablePanel: true,\n} as const satisfies Pick<\n AgentExecutionConfig,\n \"displayMode\" | \"allowChat\" | \"showVariablePanel\"\n>;\n"],"mappings":"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","names":["id"]}
|
|
@@ -8,13 +8,18 @@
|
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
var _chunkTSOUI723cjs = require('./chunk-TSOUI723.cjs');
|
|
12
11
|
|
|
13
12
|
|
|
14
13
|
|
|
14
|
+
var _chunk7TIZAANUcjs = require('./chunk-7TIZAANU.cjs');
|
|
15
15
|
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
var _chunkWROBL3DRcjs = require('./chunk-WROBL3DR.cjs');
|
|
18
23
|
|
|
19
24
|
|
|
20
25
|
|
|
@@ -166,7 +171,7 @@ var SPECIFICITY = {
|
|
|
166
171
|
global: 1
|
|
167
172
|
};
|
|
168
173
|
function specificityOf(item) {
|
|
169
|
-
return SPECIFICITY[(0,
|
|
174
|
+
return SPECIFICITY[_chunk7TIZAANUcjs.readMenuScope.call(void 0, { id: "", surfaceName: _nullishCoalesce(item.surfaceName, () => ( null)) }).level];
|
|
170
175
|
}
|
|
171
176
|
function beats(a, b) {
|
|
172
177
|
const byOwner = SCOPE_PRIORITY[a.scopeLevel] - SCOPE_PRIORITY[b.scopeLevel];
|
|
@@ -215,15 +220,15 @@ function buildCategoryGroups(args) {
|
|
|
215
220
|
entryType: "content_block",
|
|
216
221
|
scopeLevel: _scope.resolveRowScope.call(void 0, b)
|
|
217
222
|
}));
|
|
218
|
-
const offerCtx =
|
|
223
|
+
const offerCtx = _chunkWROBL3DRcjs.compact.call(void 0, {
|
|
219
224
|
surfaceName,
|
|
220
225
|
availableKeys,
|
|
221
226
|
excludedItemIds
|
|
222
227
|
});
|
|
223
228
|
const filteredShortcuts = scopedShortcuts.filter((s) => {
|
|
224
|
-
if (!(0,
|
|
229
|
+
if (!_chunk7TIZAANUcjs.decideOffer.call(void 0, s, offerCtx).offered) return false;
|
|
225
230
|
if (hasSelection) return true;
|
|
226
|
-
return !(0,
|
|
231
|
+
return !_chunk7TIZAANUcjs.requirementsOf.call(void 0, s).some((key) => SELECTION_DEPENDENT_KEYS.has(key));
|
|
227
232
|
});
|
|
228
233
|
const filteredBlocks = scopedBlocks.filter(
|
|
229
234
|
(b) => !_optionalChain([excludedItemIds, 'optionalAccess', _5 => _5.has, 'call', _6 => _6(b.id)])
|
|
@@ -300,7 +305,7 @@ function useUnifiedAgentContextMenu(args) {
|
|
|
300
305
|
if (!enabled || placementTypes.length === 0) return;
|
|
301
306
|
try {
|
|
302
307
|
setError(null);
|
|
303
|
-
await (0,
|
|
308
|
+
await _chunk7TIZAANUcjs.withMenuDeadline.call(void 0,
|
|
304
309
|
dispatch(_thunks.fetchUnifiedMenu.call(void 0, { scope, scopeId })).unwrap(),
|
|
305
310
|
"Loading the menu's AI actions"
|
|
306
311
|
);
|
|
@@ -351,7 +356,7 @@ var __baselinemanifest = require('@ai-matrx/chat/surfaces/manifests/_baseline.ma
|
|
|
351
356
|
|
|
352
357
|
|
|
353
358
|
var _SurfaceRuntimeContext = require('@ai-matrx/chat/surfaces/runtime/SurfaceRuntimeContext');
|
|
354
|
-
var SKIP_MERGE_KEYS = /* @__PURE__ */ new Set([
|
|
359
|
+
var SKIP_MERGE_KEYS = /* @__PURE__ */ new Set([_chunkWROBL3DRcjs.CONTEXT_MENU_ENTITY_KEY, _chunkWROBL3DRcjs.CONTEXT_MENU_HEADING_KEY]);
|
|
355
360
|
var isDev = process.env.NODE_ENV !== "production";
|
|
356
361
|
function strOf(value) {
|
|
357
362
|
return typeof value === "string" ? value : "";
|
|
@@ -556,7 +561,7 @@ function buildSelectionWriteBack(args) {
|
|
|
556
561
|
const value = fieldEl.value;
|
|
557
562
|
const next = value.slice(0, start) + insert + value.slice(end);
|
|
558
563
|
if (onTextReplace) onTextReplace(next);
|
|
559
|
-
else (0,
|
|
564
|
+
else _chunkWROBL3DRcjs.spliceInputValue.call(void 0, fieldEl, start, end, insert);
|
|
560
565
|
};
|
|
561
566
|
return {
|
|
562
567
|
originalText,
|
|
@@ -777,7 +782,7 @@ function useContextMenuActions(props) {
|
|
|
777
782
|
});
|
|
778
783
|
const scopeKeySignature = Object.keys(scope).sort().join("|");
|
|
779
784
|
const availableKeys = _react.useMemo.call(void 0,
|
|
780
|
-
() => (0,
|
|
785
|
+
() => _chunk7TIZAANUcjs.buildAvailableKeys.call(void 0, _chunkWROBL3DRcjs.compact.call(void 0, {
|
|
781
786
|
baselineValueNames: __baselinemanifest.BASELINE_VALUE_NAMES,
|
|
782
787
|
declaredValueNames: surfaceName ? _optionalChain([_chunkPUSFH5CVcjs.getContextMenuHost.call(void 0, ), 'access', _17 => _17.getSurfaceManifest, 'call', _18 => _18(surfaceName), 'optionalAccess', _19 => _19.values, 'access', _20 => _20.map, 'call', _21 => _21((v) => v.name)]) : void 0,
|
|
783
788
|
// `scope` is rebuilt every render but its KEY SET is stable for an
|
|
@@ -871,13 +876,13 @@ function useContextMenuActions(props) {
|
|
|
871
876
|
if (textAgentCallbacks) richDocCtx.callbacks = textAgentCallbacks;
|
|
872
877
|
const excludedRichActionIds = [
|
|
873
878
|
..._nullishCoalesce(props.excludedRichActions, () => ( [])),
|
|
874
|
-
...
|
|
879
|
+
..._chunk7TIZAANUcjs.actionsAlreadyHere.call(void 0, {
|
|
875
880
|
sourceType: richDocSource.type,
|
|
876
881
|
surfaceName,
|
|
877
882
|
isEditable: Boolean(isEditable)
|
|
878
883
|
})
|
|
879
884
|
];
|
|
880
|
-
const richActions = actionText.source !== "none" ? _provider.resolveActions.call(void 0, richDocCtx,
|
|
885
|
+
const richActions = actionText.source !== "none" ? _provider.resolveActions.call(void 0, richDocCtx, _chunkWROBL3DRcjs.compact.call(void 0, {
|
|
881
886
|
exclude: excludedRichActionIds,
|
|
882
887
|
extra: props.extraRichActions
|
|
883
888
|
})) : [];
|
|
@@ -940,7 +945,7 @@ function useContextMenuActions(props) {
|
|
|
940
945
|
element.value.substring(0, start) + element.value.substring(end)
|
|
941
946
|
);
|
|
942
947
|
} else {
|
|
943
|
-
(0,
|
|
948
|
+
_chunkWROBL3DRcjs.spliceInputValue.call(void 0, element, start, end, "");
|
|
944
949
|
}
|
|
945
950
|
};
|
|
946
951
|
const handlePaste = async () => {
|
|
@@ -960,12 +965,12 @@ function useContextMenuActions(props) {
|
|
|
960
965
|
element.value.substring(0, start) + text + element.value.substring(end)
|
|
961
966
|
);
|
|
962
967
|
} else {
|
|
963
|
-
(0,
|
|
968
|
+
_chunkWROBL3DRcjs.spliceInputValue.call(void 0, element, start, end, text);
|
|
964
969
|
}
|
|
965
970
|
};
|
|
966
971
|
const editableTarget = isEditable && _optionalChain([selectionRange, 'optionalAccess', _28 => _28.type]) === "editable" ? selectionRange.element : null;
|
|
967
972
|
const canWriteJson = editableTarget instanceof HTMLTextAreaElement || editableTarget instanceof HTMLInputElement;
|
|
968
|
-
const jsonSection =
|
|
973
|
+
const jsonSection = _chunk7TIZAANUcjs.buildJsonMenuSection.call(void 0, {
|
|
969
974
|
text: actionText.text,
|
|
970
975
|
canWrite: canWriteJson,
|
|
971
976
|
onReplace: (next) => {
|
|
@@ -980,7 +985,7 @@ function useContextMenuActions(props) {
|
|
|
980
985
|
element.value.substring(0, start) + next + element.value.substring(end)
|
|
981
986
|
);
|
|
982
987
|
} else {
|
|
983
|
-
(0,
|
|
988
|
+
_chunkWROBL3DRcjs.spliceInputValue.call(void 0, element, start, end, next);
|
|
984
989
|
}
|
|
985
990
|
},
|
|
986
991
|
onCopy: async (next) => {
|
|
@@ -1109,7 +1114,7 @@ function useContextMenuActions(props) {
|
|
|
1109
1114
|
surfaceKey: `${sourceFeature}:${entry.id}`,
|
|
1110
1115
|
sourceFeature,
|
|
1111
1116
|
config: { displayMode: resultDisplay },
|
|
1112
|
-
runtime:
|
|
1117
|
+
runtime: _chunkWROBL3DRcjs.compact.call(void 0, {
|
|
1113
1118
|
originalText: actionText.text,
|
|
1114
1119
|
surfaceName,
|
|
1115
1120
|
// Editable surfaces: let the agent stream widget_text_* edits
|
|
@@ -1134,8 +1139,8 @@ function useContextMenuActions(props) {
|
|
|
1134
1139
|
sourceFeature,
|
|
1135
1140
|
// Managed entries share the WindowPanel default. autoRun is deliberately
|
|
1136
1141
|
// absent so the safe open-and-wait default remains authoritative.
|
|
1137
|
-
config:
|
|
1138
|
-
runtime:
|
|
1142
|
+
config: _chunk7TIZAANUcjs.MANAGED_CONTEXT_MENU_AGENT_CONFIG,
|
|
1143
|
+
runtime: _chunkWROBL3DRcjs.compact.call(void 0, {
|
|
1139
1144
|
applicationScope: scope,
|
|
1140
1145
|
originalText: actionText.text,
|
|
1141
1146
|
surfaceName,
|
|
@@ -1382,11 +1387,11 @@ ${pick.fence}
|
|
|
1382
1387
|
{
|
|
1383
1388
|
kind: "item",
|
|
1384
1389
|
id: "surface:version",
|
|
1385
|
-
label: `Menu v3.${
|
|
1390
|
+
label: `Menu v3.${_chunkWROBL3DRcjs.CANONICAL_MENU_VERSION_V3} \xB7 V${menuVersion}`,
|
|
1386
1391
|
description: "Menu revision \xB7 surface wiring version",
|
|
1387
1392
|
icon: _lucidereact.Info,
|
|
1388
1393
|
onSelect: () => copyText(
|
|
1389
|
-
`${_nullishCoalesce(resolvedSurfaceName, () => ( "(no surface)"))} \xB7 v3.${
|
|
1394
|
+
`${_nullishCoalesce(resolvedSurfaceName, () => ( "(no surface)"))} \xB7 v3.${_chunkWROBL3DRcjs.CANONICAL_MENU_VERSION_V3} \xB7 V${menuVersion}`
|
|
1390
1395
|
)
|
|
1391
1396
|
}
|
|
1392
1397
|
] : []
|
|
@@ -1424,7 +1429,7 @@ ${pick.fence}
|
|
|
1424
1429
|
actionText,
|
|
1425
1430
|
// A textarea/input, or a contenteditable field (chip / rich editor), names
|
|
1426
1431
|
// itself in the header — never "Content: {{reply.body}}".
|
|
1427
|
-
fieldLabel: isEditable && selectionRange ?
|
|
1432
|
+
fieldLabel: isEditable && selectionRange ? _chunk7TIZAANUcjs.fieldLabelOf.call(void 0, selectionRange.element) : null,
|
|
1428
1433
|
jsonSection,
|
|
1429
1434
|
resolvedPlacementMode,
|
|
1430
1435
|
categoryGroups,
|
|
@@ -1666,7 +1671,7 @@ function categoryGroupNode(group, m) {
|
|
|
1666
1671
|
const isDisabled = entry.entryType === "agent_shortcut" && !entry.agentId;
|
|
1667
1672
|
const hint = (
|
|
1668
1673
|
// Advertised only when the shell's key listener can run it (key-combo.ts).
|
|
1669
|
-
entry.entryType === "agent_shortcut" && entry.keyboardShortcut &&
|
|
1674
|
+
entry.entryType === "agent_shortcut" && entry.keyboardShortcut && _chunkWROBL3DRcjs.parseKeyCombo.call(void 0, entry.keyboardShortcut) ? entry.keyboardShortcut : isDisabled ? "Not configured" : void 0
|
|
1670
1675
|
);
|
|
1671
1676
|
return {
|
|
1672
1677
|
kind: "item",
|
|
@@ -1862,7 +1867,7 @@ function buildMenuModel(m, props) {
|
|
|
1862
1867
|
const json = m.jsonSection ? {
|
|
1863
1868
|
kind: "submenu",
|
|
1864
1869
|
id: "json",
|
|
1865
|
-
label:
|
|
1870
|
+
label: _chunk7TIZAANUcjs.jsonSectionLabel.call(void 0, m.jsonSection),
|
|
1866
1871
|
icon: _lucidereact.Braces,
|
|
1867
1872
|
iconClassName: "text-amber-500",
|
|
1868
1873
|
width: "w-72",
|
|
@@ -2513,7 +2518,7 @@ function menuHeader(actionText, fieldLabel, message) {
|
|
|
2513
2518
|
return { content: "", contentLabel: `${who}${when}` };
|
|
2514
2519
|
}
|
|
2515
2520
|
if (fieldLabel && actionText.source !== "selection") {
|
|
2516
|
-
return { content:
|
|
2521
|
+
return { content: _chunk7TIZAANUcjs.fieldPreview.call(void 0, headerPreview(_turntruststrip.stripTurnTrust.call(void 0, actionText.text))), contentLabel: fieldLabel };
|
|
2517
2522
|
}
|
|
2518
2523
|
return { content: menuHeaderContent(actionText), contentLabel: null };
|
|
2519
2524
|
}
|
|
@@ -2570,4 +2575,4 @@ function menuEngineRevision(drawn, header) {
|
|
|
2570
2575
|
|
|
2571
2576
|
|
|
2572
2577
|
exports.editorTextAgentCallbacks = editorTextAgentCallbacks; exports.toast = toast; exports.hasEditorInsertTarget = hasEditorInsertTarget; exports.insertIntoEditor = insertIntoEditor; exports.ownParagraph = ownParagraph; exports.buildCategoryGroups = buildCategoryGroups; exports.useUnifiedAgentContextMenu = useUnifiedAgentContextMenu; exports.resolveApplicationScope = resolveApplicationScope; exports.resolveActionText = resolveActionText; exports.hasActionableContent = hasActionableContent; exports.detectInertMenu = detectInertMenu; exports.auditSurfaceScope = auditSurfaceScope; exports.reportMenuDiagnostics = reportMenuDiagnostics; exports.buildSelectionWriteBack = buildSelectionWriteBack; exports.DEFAULT_PLACEMENT_MODE = DEFAULT_PLACEMENT_MODE; exports.ALL_DB_PLACEMENTS = ALL_DB_PLACEMENTS; exports.PLACEMENT_LABEL_OVERRIDE = PLACEMENT_LABEL_OVERRIDE; exports.PLACEMENT_COLOR = PLACEMENT_COLOR; exports.getPlacementIcon = getPlacementIcon; exports.getPlacementLabel = getPlacementLabel; exports.resolveIcon = resolveIcon; exports.groupsByPlacement = groupsByPlacement; exports.hasItemsRecursive = hasItemsRecursive; exports.resolveRichActionView = resolveRichActionView; exports.useContextMenuActions = useContextMenuActions; exports.hasActionable = hasActionable; exports.liftPrimarySections = liftPrimarySections; exports.registryTreeNodes = registryTreeNodes; exports.buildMenuModel = buildMenuModel; exports.contextMenuHostOf = contextMenuHostOf; exports.contextMenuActionsFromModel = contextMenuActionsFromModel; exports.contextMenuProvider = contextMenuProvider; exports.modelRevision = modelRevision; exports.menuHeaderContent = menuHeaderContent; exports.chatMessageSubject = chatMessageSubject; exports.menuHeader = menuHeader; exports.headerPreview = headerPreview; exports.namedHeader = namedHeader; exports.menuEngineRevision = menuEngineRevision;
|
|
2573
|
-
//# sourceMappingURL=chunk-
|
|
2578
|
+
//# sourceMappingURL=chunk-IH5WN5JP.cjs.map
|