@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.
Files changed (72) hide show
  1. package/CHANGELOG.md +86 -0
  2. package/dist/core/agent-session.d.ts +35 -1
  3. package/dist/core/agent-session.d.ts.map +1 -1
  4. package/dist/core/agent-session.js +157 -1
  5. package/dist/core/agent-session.js.map +1 -1
  6. package/dist/core/extension-mcp-servers.d.ts +8 -1
  7. package/dist/core/extension-mcp-servers.d.ts.map +1 -1
  8. package/dist/core/extension-mcp-servers.js.map +1 -1
  9. package/dist/core/extensions/index.d.ts +1 -1
  10. package/dist/core/extensions/index.d.ts.map +1 -1
  11. package/dist/core/extensions/index.js.map +1 -1
  12. package/dist/core/extensions/plugins/authoring.d.ts.map +1 -1
  13. package/dist/core/extensions/plugins/authoring.js +5 -2
  14. package/dist/core/extensions/plugins/authoring.js.map +1 -1
  15. package/dist/core/extensions/plugins/formats/copilot.d.ts +16 -14
  16. package/dist/core/extensions/plugins/formats/copilot.d.ts.map +1 -1
  17. package/dist/core/extensions/plugins/formats/copilot.js +64 -46
  18. package/dist/core/extensions/plugins/formats/copilot.js.map +1 -1
  19. package/dist/core/extensions/plugins/formats/jsonManifest.d.ts.map +1 -1
  20. package/dist/core/extensions/plugins/formats/jsonManifest.js +6 -6
  21. package/dist/core/extensions/plugins/formats/jsonManifest.js.map +1 -1
  22. package/dist/core/extensions/plugins/formats/shared.d.ts +12 -1
  23. package/dist/core/extensions/plugins/formats/shared.d.ts.map +1 -1
  24. package/dist/core/extensions/plugins/formats/shared.js +16 -0
  25. package/dist/core/extensions/plugins/formats/shared.js.map +1 -1
  26. package/dist/core/extensions/plugins/formats/types.d.ts +7 -2
  27. package/dist/core/extensions/plugins/formats/types.d.ts.map +1 -1
  28. package/dist/core/extensions/plugins/formats/types.js.map +1 -1
  29. package/dist/core/extensions/plugins/index.d.ts.map +1 -1
  30. package/dist/core/extensions/plugins/index.js +13 -0
  31. package/dist/core/extensions/plugins/index.js.map +1 -1
  32. package/dist/core/extensions/plugins/install.d.ts +23 -1
  33. package/dist/core/extensions/plugins/install.d.ts.map +1 -1
  34. package/dist/core/extensions/plugins/install.js +63 -5
  35. package/dist/core/extensions/plugins/install.js.map +1 -1
  36. package/dist/core/extensions/plugins/marketplace.d.ts.map +1 -1
  37. package/dist/core/extensions/plugins/marketplace.js +22 -16
  38. package/dist/core/extensions/plugins/marketplace.js.map +1 -1
  39. package/dist/core/extensions/runner.d.ts +2 -0
  40. package/dist/core/extensions/runner.d.ts.map +1 -1
  41. package/dist/core/extensions/runner.js +15 -0
  42. package/dist/core/extensions/runner.js.map +1 -1
  43. package/dist/core/extensions/types.d.ts +33 -0
  44. package/dist/core/extensions/types.d.ts.map +1 -1
  45. package/dist/core/extensions/types.js.map +1 -1
  46. package/dist/core/settings-defaults.d.ts +1 -1
  47. package/dist/core/settings-defaults.d.ts.map +1 -1
  48. package/dist/core/settings-defaults.js +1 -1
  49. package/dist/core/settings-defaults.js.map +1 -1
  50. package/dist/core/settings-types.d.ts.map +1 -1
  51. package/dist/core/settings-types.js.map +1 -1
  52. package/dist/core/tools/plugins.d.ts.map +1 -1
  53. package/dist/core/tools/plugins.js +26 -5
  54. package/dist/core/tools/plugins.js.map +1 -1
  55. package/dist/core/tools/propose-plugin.d.ts.map +1 -1
  56. package/dist/core/tools/propose-plugin.js +10 -3
  57. package/dist/core/tools/propose-plugin.js.map +1 -1
  58. package/dist/extensions/core/mcp-loader.d.ts +11 -3
  59. package/dist/extensions/core/mcp-loader.d.ts.map +1 -1
  60. package/dist/extensions/core/mcp-loader.js +103 -18
  61. package/dist/extensions/core/mcp-loader.js.map +1 -1
  62. package/dist/main.d.ts.map +1 -1
  63. package/dist/main.js +2 -1
  64. package/dist/main.js.map +1 -1
  65. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  66. package/dist/modes/interactive/interactive-mode.js +2 -0
  67. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  68. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  69. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  70. package/examples/extensions/sandbox/package.json +1 -1
  71. package/examples/extensions/with-deps/package.json +1 -1
  72. 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
  */