@kolisachint/hoocode-agent 0.4.118 → 0.4.120
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 +86 -0
- package/dist/core/agent-session.d.ts +35 -1
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +157 -1
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/extension-mcp-servers.d.ts +8 -1
- package/dist/core/extension-mcp-servers.d.ts.map +1 -1
- package/dist/core/extension-mcp-servers.js.map +1 -1
- package/dist/core/extensions/index.d.ts +1 -1
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/plugins/authoring.d.ts.map +1 -1
- package/dist/core/extensions/plugins/authoring.js +5 -2
- package/dist/core/extensions/plugins/authoring.js.map +1 -1
- package/dist/core/extensions/plugins/formats/copilot.d.ts +16 -14
- package/dist/core/extensions/plugins/formats/copilot.d.ts.map +1 -1
- package/dist/core/extensions/plugins/formats/copilot.js +64 -46
- package/dist/core/extensions/plugins/formats/copilot.js.map +1 -1
- package/dist/core/extensions/plugins/formats/jsonManifest.d.ts.map +1 -1
- package/dist/core/extensions/plugins/formats/jsonManifest.js +6 -6
- package/dist/core/extensions/plugins/formats/jsonManifest.js.map +1 -1
- package/dist/core/extensions/plugins/formats/shared.d.ts +12 -1
- package/dist/core/extensions/plugins/formats/shared.d.ts.map +1 -1
- package/dist/core/extensions/plugins/formats/shared.js +16 -0
- package/dist/core/extensions/plugins/formats/shared.js.map +1 -1
- package/dist/core/extensions/plugins/formats/types.d.ts +7 -2
- package/dist/core/extensions/plugins/formats/types.d.ts.map +1 -1
- package/dist/core/extensions/plugins/formats/types.js.map +1 -1
- package/dist/core/extensions/plugins/index.d.ts.map +1 -1
- package/dist/core/extensions/plugins/index.js +13 -0
- package/dist/core/extensions/plugins/index.js.map +1 -1
- package/dist/core/extensions/plugins/install.d.ts +23 -1
- package/dist/core/extensions/plugins/install.d.ts.map +1 -1
- package/dist/core/extensions/plugins/install.js +63 -5
- package/dist/core/extensions/plugins/install.js.map +1 -1
- package/dist/core/extensions/plugins/marketplace.d.ts.map +1 -1
- package/dist/core/extensions/plugins/marketplace.js +22 -16
- package/dist/core/extensions/plugins/marketplace.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +2 -0
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +15 -0
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +33 -0
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/settings-defaults.d.ts +1 -1
- package/dist/core/settings-defaults.d.ts.map +1 -1
- package/dist/core/settings-defaults.js +1 -1
- package/dist/core/settings-defaults.js.map +1 -1
- package/dist/core/settings-types.d.ts.map +1 -1
- package/dist/core/settings-types.js.map +1 -1
- package/dist/core/tools/plugins.d.ts.map +1 -1
- package/dist/core/tools/plugins.js +26 -5
- package/dist/core/tools/plugins.js.map +1 -1
- package/dist/core/tools/propose-plugin.d.ts.map +1 -1
- package/dist/core/tools/propose-plugin.js +10 -3
- package/dist/core/tools/propose-plugin.js.map +1 -1
- package/dist/extensions/core/mcp-loader.d.ts +11 -3
- package/dist/extensions/core/mcp-loader.d.ts.map +1 -1
- package/dist/extensions/core/mcp-loader.js +103 -18
- package/dist/extensions/core/mcp-loader.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +2 -1
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +2 -0
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/with-deps/package.json +1 -1
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,91 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.4.120] - 2026-07-13
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- Remote MCP servers: the MCP loader now speaks Streamable HTTP
|
|
8
|
+
(`{ "type": "http", "url": ..., "headers": ... }`) and the legacy SSE
|
|
9
|
+
transport (`"type": "sse"`) in addition to stdio, across every config
|
|
10
|
+
source — standard `mcp.json` files, `~/.hoocode/mcp-servers/*.json`, and
|
|
11
|
+
plugin `.mcp.json` registrations in both the Claude (`mcpServers`) and
|
|
12
|
+
Copilot / VS Code (`servers`) shapes. This closes the 0.4.119 known
|
|
13
|
+
limitation: remote plugin servers (e.g. workiq from the Copilot directory,
|
|
14
|
+
or Atlassian Rovo) are connected instead of skipped. Built on the official
|
|
15
|
+
`@modelcontextprotocol/sdk` client transports; a `type: "http"` endpoint
|
|
16
|
+
that rejects streamable HTTP with a 4xx automatically falls back to the
|
|
17
|
+
legacy SSE transport.
|
|
18
|
+
- MCP OAuth: remote servers that demand authorization get the full MCP auth
|
|
19
|
+
flow — RFC 9728/8414 discovery, dynamic client registration, browser-based
|
|
20
|
+
authorization code + PKCE via a loopback redirect listener, and automatic
|
|
21
|
+
token refresh — with per-server-URL state persisted under
|
|
22
|
+
`~/.hoocode/mcp-auth/` (0600). When interactive sign-in is needed the
|
|
23
|
+
session keeps starting; the server's tools connect and register as soon as
|
|
24
|
+
the browser flow completes. The headless `loadMcpTools` in
|
|
25
|
+
`@kolisachint/hoocode-agent-core` accepts the same remote entries plus
|
|
26
|
+
`McpRemoteOptions` (storage dir, browser opener, auth callbacks), and the
|
|
27
|
+
transport/provider are exported as `connectHttpMcpServer` /
|
|
28
|
+
`McpFileOAuthProvider`.
|
|
29
|
+
|
|
30
|
+
## [0.4.119] - 2026-07-13
|
|
31
|
+
|
|
32
|
+
### Added
|
|
33
|
+
|
|
34
|
+
- **Single-turn capability loop**: `InstallPlugin` and `ProposePlugin` now
|
|
35
|
+
activate the plugin in the live session — skills, slash commands, and
|
|
36
|
+
subagents are usable on the model's very next request, in the same turn, with
|
|
37
|
+
no `/reload`. Plugins bundling executable capabilities (hooks, MCP servers)
|
|
38
|
+
trigger an automatic reload when the turn ends. `UninstallPlugin` schedules
|
|
39
|
+
the same idle reload so cleanup is autonomous too.
|
|
40
|
+
- Mid-run context refresh: tool or system-prompt changes made while a run is
|
|
41
|
+
streaming (deferred MCP schema resolution via `ResolveMcpTools`, live plugin
|
|
42
|
+
activation) now reach the next provider request within the same run, via the
|
|
43
|
+
agent loop's `prepareNextTurn` hook. Previously the loop's context was frozen
|
|
44
|
+
at run start, so `ResolveMcpTools`-resolved tools were not callable until the
|
|
45
|
+
next user prompt.
|
|
46
|
+
- Well-known marketplaces: the official Claude plugins directory
|
|
47
|
+
(`anthropics/claude-plugins-official`, 250+ plugins) is registered as a
|
|
48
|
+
curated, trusted marketplace out of the box. Its index is cloned lazily into
|
|
49
|
+
`.agents/marketplace-cache/` on first `SearchPlugins` call (offline degrades
|
|
50
|
+
gracefully) and is never auto-updated.
|
|
51
|
+
- Reusability sensing: system-prompt guidance now nudges the model to
|
|
52
|
+
`SearchPlugins` before hand-rolling a missing capability, and to author a
|
|
53
|
+
reusable recipe as a plugin with `ProposePlugin` autonomously when no
|
|
54
|
+
marketplace plugin covers it.
|
|
55
|
+
|
|
56
|
+
- Real-world GitHub Copilot plugin support: the Copilot adapter now reads the
|
|
57
|
+
convention established by `github/copilot-plugins` — plugin manifests at
|
|
58
|
+
`.github/plugin/plugin.json` over a Claude-mirror capability tree, marketplace
|
|
59
|
+
indices at `.github/plugin/marketplace.json`, manifest dir-path overrides
|
|
60
|
+
(`"skills": "./skills/"`), and the `{ "source": "github", "repo", "path" }`
|
|
61
|
+
source shorthand. The legacy authored layout (`.github/copilot-plugin.json` +
|
|
62
|
+
prompts/chatmodes) still parses. `github/copilot-plugins` joins the well-known
|
|
63
|
+
trusted marketplaces (searchable with `platform: "github"`).
|
|
64
|
+
- Manifest-less marketplace plugins (bare capability trees, e.g.
|
|
65
|
+
copilot-plugins' `spark`) now install: a native manifest is synthesized from
|
|
66
|
+
the marketplace entry so the standard loader carries them.
|
|
67
|
+
- Hooks + bundled scripts verified end to end through the install path: script
|
|
68
|
+
exec bits survive install, the `{ description, hooks }` `hooks.json` wrapper
|
|
69
|
+
parses, `${CLAUDE_PLUGIN_ROOT}` resolves to the installed root, event JSON
|
|
70
|
+
arrives on stdin, and exit-code 2 blocks the tool call.
|
|
71
|
+
|
|
72
|
+
### Changed
|
|
73
|
+
|
|
74
|
+
- `deferMcpSchemas` now defaults to **on**: MCP tool schemas are deferred
|
|
75
|
+
(names only in context, resolved on demand via `ResolveMcpTools`), cutting
|
|
76
|
+
the context cost of MCP-heavy plugins. Set `deferMcpSchemas: false` to
|
|
77
|
+
restore eager schema registration.
|
|
78
|
+
- `ProposePlugin`'s Copilot output now follows the real-world convention: one
|
|
79
|
+
shared capability tree plus a `.github/plugin/plugin.json` marker manifest
|
|
80
|
+
(previously `.github/copilot-plugin.json` + `.prompt.md`/`.chatmode.md`
|
|
81
|
+
files).
|
|
82
|
+
|
|
83
|
+
### Known limitations
|
|
84
|
+
|
|
85
|
+
- Remote MCP servers (`{ "type": "http", "url": ... }` in a plugin's
|
|
86
|
+
`.mcp.json`, e.g. workiq) are not yet supported — the MCP loader is
|
|
87
|
+
stdio-only; such servers are skipped at plugin load.
|
|
88
|
+
|
|
3
89
|
## [0.4.118] - 2026-07-12
|
|
4
90
|
|
|
5
91
|
## [0.4.117] - 2026-07-12
|
|
@@ -17,7 +17,7 @@ import type { ImageContent, Model, TextContent } from "@kolisachint/hoocode-ai";
|
|
|
17
17
|
import { type SessionStats } from "./agent-session-stats.js";
|
|
18
18
|
import { type NavigateTreeOptions, type NavigateTreeResult } from "./agent-session-tree-navigation.js";
|
|
19
19
|
import { type BashResult } from "./bash-executor.js";
|
|
20
|
-
import { type ContextUsage, type ExtensionCommandContextActions, type ExtensionErrorListener, ExtensionRunner, type ExtensionUIContext, type InputSource, type ReplacedSessionContext, type SessionStartEvent, type ShutdownHandler, type ToolDefinition, type ToolInfo } from "./extensions/index.js";
|
|
20
|
+
import { type ContextUsage, type ExtensionCommandContextActions, type ExtensionErrorListener, ExtensionRunner, type ExtensionUIContext, type InputSource, type PluginActivationResult, type ReplacedSessionContext, type SessionStartEvent, type ShutdownHandler, type ToolDefinition, type ToolInfo } from "./extensions/index.js";
|
|
21
21
|
import type { ModelRegistry } from "./model-registry.js";
|
|
22
22
|
import { type PromptTemplate } from "./prompt-templates.js";
|
|
23
23
|
import type { ResourceLoader } from "./resource-loader.js";
|
|
@@ -167,6 +167,20 @@ export declare class AgentSession {
|
|
|
167
167
|
private _toolPromptGuidelines;
|
|
168
168
|
private _baseSystemPrompt;
|
|
169
169
|
private _baseSystemPromptOptions;
|
|
170
|
+
/**
|
|
171
|
+
* Set when tools or the system prompt change while a run is in flight (a tool
|
|
172
|
+
* registered mid-turn, a plugin activated live). The agent loop snapshots its
|
|
173
|
+
* context at run start; this flag makes prepareNextTurn hand the loop a fresh
|
|
174
|
+
* systemPrompt + tools before the next provider request, so mid-turn
|
|
175
|
+
* capability changes are visible within the same turn.
|
|
176
|
+
*/
|
|
177
|
+
private _runtimeContextDirty;
|
|
178
|
+
/**
|
|
179
|
+
* Set when a change needs a full reload (executable plugin capabilities:
|
|
180
|
+
* hooks, MCP servers, providers) that cannot be wired mid-turn. Consumed on
|
|
181
|
+
* agent_end: once the session is idle the reload runs automatically.
|
|
182
|
+
*/
|
|
183
|
+
private _reloadWhenIdle;
|
|
170
184
|
constructor(config: AgentSessionConfig);
|
|
171
185
|
/** Model registry for API key resolution and model discovery */
|
|
172
186
|
get modelRegistry(): ModelRegistry;
|
|
@@ -437,6 +451,26 @@ export declare class AgentSession {
|
|
|
437
451
|
private _refreshToolRegistry;
|
|
438
452
|
private _buildRuntime;
|
|
439
453
|
reload(): Promise<void>;
|
|
454
|
+
/**
|
|
455
|
+
* Activate a just-installed or just-authored plugin in the LIVE session, no
|
|
456
|
+
* reload required. Passive capabilities — skills, slash commands, subagents,
|
|
457
|
+
* themes — register immediately and become visible to the model on its next
|
|
458
|
+
* provider request, even mid-turn (via the prepareNextTurn context refresh).
|
|
459
|
+
*
|
|
460
|
+
* Executable capabilities (hooks, MCP servers, providers) cannot be safely
|
|
461
|
+
* wired into a run that is already streaming; when the plugin bundles any,
|
|
462
|
+
* this schedules an automatic full reload for when the session next goes
|
|
463
|
+
* idle (end of the current turn), so they still activate autonomously.
|
|
464
|
+
*/
|
|
465
|
+
activatePlugin(pluginDir: string): PluginActivationResult;
|
|
466
|
+
/**
|
|
467
|
+
* Ask for a full reload once the session is idle — used when a change (e.g.
|
|
468
|
+
* uninstalling a plugin) can only take effect through the reload path. Runs
|
|
469
|
+
* immediately when already idle.
|
|
470
|
+
*/
|
|
471
|
+
requestReloadWhenIdle(): void;
|
|
472
|
+
/** Run the pending idle reload through the mode's reload flow when bound (UI refresh included). */
|
|
473
|
+
private _runIdleReload;
|
|
440
474
|
/**
|
|
441
475
|
* Cancel in-progress retry.
|
|
442
476
|
*/
|