@hyperspaceng/neural-coding-agent 0.61.6 → 0.63.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/CHANGELOG.md +54 -0
- package/README.md +2 -2
- package/dist/cli/file-processor.d.ts.map +1 -1
- package/dist/cli/file-processor.js +4 -0
- package/dist/cli/file-processor.js.map +1 -1
- package/dist/core/agent-session.d.ts +10 -3
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +60 -46
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/export-html/index.d.ts +2 -2
- package/dist/core/export-html/index.d.ts.map +1 -1
- package/dist/core/export-html/index.js +2 -2
- package/dist/core/export-html/index.js.map +1 -1
- package/dist/core/export-html/tool-renderer.d.ts +2 -2
- package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
- package/dist/core/export-html/tool-renderer.js +41 -16
- package/dist/core/export-html/tool-renderer.js.map +1 -1
- package/dist/core/extensions/index.d.ts +3 -2
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +12 -2
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +4 -7
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +27 -38
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +44 -9
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/extensions/wrapper.d.ts.map +1 -1
- package/dist/core/extensions/wrapper.js +2 -8
- package/dist/core/extensions/wrapper.js.map +1 -1
- package/dist/core/index.d.ts +1 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/output-guard.d.ts +6 -0
- package/dist/core/output-guard.d.ts.map +1 -0
- package/dist/core/output-guard.js +59 -0
- package/dist/core/output-guard.js.map +1 -0
- package/dist/core/package-manager.d.ts +1 -0
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js +27 -8
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/prompt-templates.d.ts +2 -1
- package/dist/core/prompt-templates.d.ts.map +1 -1
- package/dist/core/prompt-templates.js +30 -32
- package/dist/core/prompt-templates.js.map +1 -1
- package/dist/core/resource-loader.d.ts +6 -5
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +136 -108
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/sdk.d.ts +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/skills.d.ts +2 -1
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +25 -1
- package/dist/core/skills.js.map +1 -1
- package/dist/core/slash-commands.d.ts +2 -3
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/source-info.d.ts +18 -0
- package/dist/core/source-info.d.ts.map +1 -0
- package/dist/core/source-info.js +19 -0
- package/dist/core/source-info.js.map +1 -0
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +3 -38
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tools/bash.d.ts +19 -9
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +151 -59
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/edit.d.ts +14 -2
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +92 -21
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/find.d.ts +11 -4
- package/dist/core/tools/find.d.ts.map +1 -1
- package/dist/core/tools/find.js +76 -27
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/grep.d.ts +15 -4
- package/dist/core/tools/grep.d.ts.map +1 -1
- package/dist/core/tools/grep.js +83 -29
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/core/tools/index.d.ts +57 -19
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js +50 -26
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/ls.d.ts +9 -3
- package/dist/core/tools/ls.d.ts.map +1 -1
- package/dist/core/tools/ls.js +67 -13
- package/dist/core/tools/ls.js.map +1 -1
- package/dist/core/tools/read.d.ts +10 -3
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +110 -51
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/render-utils.d.ts +21 -0
- package/dist/core/tools/render-utils.d.ts.map +1 -0
- package/dist/core/tools/render-utils.js +49 -0
- package/dist/core/tools/render-utils.js.map +1 -0
- package/dist/core/tools/tool-definition-wrapper.d.ts +14 -0
- package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -0
- package/dist/core/tools/tool-definition-wrapper.js +30 -0
- package/dist/core/tools/tool-definition-wrapper.js.map +1 -0
- package/dist/core/tools/write.d.ts +9 -3
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/tools/write.js +162 -27
- package/dist/core/tools/write.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +29 -9
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts +15 -40
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +126 -679
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +4 -11
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +144 -92
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/theme/theme.d.ts +3 -0
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +14 -0
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/modes/print-mode.d.ts.map +1 -1
- package/dist/modes/print-mode.js +5 -11
- package/dist/modes/print-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +27 -20
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +3 -4
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/utils/image-resize.d.ts +5 -5
- package/dist/utils/image-resize.d.ts.map +1 -1
- package/dist/utils/image-resize.js +45 -94
- package/dist/utils/image-resize.js.map +1 -1
- package/docs/extensions.md +72 -32
- package/docs/tui.md +2 -2
- package/examples/extensions/built-in-tool-renderer.ts +8 -8
- package/examples/extensions/commands.ts +3 -3
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/custom-provider-qwen-cli/package.json +1 -1
- package/examples/extensions/minimal-mode.ts +14 -14
- package/examples/extensions/question.ts +2 -2
- package/examples/extensions/questionnaire.ts +2 -2
- package/examples/extensions/subagent/index.ts +2 -2
- package/examples/extensions/todo.ts +2 -2
- package/examples/extensions/truncated-tool.ts +2 -2
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/examples/sdk/04-skills.ts +8 -2
- package/examples/sdk/08-prompt-templates.ts +2 -1
- package/examples/sdk/12-full-control.ts +0 -1
- package/package.json +4 -4
|
@@ -27,9 +27,10 @@ import { createToolHtmlRenderer } from "./export-html/tool-renderer.js";
|
|
|
27
27
|
import { ExtensionRunner, wrapRegisteredTools, } from "./extensions/index.js";
|
|
28
28
|
import { expandPromptTemplate } from "./prompt-templates.js";
|
|
29
29
|
import { CURRENT_SESSION_VERSION, getLatestCompactionEntry } from "./session-manager.js";
|
|
30
|
-
import {
|
|
30
|
+
import { createSyntheticSourceInfo } from "./source-info.js";
|
|
31
31
|
import { buildSystemPrompt } from "./system-prompt.js";
|
|
32
|
-
import {
|
|
32
|
+
import { createAllToolDefinitions } from "./tools/index.js";
|
|
33
|
+
import { createToolDefinitionFromAgentTool, wrapToolDefinition } from "./tools/tool-definition-wrapper.js";
|
|
33
34
|
/**
|
|
34
35
|
* Parse a skill block from message text.
|
|
35
36
|
* Returns null if the text doesn't contain a skill block.
|
|
@@ -89,7 +90,7 @@ export class AgentSession {
|
|
|
89
90
|
_turnIndex = 0;
|
|
90
91
|
_resourceLoader;
|
|
91
92
|
_customTools;
|
|
92
|
-
|
|
93
|
+
_baseToolDefinitions = new Map();
|
|
93
94
|
_cwd;
|
|
94
95
|
_extensionRunnerRef;
|
|
95
96
|
_initialActiveToolNames;
|
|
@@ -103,6 +104,7 @@ export class AgentSession {
|
|
|
103
104
|
_modelRegistry;
|
|
104
105
|
// Tool registry for extension getTools/setTools
|
|
105
106
|
_toolRegistry = new Map();
|
|
107
|
+
_toolDefinitions = new Map();
|
|
106
108
|
_toolPromptSnippets = new Map();
|
|
107
109
|
_toolPromptGuidelines = new Map();
|
|
108
110
|
// Base system prompt (without extension appends) - used to apply fresh appends each turn
|
|
@@ -493,15 +495,19 @@ export class AgentSession {
|
|
|
493
495
|
return this.agent.state.tools.map((t) => t.name);
|
|
494
496
|
}
|
|
495
497
|
/**
|
|
496
|
-
* Get all configured tools with name, description, and
|
|
498
|
+
* Get all configured tools with name, description, parameter schema, and source metadata.
|
|
497
499
|
*/
|
|
498
500
|
getAllTools() {
|
|
499
|
-
return Array.from(this.
|
|
500
|
-
name:
|
|
501
|
-
description:
|
|
502
|
-
parameters:
|
|
501
|
+
return Array.from(this._toolDefinitions.values()).map(({ definition, sourceInfo }) => ({
|
|
502
|
+
name: definition.name,
|
|
503
|
+
description: definition.description,
|
|
504
|
+
parameters: definition.parameters,
|
|
505
|
+
sourceInfo,
|
|
503
506
|
}));
|
|
504
507
|
}
|
|
508
|
+
getToolDefinition(name) {
|
|
509
|
+
return this._toolDefinitions.get(name)?.definition;
|
|
510
|
+
}
|
|
505
511
|
/**
|
|
506
512
|
* Set active tools by name.
|
|
507
513
|
* Only tools in the registry can be enabled. Unknown tool names are ignored.
|
|
@@ -1656,36 +1662,24 @@ export class AgentSession {
|
|
|
1656
1662
|
this.agent.setModel(refreshedModel);
|
|
1657
1663
|
}
|
|
1658
1664
|
_bindExtensionCore(runner) {
|
|
1659
|
-
const normalizeLocation = (source) => {
|
|
1660
|
-
if (source === "user" || source === "project" || source === "path") {
|
|
1661
|
-
return source;
|
|
1662
|
-
}
|
|
1663
|
-
return undefined;
|
|
1664
|
-
};
|
|
1665
|
-
const reservedBuiltins = new Set(BUILTIN_SLASH_COMMANDS.map((command) => command.name));
|
|
1666
1665
|
const getCommands = () => {
|
|
1667
|
-
const extensionCommands = runner
|
|
1668
|
-
.
|
|
1669
|
-
.filter(({ command }) => !reservedBuiltins.has(command.name))
|
|
1670
|
-
.map(({ command, extensionPath }) => ({
|
|
1671
|
-
name: command.name,
|
|
1666
|
+
const extensionCommands = runner.getRegisteredCommands().map((command) => ({
|
|
1667
|
+
name: command.invocationName,
|
|
1672
1668
|
description: command.description,
|
|
1673
1669
|
source: "extension",
|
|
1674
|
-
|
|
1670
|
+
sourceInfo: command.sourceInfo,
|
|
1675
1671
|
}));
|
|
1676
1672
|
const templates = this.promptTemplates.map((template) => ({
|
|
1677
1673
|
name: template.name,
|
|
1678
1674
|
description: template.description,
|
|
1679
1675
|
source: "prompt",
|
|
1680
|
-
|
|
1681
|
-
path: template.filePath,
|
|
1676
|
+
sourceInfo: template.sourceInfo,
|
|
1682
1677
|
}));
|
|
1683
1678
|
const skills = this._resourceLoader.getSkills().skills.map((skill) => ({
|
|
1684
1679
|
name: `skill:${skill.name}`,
|
|
1685
1680
|
description: skill.description,
|
|
1686
1681
|
source: "skill",
|
|
1687
|
-
|
|
1688
|
-
path: skill.filePath,
|
|
1682
|
+
sourceInfo: skill.sourceInfo,
|
|
1689
1683
|
}));
|
|
1690
1684
|
return [...extensionCommands, ...templates, ...skills];
|
|
1691
1685
|
};
|
|
@@ -1773,24 +1767,44 @@ export class AgentSession {
|
|
|
1773
1767
|
const registeredTools = this._extensionRunner?.getAllRegisteredTools() ?? [];
|
|
1774
1768
|
const allCustomTools = [
|
|
1775
1769
|
...registeredTools,
|
|
1776
|
-
...this._customTools.map((
|
|
1770
|
+
...this._customTools.map((definition) => ({
|
|
1771
|
+
definition,
|
|
1772
|
+
sourceInfo: createSyntheticSourceInfo(`<sdk:${definition.name}>`, { source: "sdk" }),
|
|
1773
|
+
})),
|
|
1777
1774
|
];
|
|
1778
|
-
|
|
1779
|
-
|
|
1780
|
-
|
|
1781
|
-
|
|
1775
|
+
const definitionRegistry = new Map(Array.from(this._baseToolDefinitions.entries()).map(([name, definition]) => [
|
|
1776
|
+
name,
|
|
1777
|
+
{
|
|
1778
|
+
definition,
|
|
1779
|
+
sourceInfo: createSyntheticSourceInfo(`<builtin:${name}>`, { source: "builtin" }),
|
|
1780
|
+
},
|
|
1781
|
+
]));
|
|
1782
|
+
for (const tool of allCustomTools) {
|
|
1783
|
+
definitionRegistry.set(tool.definition.name, {
|
|
1784
|
+
definition: tool.definition,
|
|
1785
|
+
sourceInfo: tool.sourceInfo,
|
|
1786
|
+
});
|
|
1787
|
+
}
|
|
1788
|
+
this._toolDefinitions = definitionRegistry;
|
|
1789
|
+
this._toolPromptSnippets = new Map(Array.from(definitionRegistry.values())
|
|
1790
|
+
.map(({ definition }) => {
|
|
1791
|
+
const snippet = this._normalizePromptSnippet(definition.promptSnippet);
|
|
1792
|
+
return snippet ? [definition.name, snippet] : undefined;
|
|
1782
1793
|
})
|
|
1783
1794
|
.filter((entry) => entry !== undefined));
|
|
1784
|
-
this._toolPromptGuidelines = new Map(
|
|
1785
|
-
.map((
|
|
1786
|
-
const guidelines = this._normalizePromptGuidelines(
|
|
1787
|
-
return guidelines.length > 0 ? [
|
|
1795
|
+
this._toolPromptGuidelines = new Map(Array.from(definitionRegistry.values())
|
|
1796
|
+
.map(({ definition }) => {
|
|
1797
|
+
const guidelines = this._normalizePromptGuidelines(definition.promptGuidelines);
|
|
1798
|
+
return guidelines.length > 0 ? [definition.name, guidelines] : undefined;
|
|
1788
1799
|
})
|
|
1789
1800
|
.filter((entry) => entry !== undefined));
|
|
1790
1801
|
const wrappedExtensionTools = this._extensionRunner
|
|
1791
1802
|
? wrapRegisteredTools(allCustomTools, this._extensionRunner)
|
|
1792
1803
|
: [];
|
|
1793
|
-
const toolRegistry = new Map(this.
|
|
1804
|
+
const toolRegistry = new Map(Array.from(this._baseToolDefinitions.values()).map((definition) => [
|
|
1805
|
+
definition.name,
|
|
1806
|
+
wrapToolDefinition(definition),
|
|
1807
|
+
]));
|
|
1794
1808
|
for (const tool of wrappedExtensionTools) {
|
|
1795
1809
|
toolRegistry.set(tool.name, tool);
|
|
1796
1810
|
}
|
|
@@ -1815,13 +1829,16 @@ export class AgentSession {
|
|
|
1815
1829
|
_buildRuntime(options) {
|
|
1816
1830
|
const autoResizeImages = this.settingsManager.getImageAutoResize();
|
|
1817
1831
|
const shellCommandPrefix = this.settingsManager.getShellCommandPrefix();
|
|
1818
|
-
const
|
|
1819
|
-
? this._baseToolsOverride
|
|
1820
|
-
|
|
1832
|
+
const baseToolDefinitions = this._baseToolsOverride
|
|
1833
|
+
? Object.fromEntries(Object.entries(this._baseToolsOverride).map(([name, tool]) => [
|
|
1834
|
+
name,
|
|
1835
|
+
createToolDefinitionFromAgentTool(tool),
|
|
1836
|
+
]))
|
|
1837
|
+
: createAllToolDefinitions(this._cwd, {
|
|
1821
1838
|
read: { autoResizeImages },
|
|
1822
1839
|
bash: { commandPrefix: shellCommandPrefix },
|
|
1823
1840
|
});
|
|
1824
|
-
this.
|
|
1841
|
+
this._baseToolDefinitions = new Map(Object.entries(baseToolDefinitions).map(([name, tool]) => [name, tool]));
|
|
1825
1842
|
const extensionsResult = this._resourceLoader.getExtensions();
|
|
1826
1843
|
if (options.flagValues) {
|
|
1827
1844
|
for (const [name, value] of options.flagValues) {
|
|
@@ -2500,13 +2517,10 @@ export class AgentSession {
|
|
|
2500
2517
|
async exportToHtml(outputPath) {
|
|
2501
2518
|
const themeName = this.settingsManager.getTheme();
|
|
2502
2519
|
// Create tool renderer if we have an extension runner (for custom tool HTML rendering)
|
|
2503
|
-
|
|
2504
|
-
|
|
2505
|
-
|
|
2506
|
-
|
|
2507
|
-
theme,
|
|
2508
|
-
});
|
|
2509
|
-
}
|
|
2520
|
+
const toolRenderer = createToolHtmlRenderer({
|
|
2521
|
+
getToolDefinition: (name) => this.getToolDefinition(name),
|
|
2522
|
+
theme,
|
|
2523
|
+
});
|
|
2510
2524
|
return await exportSessionToHtml(this.sessionManager, this.state, {
|
|
2511
2525
|
outputPath,
|
|
2512
2526
|
themeName,
|