@equationalapplications/core-llm-tools 7.2.1 → 7.4.0

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.js CHANGED
@@ -84,7 +84,11 @@ var wikiTraverseGraphManifest = {
84
84
  description: "How many relationship hops to traverse. Maximum allowed is 3."
85
85
  },
86
86
  direction: { type: "string", enum: ["inbound", "outbound", "both"], description: "The direction of relationships to follow. Default 'both'." },
87
- edgeTypes: { type: "array", items: { type: "string" }, description: 'Optional filter. If provided, traversal only follows these edge types (e.g. ["reports_to", "depends_on"]).' }
87
+ edgeTypes: { type: "array", items: { type: "string" }, description: 'Optional filter. If provided, traversal only follows these edge types (e.g. ["reports_to", "depends_on"]).' },
88
+ excludeDrafts: {
89
+ type: "boolean",
90
+ description: "When true, unreviewed draft facts are not discovered or traversed through. The starting fact is always returned. Default false."
91
+ }
88
92
  },
89
93
  required: ["entityId", "sourceId"]
90
94
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/scopes.ts","../src/injector.ts","../src/manifests/core.ts","../src/manifests/graph.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import type { AgentScope } from './types';\n\n/**\n * Scopes that are ALWAYS authorized, with no user grant required.\n *\n * Single source of truth: tool *injection* (buildAuthorizedToolsArray) and tool\n * *execution* (scopelab's function-caller) must agree on this list. Never write\n * the 'core' literal in scope-check code.\n *\n * `satisfies readonly AgentScope[]` makes drift from the AgentScope union a\n * compile error.\n */\n// Object.freeze, not just `as const`: the latter is compile-time only, so a JS\n// consumer (or TS via `any`) could push() at runtime and silently widen\n// always-on authorization for every downstream check in the process.\nexport const AUTHORIZED_SCOPES = Object.freeze(['core'] as const) satisfies readonly AgentScope[];\n\nexport type AuthorizedScope = (typeof AUTHORIZED_SCOPES)[number];\n\n/**\n * Fail-closed guard: true only for always-on scopes.\n *\n * The `as readonly string[]` cast is required — TypeScript's `.includes()` on a\n * `readonly ['core']` tuple demands a `'core'` argument, but callers pass the\n * wider `AgentScope` / `string`.\n */\nexport function isAuthorizedScope(scope: string): scope is AuthorizedScope {\n return (AUTHORIZED_SCOPES as readonly string[]).includes(scope);\n}\n","import type {\n AgentToolManifest,\n AgentToolSchema,\n AnyAgentToolManifest,\n BuiltInToolName,\n FunctionToolManifest,\n} from './types';\nimport { isAuthorizedScope } from './scopes';\n\n/** One entry of a Gemini `tools[]` array: a function-declarations group, or a built-in tool. */\nexport type GeminiToolEntry =\n | { functionDeclarations: AgentToolSchema[] }\n | { [K in BuiltInToolName]: Record<string, never> };\n\n/**\n * Filters manifests by granted scope (core-scoped manifests always pass) and\n * returns the full Gemini tools[] array: at most one functionDeclarations\n * group, plus one entry per authorized built-in tool.\n */\nexport function buildAuthorizedToolsArray(\n availableManifests: AnyAgentToolManifest[],\n userGrantedScopes: string[]\n): GeminiToolEntry[] {\n const authorized = availableManifests.filter(\n (manifest) =>\n isAuthorizedScope(manifest.scope) || userGrantedScopes.includes(manifest.scope)\n );\n\n const entries: GeminiToolEntry[] = [];\n\n const fnSchemas = authorized\n .filter(\n (manifest): manifest is FunctionToolManifest => manifest.kind !== 'built_in'\n )\n .map((manifest) => manifest.schema);\n if (fnSchemas.length > 0) entries.push({ functionDeclarations: fnSchemas });\n\n for (const manifest of authorized) {\n if (manifest.kind === 'built_in') {\n entries.push({ [manifest.builtIn]: {} } as GeminiToolEntry);\n }\n }\n\n return entries;\n}\n","import type { AgentToolManifest, BuiltInToolManifest } from '../types';\n\nexport const getCurrentTimeManifest: AgentToolManifest = {\n name: 'get_current_time',\n scope: 'core',\n schema: {\n name: 'get_current_time',\n description:\n 'Get the exact current date and time. Always call this tool first if resolving relative temporal words like \"today\" or \"tomorrow\".',\n parameters: { type: 'object', properties: {} },\n },\n};\n\nexport const escalateToCloudManifest: AgentToolManifest = {\n name: 'escalate_to_cloud_agent',\n scope: 'core',\n schema: {\n name: 'escalate_to_cloud_agent',\n description:\n 'Use this tool when the user asks to schedule a reminder, perform deep memory searches, or execute a complex workflow that requires cloud resources.',\n parameters: { type: 'object', properties: {} },\n },\n};\n\nexport const googleSearchManifest: BuiltInToolManifest = {\n name: 'google_search',\n scope: 'core',\n kind: 'built_in',\n builtIn: 'google_search',\n};\n","import type { AgentToolManifest } from '../types';\n\nexport const wikiGetOntologyManifest: AgentToolManifest = {\n name: 'wiki_get_ontology',\n scope: 'memory:read',\n schema: {\n name: 'wiki_get_ontology',\n description:\n \"Retrieve the current ontology manifest (allowed node types and edge types) for the user's memory. Use this to understand the structure of the knowledge graph and what relationships exist.\",\n parameters: {\n type: 'object',\n properties: {\n entityId: { type: 'string', description: 'The namespace/entity ID to inspect.' },\n },\n required: ['entityId'],\n },\n },\n};\n\nexport const wikiTraverseGraphManifest: AgentToolManifest = {\n name: 'wiki_traverse_graph',\n scope: 'memory:read',\n schema: {\n name: 'wiki_traverse_graph',\n description:\n 'Traverse the knowledge graph starting from a specific fact ID to discover connected concepts and relationships. Returns a formatted neighborhood subgraph.',\n parameters: {\n type: 'object',\n properties: {\n entityId: { type: 'string', description: 'The namespace/entity ID to traverse.' },\n sourceId: { type: 'string', description: 'The exact ID of the starting fact node (obtained from a previous wiki_read call).' },\n maxDepth: {\n type: 'integer',\n minimum: 1,\n maximum: 3,\n description: 'How many relationship hops to traverse. Maximum allowed is 3.',\n },\n direction: { type: 'string', enum: ['inbound', 'outbound', 'both'], description: \"The direction of relationships to follow. Default 'both'.\" },\n edgeTypes: { type: 'array', items: { type: 'string' }, description: 'Optional filter. If provided, traversal only follows these edge types (e.g. [\"reports_to\", \"depends_on\"]).' },\n },\n required: ['entityId', 'sourceId'],\n },\n },\n};\n"]}
1
+ {"version":3,"sources":["../src/scopes.ts","../src/injector.ts","../src/manifests/core.ts","../src/manifests/graph.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import type { AgentScope } from './types';\n\n/**\n * Scopes that are ALWAYS authorized, with no user grant required.\n *\n * Single source of truth: tool *injection* (buildAuthorizedToolsArray) and tool\n * *execution* (scopelab's function-caller) must agree on this list. Never write\n * the 'core' literal in scope-check code.\n *\n * `satisfies readonly AgentScope[]` makes drift from the AgentScope union a\n * compile error.\n */\n// Object.freeze, not just `as const`: the latter is compile-time only, so a JS\n// consumer (or TS via `any`) could push() at runtime and silently widen\n// always-on authorization for every downstream check in the process.\nexport const AUTHORIZED_SCOPES = Object.freeze(['core'] as const) satisfies readonly AgentScope[];\n\nexport type AuthorizedScope = (typeof AUTHORIZED_SCOPES)[number];\n\n/**\n * Fail-closed guard: true only for always-on scopes.\n *\n * The `as readonly string[]` cast is required — TypeScript's `.includes()` on a\n * `readonly ['core']` tuple demands a `'core'` argument, but callers pass the\n * wider `AgentScope` / `string`.\n */\nexport function isAuthorizedScope(scope: string): scope is AuthorizedScope {\n return (AUTHORIZED_SCOPES as readonly string[]).includes(scope);\n}\n","import type {\n AgentToolManifest,\n AgentToolSchema,\n AnyAgentToolManifest,\n BuiltInToolName,\n FunctionToolManifest,\n} from './types';\nimport { isAuthorizedScope } from './scopes';\n\n/** One entry of a Gemini `tools[]` array: a function-declarations group, or a built-in tool. */\nexport type GeminiToolEntry =\n | { functionDeclarations: AgentToolSchema[] }\n | { [K in BuiltInToolName]: Record<string, never> };\n\n/**\n * Filters manifests by granted scope (core-scoped manifests always pass) and\n * returns the full Gemini tools[] array: at most one functionDeclarations\n * group, plus one entry per authorized built-in tool.\n */\nexport function buildAuthorizedToolsArray(\n availableManifests: AnyAgentToolManifest[],\n userGrantedScopes: string[]\n): GeminiToolEntry[] {\n const authorized = availableManifests.filter(\n (manifest) =>\n isAuthorizedScope(manifest.scope) || userGrantedScopes.includes(manifest.scope)\n );\n\n const entries: GeminiToolEntry[] = [];\n\n const fnSchemas = authorized\n .filter(\n (manifest): manifest is FunctionToolManifest => manifest.kind !== 'built_in'\n )\n .map((manifest) => manifest.schema);\n if (fnSchemas.length > 0) entries.push({ functionDeclarations: fnSchemas });\n\n for (const manifest of authorized) {\n if (manifest.kind === 'built_in') {\n entries.push({ [manifest.builtIn]: {} } as GeminiToolEntry);\n }\n }\n\n return entries;\n}\n","import type { AgentToolManifest, BuiltInToolManifest } from '../types';\n\nexport const getCurrentTimeManifest: AgentToolManifest = {\n name: 'get_current_time',\n scope: 'core',\n schema: {\n name: 'get_current_time',\n description:\n 'Get the exact current date and time. Always call this tool first if resolving relative temporal words like \"today\" or \"tomorrow\".',\n parameters: { type: 'object', properties: {} },\n },\n};\n\nexport const escalateToCloudManifest: AgentToolManifest = {\n name: 'escalate_to_cloud_agent',\n scope: 'core',\n schema: {\n name: 'escalate_to_cloud_agent',\n description:\n 'Use this tool when the user asks to schedule a reminder, perform deep memory searches, or execute a complex workflow that requires cloud resources.',\n parameters: { type: 'object', properties: {} },\n },\n};\n\nexport const googleSearchManifest: BuiltInToolManifest = {\n name: 'google_search',\n scope: 'core',\n kind: 'built_in',\n builtIn: 'google_search',\n};\n","import type { AgentToolManifest } from '../types';\n\nexport const wikiGetOntologyManifest: AgentToolManifest = {\n name: 'wiki_get_ontology',\n scope: 'memory:read',\n schema: {\n name: 'wiki_get_ontology',\n description:\n \"Retrieve the current ontology manifest (allowed node types and edge types) for the user's memory. Use this to understand the structure of the knowledge graph and what relationships exist.\",\n parameters: {\n type: 'object',\n properties: {\n entityId: { type: 'string', description: 'The namespace/entity ID to inspect.' },\n },\n required: ['entityId'],\n },\n },\n};\n\nexport const wikiTraverseGraphManifest: AgentToolManifest = {\n name: 'wiki_traverse_graph',\n scope: 'memory:read',\n schema: {\n name: 'wiki_traverse_graph',\n description:\n 'Traverse the knowledge graph starting from a specific fact ID to discover connected concepts and relationships. Returns a formatted neighborhood subgraph.',\n parameters: {\n type: 'object',\n properties: {\n entityId: { type: 'string', description: 'The namespace/entity ID to traverse.' },\n sourceId: { type: 'string', description: 'The exact ID of the starting fact node (obtained from a previous wiki_read call).' },\n maxDepth: {\n type: 'integer',\n minimum: 1,\n maximum: 3,\n description: 'How many relationship hops to traverse. Maximum allowed is 3.',\n },\n direction: { type: 'string', enum: ['inbound', 'outbound', 'both'], description: \"The direction of relationships to follow. Default 'both'.\" },\n edgeTypes: { type: 'array', items: { type: 'string' }, description: 'Optional filter. If provided, traversal only follows these edge types (e.g. [\"reports_to\", \"depends_on\"]).' },\n excludeDrafts: {\n type: 'boolean',\n description: 'When true, unreviewed draft facts are not discovered or traversed through. The starting fact is always returned. Default false.',\n },\n },\n required: ['entityId', 'sourceId'],\n },\n },\n};\n"]}
package/dist/index.mjs CHANGED
@@ -82,7 +82,11 @@ var wikiTraverseGraphManifest = {
82
82
  description: "How many relationship hops to traverse. Maximum allowed is 3."
83
83
  },
84
84
  direction: { type: "string", enum: ["inbound", "outbound", "both"], description: "The direction of relationships to follow. Default 'both'." },
85
- edgeTypes: { type: "array", items: { type: "string" }, description: 'Optional filter. If provided, traversal only follows these edge types (e.g. ["reports_to", "depends_on"]).' }
85
+ edgeTypes: { type: "array", items: { type: "string" }, description: 'Optional filter. If provided, traversal only follows these edge types (e.g. ["reports_to", "depends_on"]).' },
86
+ excludeDrafts: {
87
+ type: "boolean",
88
+ description: "When true, unreviewed draft facts are not discovered or traversed through. The starting fact is always returned. Default false."
89
+ }
86
90
  },
87
91
  required: ["entityId", "sourceId"]
88
92
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/scopes.ts","../src/injector.ts","../src/manifests/core.ts","../src/manifests/graph.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import type { AgentScope } from './types';\n\n/**\n * Scopes that are ALWAYS authorized, with no user grant required.\n *\n * Single source of truth: tool *injection* (buildAuthorizedToolsArray) and tool\n * *execution* (scopelab's function-caller) must agree on this list. Never write\n * the 'core' literal in scope-check code.\n *\n * `satisfies readonly AgentScope[]` makes drift from the AgentScope union a\n * compile error.\n */\n// Object.freeze, not just `as const`: the latter is compile-time only, so a JS\n// consumer (or TS via `any`) could push() at runtime and silently widen\n// always-on authorization for every downstream check in the process.\nexport const AUTHORIZED_SCOPES = Object.freeze(['core'] as const) satisfies readonly AgentScope[];\n\nexport type AuthorizedScope = (typeof AUTHORIZED_SCOPES)[number];\n\n/**\n * Fail-closed guard: true only for always-on scopes.\n *\n * The `as readonly string[]` cast is required — TypeScript's `.includes()` on a\n * `readonly ['core']` tuple demands a `'core'` argument, but callers pass the\n * wider `AgentScope` / `string`.\n */\nexport function isAuthorizedScope(scope: string): scope is AuthorizedScope {\n return (AUTHORIZED_SCOPES as readonly string[]).includes(scope);\n}\n","import type {\n AgentToolManifest,\n AgentToolSchema,\n AnyAgentToolManifest,\n BuiltInToolName,\n FunctionToolManifest,\n} from './types';\nimport { isAuthorizedScope } from './scopes';\n\n/** One entry of a Gemini `tools[]` array: a function-declarations group, or a built-in tool. */\nexport type GeminiToolEntry =\n | { functionDeclarations: AgentToolSchema[] }\n | { [K in BuiltInToolName]: Record<string, never> };\n\n/**\n * Filters manifests by granted scope (core-scoped manifests always pass) and\n * returns the full Gemini tools[] array: at most one functionDeclarations\n * group, plus one entry per authorized built-in tool.\n */\nexport function buildAuthorizedToolsArray(\n availableManifests: AnyAgentToolManifest[],\n userGrantedScopes: string[]\n): GeminiToolEntry[] {\n const authorized = availableManifests.filter(\n (manifest) =>\n isAuthorizedScope(manifest.scope) || userGrantedScopes.includes(manifest.scope)\n );\n\n const entries: GeminiToolEntry[] = [];\n\n const fnSchemas = authorized\n .filter(\n (manifest): manifest is FunctionToolManifest => manifest.kind !== 'built_in'\n )\n .map((manifest) => manifest.schema);\n if (fnSchemas.length > 0) entries.push({ functionDeclarations: fnSchemas });\n\n for (const manifest of authorized) {\n if (manifest.kind === 'built_in') {\n entries.push({ [manifest.builtIn]: {} } as GeminiToolEntry);\n }\n }\n\n return entries;\n}\n","import type { AgentToolManifest, BuiltInToolManifest } from '../types';\n\nexport const getCurrentTimeManifest: AgentToolManifest = {\n name: 'get_current_time',\n scope: 'core',\n schema: {\n name: 'get_current_time',\n description:\n 'Get the exact current date and time. Always call this tool first if resolving relative temporal words like \"today\" or \"tomorrow\".',\n parameters: { type: 'object', properties: {} },\n },\n};\n\nexport const escalateToCloudManifest: AgentToolManifest = {\n name: 'escalate_to_cloud_agent',\n scope: 'core',\n schema: {\n name: 'escalate_to_cloud_agent',\n description:\n 'Use this tool when the user asks to schedule a reminder, perform deep memory searches, or execute a complex workflow that requires cloud resources.',\n parameters: { type: 'object', properties: {} },\n },\n};\n\nexport const googleSearchManifest: BuiltInToolManifest = {\n name: 'google_search',\n scope: 'core',\n kind: 'built_in',\n builtIn: 'google_search',\n};\n","import type { AgentToolManifest } from '../types';\n\nexport const wikiGetOntologyManifest: AgentToolManifest = {\n name: 'wiki_get_ontology',\n scope: 'memory:read',\n schema: {\n name: 'wiki_get_ontology',\n description:\n \"Retrieve the current ontology manifest (allowed node types and edge types) for the user's memory. Use this to understand the structure of the knowledge graph and what relationships exist.\",\n parameters: {\n type: 'object',\n properties: {\n entityId: { type: 'string', description: 'The namespace/entity ID to inspect.' },\n },\n required: ['entityId'],\n },\n },\n};\n\nexport const wikiTraverseGraphManifest: AgentToolManifest = {\n name: 'wiki_traverse_graph',\n scope: 'memory:read',\n schema: {\n name: 'wiki_traverse_graph',\n description:\n 'Traverse the knowledge graph starting from a specific fact ID to discover connected concepts and relationships. Returns a formatted neighborhood subgraph.',\n parameters: {\n type: 'object',\n properties: {\n entityId: { type: 'string', description: 'The namespace/entity ID to traverse.' },\n sourceId: { type: 'string', description: 'The exact ID of the starting fact node (obtained from a previous wiki_read call).' },\n maxDepth: {\n type: 'integer',\n minimum: 1,\n maximum: 3,\n description: 'How many relationship hops to traverse. Maximum allowed is 3.',\n },\n direction: { type: 'string', enum: ['inbound', 'outbound', 'both'], description: \"The direction of relationships to follow. Default 'both'.\" },\n edgeTypes: { type: 'array', items: { type: 'string' }, description: 'Optional filter. If provided, traversal only follows these edge types (e.g. [\"reports_to\", \"depends_on\"]).' },\n },\n required: ['entityId', 'sourceId'],\n },\n },\n};\n"]}
1
+ {"version":3,"sources":["../src/scopes.ts","../src/injector.ts","../src/manifests/core.ts","../src/manifests/graph.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import type { AgentScope } from './types';\n\n/**\n * Scopes that are ALWAYS authorized, with no user grant required.\n *\n * Single source of truth: tool *injection* (buildAuthorizedToolsArray) and tool\n * *execution* (scopelab's function-caller) must agree on this list. Never write\n * the 'core' literal in scope-check code.\n *\n * `satisfies readonly AgentScope[]` makes drift from the AgentScope union a\n * compile error.\n */\n// Object.freeze, not just `as const`: the latter is compile-time only, so a JS\n// consumer (or TS via `any`) could push() at runtime and silently widen\n// always-on authorization for every downstream check in the process.\nexport const AUTHORIZED_SCOPES = Object.freeze(['core'] as const) satisfies readonly AgentScope[];\n\nexport type AuthorizedScope = (typeof AUTHORIZED_SCOPES)[number];\n\n/**\n * Fail-closed guard: true only for always-on scopes.\n *\n * The `as readonly string[]` cast is required — TypeScript's `.includes()` on a\n * `readonly ['core']` tuple demands a `'core'` argument, but callers pass the\n * wider `AgentScope` / `string`.\n */\nexport function isAuthorizedScope(scope: string): scope is AuthorizedScope {\n return (AUTHORIZED_SCOPES as readonly string[]).includes(scope);\n}\n","import type {\n AgentToolManifest,\n AgentToolSchema,\n AnyAgentToolManifest,\n BuiltInToolName,\n FunctionToolManifest,\n} from './types';\nimport { isAuthorizedScope } from './scopes';\n\n/** One entry of a Gemini `tools[]` array: a function-declarations group, or a built-in tool. */\nexport type GeminiToolEntry =\n | { functionDeclarations: AgentToolSchema[] }\n | { [K in BuiltInToolName]: Record<string, never> };\n\n/**\n * Filters manifests by granted scope (core-scoped manifests always pass) and\n * returns the full Gemini tools[] array: at most one functionDeclarations\n * group, plus one entry per authorized built-in tool.\n */\nexport function buildAuthorizedToolsArray(\n availableManifests: AnyAgentToolManifest[],\n userGrantedScopes: string[]\n): GeminiToolEntry[] {\n const authorized = availableManifests.filter(\n (manifest) =>\n isAuthorizedScope(manifest.scope) || userGrantedScopes.includes(manifest.scope)\n );\n\n const entries: GeminiToolEntry[] = [];\n\n const fnSchemas = authorized\n .filter(\n (manifest): manifest is FunctionToolManifest => manifest.kind !== 'built_in'\n )\n .map((manifest) => manifest.schema);\n if (fnSchemas.length > 0) entries.push({ functionDeclarations: fnSchemas });\n\n for (const manifest of authorized) {\n if (manifest.kind === 'built_in') {\n entries.push({ [manifest.builtIn]: {} } as GeminiToolEntry);\n }\n }\n\n return entries;\n}\n","import type { AgentToolManifest, BuiltInToolManifest } from '../types';\n\nexport const getCurrentTimeManifest: AgentToolManifest = {\n name: 'get_current_time',\n scope: 'core',\n schema: {\n name: 'get_current_time',\n description:\n 'Get the exact current date and time. Always call this tool first if resolving relative temporal words like \"today\" or \"tomorrow\".',\n parameters: { type: 'object', properties: {} },\n },\n};\n\nexport const escalateToCloudManifest: AgentToolManifest = {\n name: 'escalate_to_cloud_agent',\n scope: 'core',\n schema: {\n name: 'escalate_to_cloud_agent',\n description:\n 'Use this tool when the user asks to schedule a reminder, perform deep memory searches, or execute a complex workflow that requires cloud resources.',\n parameters: { type: 'object', properties: {} },\n },\n};\n\nexport const googleSearchManifest: BuiltInToolManifest = {\n name: 'google_search',\n scope: 'core',\n kind: 'built_in',\n builtIn: 'google_search',\n};\n","import type { AgentToolManifest } from '../types';\n\nexport const wikiGetOntologyManifest: AgentToolManifest = {\n name: 'wiki_get_ontology',\n scope: 'memory:read',\n schema: {\n name: 'wiki_get_ontology',\n description:\n \"Retrieve the current ontology manifest (allowed node types and edge types) for the user's memory. Use this to understand the structure of the knowledge graph and what relationships exist.\",\n parameters: {\n type: 'object',\n properties: {\n entityId: { type: 'string', description: 'The namespace/entity ID to inspect.' },\n },\n required: ['entityId'],\n },\n },\n};\n\nexport const wikiTraverseGraphManifest: AgentToolManifest = {\n name: 'wiki_traverse_graph',\n scope: 'memory:read',\n schema: {\n name: 'wiki_traverse_graph',\n description:\n 'Traverse the knowledge graph starting from a specific fact ID to discover connected concepts and relationships. Returns a formatted neighborhood subgraph.',\n parameters: {\n type: 'object',\n properties: {\n entityId: { type: 'string', description: 'The namespace/entity ID to traverse.' },\n sourceId: { type: 'string', description: 'The exact ID of the starting fact node (obtained from a previous wiki_read call).' },\n maxDepth: {\n type: 'integer',\n minimum: 1,\n maximum: 3,\n description: 'How many relationship hops to traverse. Maximum allowed is 3.',\n },\n direction: { type: 'string', enum: ['inbound', 'outbound', 'both'], description: \"The direction of relationships to follow. Default 'both'.\" },\n edgeTypes: { type: 'array', items: { type: 'string' }, description: 'Optional filter. If provided, traversal only follows these edge types (e.g. [\"reports_to\", \"depends_on\"]).' },\n excludeDrafts: {\n type: 'boolean',\n description: 'When true, unreviewed draft facts are not discovered or traversed through. The starting fact is always returned. Default false.',\n },\n },\n required: ['entityId', 'sourceId'],\n },\n },\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@equationalapplications/core-llm-tools",
3
- "version": "7.2.1",
3
+ "version": "7.4.0",
4
4
  "description": "Zero-dependency Gemini function-calling schemas and capability-scoped tool injection for edge AI agents. Works in Node.js, browser, and React Native (Hermes).",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",