@schlenkr/ragents 0.1.8 → 0.1.9
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/apps/server/src/config-definition.ts +24 -2
- package/apps/server/src/config.ts +0 -6
- package/apps/server/src/host-api.json +3 -10
- package/apps/server/src/host-api.ts +6 -7
- package/apps/server/src/plugin-build/build.ts +28 -5
- package/apps/server/src/plugin-build/plugin-description.ts +1 -1
- package/apps/server/src/plugin-build/typecheck.ts +2 -2
- package/apps/server/src/plugin-support/language-server/plugin.ts +8 -7
- package/apps/server/src/plugin-support/language-server/tools.ts +7 -6
- package/apps/server/src/plugin-support/model-aliases.ts +55 -25
- package/apps/server/src/plugin-support/product-relay.ts +10 -2
- package/apps/server/src/plugin-support/workspace-sandbox-host.ts +18 -9
- package/apps/server/src/profile/bundle-manifest.ts +7 -3
- package/apps/server/src/profile/compose.ts +6 -0
- package/apps/server/src/profile/plugin-discovery.ts +6 -1
- package/apps/server/src/profile/provisioning.ts +6 -5
- package/apps/server/src/ragents/engine.ts +0 -1
- package/apps/server/src/ragents/host-services.ts +4 -0
- package/apps/server/src/ragents/session.ts +1 -1
- package/apps/server/src/server.ts +1 -0
- package/apps/server/tsconfig.json +2 -0
- package/apps/web/dist/help/guide-clients.html +14 -6
- package/apps/web/dist/help/guide-clients.md +14 -6
- package/apps/web/dist/help/guide-distributed.html +12 -4
- package/apps/web/dist/help/guide-distributed.md +12 -4
- package/apps/web/dist/help/guide-getting-started.html +12 -8
- package/apps/web/dist/help/guide-getting-started.md +12 -8
- package/apps/web/dist/help/guide-plugins.html +6 -2
- package/apps/web/dist/help/guide-plugins.md +6 -2
- package/apps/web/dist/help/guide-runtime.html +2 -1
- package/apps/web/dist/help/guide-runtime.md +2 -1
- package/apps/web/dist/help/index.html +3328 -1135
- package/apps/web/dist/host-web.json +3 -3
- package/bundles/ragents.activity/ragents-bundle.json +3 -3
- package/bundles/ragents.actor-programs/ragents-bundle.json +3 -3
- package/bundles/ragents.ask/ragents-bundle.json +4 -4
- package/bundles/ragents.ask/server/index.js +42 -11
- package/bundles/ragents.ask/server/index.js.map +3 -3
- package/bundles/ragents.ask/web/chunks/chunk-WFN4374U.js +2 -0
- package/bundles/ragents.ask/web/chunks/chunk-WFN4374U.js.map +7 -0
- package/bundles/ragents.ask/web/classes.json +1 -1
- package/bundles/ragents.ask/web/exports/ask-payload.js +1 -1
- package/bundles/ragents.ask/web/index.js +1 -1
- package/bundles/ragents.ask/web/index.js.map +3 -3
- package/bundles/ragents.browser/executor/index.mjs +357 -0
- package/bundles/ragents.browser/executor/index.mjs.map +7 -0
- package/bundles/ragents.browser/ragents-bundle.json +5 -8
- package/bundles/ragents.browser/server/chunks/{chunk-2GKLLCBE.js → chunk-CWLX4VA5.js} +1 -1
- package/bundles/ragents.browser/server/chunks/chunk-CWLX4VA5.js.map +7 -0
- package/bundles/ragents.browser/server/exports/server/contract.js +1 -1
- package/bundles/ragents.browser/server/index.js +20 -9
- package/bundles/ragents.browser/server/index.js.map +4 -4
- package/bundles/ragents.documents/ragents-bundle.json +3 -3
- package/bundles/ragents.lsp-fsharp/executor/index.mjs +68 -0
- package/bundles/ragents.lsp-fsharp/executor/index.mjs.map +7 -0
- package/bundles/ragents.lsp-fsharp/ragents-bundle.json +5 -9
- package/bundles/ragents.lsp-fsharp/server/index.js +21 -6
- package/bundles/ragents.lsp-fsharp/server/index.js.map +4 -4
- package/bundles/ragents.lsp-roslyn/executor/index.mjs +68 -0
- package/bundles/ragents.lsp-roslyn/executor/index.mjs.map +7 -0
- package/bundles/ragents.lsp-roslyn/ragents-bundle.json +6 -8
- package/bundles/ragents.lsp-roslyn/server/index.js +54 -15
- package/bundles/ragents.lsp-roslyn/server/index.js.map +4 -4
- package/bundles/ragents.lsp-typescript/executor/index.mjs +49 -0
- package/bundles/ragents.lsp-typescript/executor/index.mjs.map +7 -0
- package/bundles/ragents.lsp-typescript/ragents-bundle.json +5 -7
- package/bundles/ragents.lsp-typescript/server/index.js +22 -2
- package/bundles/ragents.lsp-typescript/server/index.js.map +3 -3
- package/bundles/ragents.model-relay/ragents-bundle.json +4 -4
- package/bundles/ragents.model-relay/server/index.js +3 -2
- package/bundles/ragents.model-relay/server/index.js.map +2 -2
- package/bundles/ragents.orchestration/ragents-bundle.json +3 -3
- package/bundles/ragents.overseer/ragents-bundle.json +3 -3
- package/bundles/ragents.processes/ragents-bundle.json +3 -3
- package/bundles/ragents.product/ragents-bundle.json +3 -3
- package/bundles/ragents.profile-distribution/ragents-bundle.json +4 -4
- package/bundles/ragents.profile-distribution/server/index.js +1 -1
- package/bundles/ragents.profile-distribution/server/index.js.map +2 -2
- package/bundles/ragents.reference/ragents-bundle.json +3 -3
- package/bundles/ragents.todo/ragents-bundle.json +3 -3
- package/bundles/ragents.transcript/ragents-bundle.json +3 -3
- package/bundles/ragents.watch/ragents-bundle.json +3 -3
- package/bundles/ragents.workspace/ragents-bundle.json +11 -5
- package/bundles/ragents.workspace/server/index.js +101 -28
- package/bundles/ragents.workspace/server/index.js.map +3 -3
- package/bundles/ragents.workspace/web/classes.json +1 -1
- package/bundles/ragents.workspace/web/index.js +1 -1
- package/bundles/ragents.workspace/web/index.js.map +3 -3
- package/package.json +2 -2
- package/packages/agent/dist/core/agent-settings.d.ts +1 -7
- package/packages/agent/dist/core/compaction/compaction.d.ts +17 -13
- package/packages/agent/dist/core/model-runtime.d.ts +5 -4
- package/packages/agent/dist/core/provider-composer.d.ts +2 -1
- package/packages/agent/dist/core/tools/bash.d.ts +9 -3
- package/packages/agent/dist/index.d.ts +1 -1
- package/packages/agent/src/core/agent-settings.ts +1 -4
- package/packages/agent/src/core/compaction/compaction.ts +68 -30
- package/packages/agent/src/core/model-runtime.ts +12 -5
- package/packages/agent/src/core/provider-composer.ts +5 -0
- package/packages/agent/src/core/tools/bash.ts +36 -30
- package/packages/agent/src/index.ts +3 -0
- package/packages/ai/dist/types.d.ts +11 -0
- package/packages/ai/src/types.ts +12 -0
- package/packages/ragents/src/domain/event-semantics.ts +3 -0
- package/packages/ragents/src/domain/event-validation.ts +15 -2
- package/packages/ragents/src/domain/events.ts +3 -0
- package/packages/ragents/src/domain/model.ts +2 -0
- package/packages/ragents/src/domain/projection.ts +1 -0
- package/packages/ragents/src/drivers/agent-runtime.ts +1 -1
- package/packages/ragents/src/drivers/agent-turn.ts +8 -6
- package/packages/ragents/src/runtime/decisions/inputs.ts +6 -2
- package/packages/ragents/src/runtime/journal-storage.ts +5 -4
- package/packages/workspace-executor/package.json +0 -1
- package/packages/workspace-executor/src/bash-launch.ts +56 -10
- package/packages/workspace-executor/src/context.ts +4 -0
- package/packages/workspace-executor/src/contributions.ts +150 -0
- package/packages/workspace-executor/src/executor.ts +1 -1
- package/packages/workspace-executor/src/index.ts +16 -19
- package/packages/workspace-executor/src/language-server/host.ts +3 -0
- package/packages/workspace-executor/src/language-server/module.ts +12 -2
- package/packages/workspace-executor/src/language-server/roots.ts +0 -5
- package/packages/workspace-executor/src/modules.ts +7 -6
- package/packages/workspace-executor/src/sandbox-tools.ts +3 -9
- package/packages/workspace-executor/src/shell-platform.ts +14 -3
- package/packages/workspace-executor/src/tools.ts +0 -3
- package/plugins/ragents.ask/ask-payload.ts +9 -0
- package/plugins/ragents.ask/server/ask-service.ts +53 -13
- package/plugins/ragents.ask/web/AskActionView.tsx +3 -2
- package/plugins/ragents.browser/executor/index.ts +5 -0
- package/{packages/workspace-executor/src/browser → plugins/ragents.browser/executor}/module.ts +25 -31
- package/{packages/workspace-executor/src/browser → plugins/ragents.browser/executor}/playwright.ts +9 -23
- package/plugins/ragents.browser/provision.ts +1 -1
- package/plugins/ragents.browser/server/browser.ts +3 -3
- package/plugins/ragents.browser/server/contract.ts +2 -2
- package/plugins/ragents.browser/server/index.ts +1 -1
- package/plugins/ragents.lsp-fsharp/executor.ts +80 -0
- package/plugins/ragents.lsp-fsharp/provision.ts +1 -1
- package/plugins/ragents.lsp-fsharp/server/index.ts +2 -2
- package/plugins/ragents.lsp-roslyn/executor.ts +64 -0
- package/plugins/ragents.lsp-roslyn/provision.ts +1 -1
- package/plugins/ragents.lsp-roslyn/server/index.ts +28 -5
- package/plugins/ragents.lsp-roslyn/server/solution-on-start.ts +18 -6
- package/plugins/ragents.lsp-typescript/executor.ts +50 -0
- package/plugins/ragents.lsp-typescript/server/index.ts +2 -2
- package/plugins/ragents.model-relay/server/config.ts +1 -1
- package/plugins/ragents.model-relay/server/relay.ts +4 -2
- package/plugins/ragents.profile-distribution/server/archive.ts +2 -1
- package/plugins/ragents.workspace/client/workspace-client.ts +111 -28
- package/plugins/ragents.workspace/contract.ts +33 -2
- package/plugins/ragents.workspace/server/binding.ts +10 -4
- package/plugins/ragents.workspace/server/clients.ts +56 -9
- package/plugins/ragents.workspace/server/config.ts +9 -0
- package/plugins/ragents.workspace/server/index.ts +13 -4
- package/plugins/ragents.workspace/server/runtime.ts +10 -0
- package/plugins/ragents.workspace/server/shell-platform.ts +6 -5
- package/plugins/ragents.workspace/web/WorkspaceBinding.tsx +1 -1
- package/ragents.config.core.ts +4 -1
- package/ragents.config.showcase.ts +4 -1
- package/scripts/agent/journal.ts +3 -1
- package/scripts/package/build-package.ts +3 -1
- package/scripts/provision/run-provision.ts +2 -2
- package/scripts/workspace-client/run-workspace-client.ts +7 -4
- package/apps/web/dist/help/screenshots/release-checklist-vscode.png +0 -0
- package/apps/web/dist/help/screenshots/release-checklist-web.png +0 -0
- package/bundles/ragents.ask/web/chunks/chunk-HGFDGTNC.js +0 -2
- package/bundles/ragents.ask/web/chunks/chunk-HGFDGTNC.js.map +0 -7
- package/bundles/ragents.browser/server/chunks/chunk-2GKLLCBE.js.map +0 -7
- package/packages/workspace-executor/src/language-server/adapters/fsharp.ts +0 -60
- package/packages/workspace-executor/src/language-server/adapters/index.ts +0 -7
- package/packages/workspace-executor/src/language-server/adapters/roslyn.ts +0 -56
- package/packages/workspace-executor/src/language-server/adapters/typescript.ts +0 -74
- package/packages/workspace-executor/src/language-server/solution.ts +0 -13
- /package/{packages/workspace-executor/src/browser → plugins/ragents.browser/executor}/contract.ts +0 -0
- /package/{packages/workspace-executor/src/browser → plugins/ragents.browser/executor}/pages.ts +0 -0
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
2
|
import { existsSync, readdirSync, readFileSync, realpathSync, statSync } from "node:fs";
|
|
3
3
|
import path from "node:path";
|
|
4
|
+
import { EXECUTOR_CONTRIBUTION_FILE } from "@ragents/workspace-executor";
|
|
4
5
|
import { ragentsDataRoot } from "../data-directory.js";
|
|
5
6
|
import { filesBelow } from "../folder-install.js";
|
|
6
7
|
import { HOST_API_VERSION, type HostApiHalf } from "../host-api.js";
|
|
@@ -9,7 +10,7 @@ import { isCheckout } from "../host-web.js";
|
|
|
9
10
|
import { bundlesRoot, pluginIdOf } from "../plugin-support/plugins-root.js";
|
|
10
11
|
|
|
11
12
|
export const BUNDLE_MANIFEST_FILE = "ragents-bundle.json";
|
|
12
|
-
export const BUNDLE_FORMAT =
|
|
13
|
+
export const BUNDLE_FORMAT = 4;
|
|
13
14
|
|
|
14
15
|
/** The value names a half imports from each module of the host API. */
|
|
15
16
|
export type HostNames = Readonly<Record<string, readonly string[]>>;
|
|
@@ -27,12 +28,14 @@ export interface BundleManifest {
|
|
|
27
28
|
readonly sourceStand: string;
|
|
28
29
|
readonly server: string;
|
|
29
30
|
readonly web?: { readonly entry: string; readonly css?: string; readonly classes: string };
|
|
31
|
+
/** The contribution to every executor, a self-contained file that any Node process loads. */
|
|
32
|
+
readonly executor?: typeof EXECUTOR_CONTRIBUTION_FILE;
|
|
30
33
|
readonly exports: Readonly<Record<HostApiHalf, Readonly<Record<string, string>>>>;
|
|
31
34
|
readonly uses: readonly string[];
|
|
32
35
|
readonly assets: readonly string[];
|
|
33
36
|
}
|
|
34
37
|
|
|
35
|
-
const MANIFEST_KEYS = new Set(["format", "id", "api", "hostNames", "stand", "sourceStand", "server", "web", "exports", "uses", "assets"]);
|
|
38
|
+
const MANIFEST_KEYS = new Set(["format", "id", "api", "hostNames", "stand", "sourceStand", "server", "web", "executor", "exports", "uses", "assets"]);
|
|
36
39
|
const SOURCE_MARKERS = ["ragents-plugin.json", "server/index.ts", "server/index.tsx"];
|
|
37
40
|
|
|
38
41
|
const isRecord = (value: unknown): value is Record<string, unknown> =>
|
|
@@ -167,6 +170,7 @@ export const readBundleManifest = (folder: string): BundleManifest => {
|
|
|
167
170
|
...(typeof raw.sourceStand === "string" ? [] : ["sourceStand"]),
|
|
168
171
|
...(typeof raw.server === "string" ? [] : ["server"]),
|
|
169
172
|
...(isWeb(raw.web) ? [] : ["web"]),
|
|
173
|
+
...(raw.executor === undefined || raw.executor === EXECUTOR_CONTRIBUTION_FILE ? [] : ["executor"]),
|
|
170
174
|
...(isRecord(raw.exports) && isPathRecord(raw.exports.server) && isPathRecord(raw.exports.web) ? [] : ["exports"]),
|
|
171
175
|
...(isStringList(raw.uses) ? [] : ["uses"]),
|
|
172
176
|
...(isStringList(raw.assets) ? [] : ["assets"]),
|
|
@@ -176,7 +180,7 @@ export const readBundleManifest = (folder: string): BundleManifest => {
|
|
|
176
180
|
const webFiles = web === undefined ? [] : [web.entry, web.classes, ...(web.css === undefined ? [] : [web.css])];
|
|
177
181
|
const misplaced = webFiles.filter((entry) => !entry.startsWith("web/") || entry.split("/").includes(".."));
|
|
178
182
|
if (misplaced.length > 0) throw new Error(`${file}: ${misplaced.join(", ")} liegt nicht unter web/; ${rebuildHint(folder)}`);
|
|
179
|
-
for (const required of [raw.server as string, ...webFiles]) {
|
|
183
|
+
for (const required of [raw.server as string, ...webFiles, ...(raw.executor === undefined ? [] : [EXECUTOR_CONTRIBUTION_FILE])]) {
|
|
180
184
|
if (!statSync(path.join(folder, required), { throwIfNoEntry: false })?.isFile()) throw new Error(`Dem Bundle ${id} fehlt ${required}; ${rebuildHint(folder)}`);
|
|
181
185
|
}
|
|
182
186
|
return raw as unknown as BundleManifest;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { PluginHost, type PluginWebAddresses } from "@ragents/engine";
|
|
2
|
+
import { pluginToolsDirectory, prepareExecutorContribution, type LoadedExecutorContribution } from "@ragents/workspace-executor";
|
|
2
3
|
import { config, HOST_SECRET_ENV_NAMES } from "../config.js";
|
|
3
4
|
import { SESSION_MODE, SESSIONS_MODE } from "../layout.js";
|
|
4
5
|
import { withFolderAssets } from "../plugin-support/plugin-folder.js";
|
|
@@ -6,6 +7,7 @@ import type { PluginModule } from "../plugin-support/plugin-module.js";
|
|
|
6
7
|
import { runManagementToken } from "../ragents/global-chat.js";
|
|
7
8
|
import { registerTypeScriptFunctions } from "../ragents/typescript-tools.js";
|
|
8
9
|
import {
|
|
10
|
+
executorContributionsToken,
|
|
9
11
|
hostAddressToken,
|
|
10
12
|
runtimeProviderToken,
|
|
11
13
|
secretEnvNamesToken,
|
|
@@ -27,6 +29,8 @@ export interface ProfileComposition {
|
|
|
27
29
|
readonly modules: ReadonlyMap<string, PluginModule>;
|
|
28
30
|
/** The plugins with a web half and where the browser loads it; the web loads exactly these. */
|
|
29
31
|
readonly web: ReadonlyMap<string, PluginWebAddresses>;
|
|
32
|
+
/** Die Beiträge der Bundles zum Executor; der Server baut sie mit den Werkzeugordnern seines Datenordners. */
|
|
33
|
+
readonly executor: readonly LoadedExecutorContribution[];
|
|
30
34
|
/** Die Vorlage aus defaultStartEntry der Profildatei; der Host lehnt eine nicht registrierte beim Versiegeln ab. */
|
|
31
35
|
readonly defaultStartEntry?: string;
|
|
32
36
|
}
|
|
@@ -43,6 +47,8 @@ export const composeProfile = (options: ProfileComposition, bridges: HostBridges
|
|
|
43
47
|
host.provideHost(runWorkspaceProviderToken, bridges.sessionWorkspaceFor);
|
|
44
48
|
host.provideHost(runtimeProviderToken, bridges.runtime);
|
|
45
49
|
host.provideHost(hostAddressToken, () => bridges.apiBaseUrl);
|
|
50
|
+
host.provideHost(executorContributionsToken, options.executor.map((loaded) =>
|
|
51
|
+
prepareExecutorContribution(loaded, pluginToolsDirectory(config.dataDir, loaded.plugin))));
|
|
46
52
|
host.provideHost(runManagementToken, () => {
|
|
47
53
|
if (!bridges.sessions) throw new Error("Der Host stellt keine Sitzungsverwaltung bereit");
|
|
48
54
|
return bridges.sessions();
|
|
@@ -2,6 +2,7 @@ import { existsSync, readdirSync, realpathSync, statSync } from "node:fs";
|
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { pathToFileURL } from "node:url";
|
|
4
4
|
import type { PluginWebAddresses } from "@ragents/engine";
|
|
5
|
+
import { loadExecutorContribution, type LoadedExecutorContribution } from "@ragents/workspace-executor";
|
|
5
6
|
import { announceBundles } from "../host-resolution.js";
|
|
6
7
|
import { checkedHostApiRecord } from "../host-version.js";
|
|
7
8
|
import { isPluginModule, type PluginModule } from "../plugin-support/plugin-module.js";
|
|
@@ -133,6 +134,8 @@ export interface LoadedPlugins {
|
|
|
133
134
|
readonly bundles: readonly ResolvedPlugin[];
|
|
134
135
|
/** The plugins whose bundle carries a web half, with the addresses the browser loads it from. */
|
|
135
136
|
readonly web: ReadonlyMap<string, PluginWebAddresses>;
|
|
137
|
+
/** The contributions to every executor, in the order of the plugin list; each machine builds them for itself. */
|
|
138
|
+
readonly executor: readonly LoadedExecutorContribution[];
|
|
136
139
|
}
|
|
137
140
|
|
|
138
141
|
export const loadPlugins = async (
|
|
@@ -160,5 +163,7 @@ export const loadPlugins = async (
|
|
|
160
163
|
const addresses = webAddressesOf(plugin);
|
|
161
164
|
return addresses === undefined ? [] : [[plugin.id, addresses] as const];
|
|
162
165
|
}));
|
|
163
|
-
|
|
166
|
+
const executor = await Promise.all(plugins.flatMap((plugin) => plugin.manifest.executor === undefined ? []
|
|
167
|
+
: [loadExecutorContribution(plugin.id, path.join(plugin.folder, plugin.manifest.executor))]));
|
|
168
|
+
return { known, ids, modules, bundles: plugins, web, executor };
|
|
164
169
|
};
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
import { mkdir } from "node:fs/promises";
|
|
2
2
|
import { hostDataDirectory, pluginToolsDirectory } from "@ragents/workspace-executor/src/tools.ts";
|
|
3
3
|
import { isPluginProvision, type PluginProvision } from "../plugin-support/provision.js";
|
|
4
|
-
import { importBundles, resolvePluginEntries, type ResolvedPlugin } from "./plugin-discovery.js";
|
|
5
|
-
|
|
6
|
-
/** Die Plugins, deren Werkzeuge jeder Arbeitsplatz-Executor auf seiner Maschine braucht: Sprachserver und Browser. */
|
|
7
|
-
export const WORKSPACE_PROVISION_PLUGINS = ["ragents.lsp-roslyn", "ragents.lsp-fsharp", "ragents.browser"] as const;
|
|
4
|
+
import { discoverPluginIds, importBundles, resolvePluginEntries, type ResolvedPlugin } from "./plugin-discovery.js";
|
|
8
5
|
|
|
9
6
|
/** The provisioning a bundle exports next to its plugin, if it brings one. */
|
|
10
7
|
const provisionOf = (plugin: ResolvedPlugin, exported: Readonly<Record<string, unknown>>): PluginProvision | undefined => {
|
|
@@ -81,5 +78,9 @@ const withUsedBundles = (ids: readonly string[]): readonly ResolvedPlugin[] => {
|
|
|
81
78
|
return [...resolved.values()];
|
|
82
79
|
};
|
|
83
80
|
|
|
81
|
+
/** Ein Arbeitsplatz hat kein Profil; er provisioniert die eingebauten Plugins seines Hosts, die zum Executor beitragen, denn deren Werkzeuge laufen auf ihm. */
|
|
82
|
+
export const workspaceProvisionPlugins = (): readonly ResolvedPlugin[] => withUsedBundles(
|
|
83
|
+
resolvePluginEntries(discoverPluginIds()).filter((plugin) => plugin.manifest.executor !== undefined).map((plugin) => plugin.id));
|
|
84
|
+
|
|
84
85
|
export const provisionWorkspace = (log: (line: string) => void): Promise<readonly PluginProvisionReport[]> =>
|
|
85
|
-
provisionPlugins(
|
|
86
|
+
provisionPlugins(workspaceProvisionPlugins(), hostDataDirectory(), log);
|
|
@@ -206,7 +206,6 @@ export const createEngine = async (options: EngineOptions): Promise<Engine> => {
|
|
|
206
206
|
resolveSkills: async (context) => globalChat?.isCoordinator(context.runId) ? []
|
|
207
207
|
: (await options.plugins.skills.resolve(contributionContextFor(context))).map(skillOfDirectory),
|
|
208
208
|
resolveHooks: (context) => globalChat?.isCoordinator(context.runId) ? [] : options.plugins.agentRuntime.resolve(contributionContextFor(context)),
|
|
209
|
-
settings: { compaction: config.agentCompaction },
|
|
210
209
|
});
|
|
211
210
|
const configuredModels = await Promise.all(options.plugins.profiles.models().map(async (model) => {
|
|
212
211
|
if (model.driver !== "agent") return model;
|
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
type PluginHost,
|
|
6
6
|
type ServiceToken,
|
|
7
7
|
} from "@ragents/engine";
|
|
8
|
+
import type { PreparedExecutorContribution } from "@ragents/workspace-executor";
|
|
8
9
|
import type { SessionWorkspace } from "./workspace-runtime.js";
|
|
9
10
|
import type { RunManagement } from "./global-chat.js";
|
|
10
11
|
|
|
@@ -23,6 +24,9 @@ export const runtimeProviderToken: ServiceToken<() => Orchestration> = serviceTo
|
|
|
23
24
|
/** Die Adresse, unter der dieser Server seine API anbietet, etwa http://127.0.0.1:4710; ohne HTTP (nur stdio) keine. */
|
|
24
25
|
export const hostAddressToken: ServiceToken<() => string | undefined> = serviceToken("host.address");
|
|
25
26
|
|
|
27
|
+
/** Die Beiträge der Bundles dieses Profils zum Executor, gebaut für den Server; jeder Executor des Servers trägt sie, jeder Arbeitsplatz dieselben. */
|
|
28
|
+
export const executorContributionsToken: ServiceToken<readonly PreparedExecutorContribution[]> = serviceToken("host.executor-contributions");
|
|
29
|
+
|
|
26
30
|
export interface HostBridges {
|
|
27
31
|
ensureSession: (runId: string) => void;
|
|
28
32
|
ensureWorkspaceAccess: (access: AccessContext, runId: string) => void;
|
|
@@ -464,7 +464,7 @@ export class RunChatSession implements ChatSessionLike {
|
|
|
464
464
|
this.#engine.runtime.enqueueInput(
|
|
465
465
|
{ actorId: state.ownerId, commandId: `chat:${randomUUID()}` },
|
|
466
466
|
this.id,
|
|
467
|
-
{ actorId: primaryActorId, content: text, artifactIds, sourceEventIds },
|
|
467
|
+
{ actorId: primaryActorId, content: text, artifactIds, sourceEventIds, origin: "human" },
|
|
468
468
|
);
|
|
469
469
|
}
|
|
470
470
|
|
|
@@ -204,11 +204,14 @@ a checkout. <code>ragents.hostPath</code> remains an override pointing to a chec
|
|
|
204
204
|
The status bar shows the number of connected servers and opens the start page when clicked. See
|
|
205
205
|
the root <code>README.md</code> for details.</p>
|
|
206
206
|
<p>Install the extension from the Marketplace as <code>purestate.ragents-vscode</code> using "Extensions:
|
|
207
|
-
Install Extension" or <code>code --install-extension purestate.ragents-vscode</code>.
|
|
208
|
-
|
|
209
|
-
<
|
|
210
|
-
|
|
211
|
-
|
|
207
|
+
Install Extension" or <code>code --install-extension purestate.ragents-vscode</code>. The Marketplace
|
|
208
|
+
delivers the build for your platform, which carries ripgrep for the <code>bash</code> tool (see
|
|
209
|
+
<a href="guide-distributed.html#work-on-windows">Work on Windows</a> for the Windows bash). To install a locally
|
|
210
|
+
packaged file, run <code>pnpm package:vscode</code>, which builds the universal
|
|
211
|
+
<code>dist/ragents-vscode-<version>.vsix</code> and one <code>dist/ragents-vscode-<platform>-<version>.vsix</code> per
|
|
212
|
+
platform, such as <code>darwin-arm64</code>, then use "Extensions: Install from VSIX" or
|
|
213
|
+
<code>code --install-extension dist/ragents-vscode-darwin-arm64-<version>.vsix --force</code>. <code>scripts/vscode/install-local.sh</code>
|
|
214
|
+
performs both steps with the file for this machine, rebuilds the built-in plugins, and
|
|
212
215
|
rebuilds the web interface if it no longer matches its sources, so that hosts from this checkout
|
|
213
216
|
start again. The script then restarts manually launched
|
|
214
217
|
servers (<code>scripts/start.sh</code>, identified by <code>RAGENTS_LAUNCH=start.sh</code> in their environment, with logs under
|
|
@@ -263,7 +266,12 @@ server has locked, for example because its journal uses an older format, shows a
|
|
|
263
266
|
tooltip names the cause; it does not open, but the selection mode deletes it.</p>
|
|
264
267
|
<p><strong>Server</strong> is the configuration page. You can add, edit, sign in, sign out, connect,
|
|
265
268
|
disconnect, and remove servers with confirmation, then open <code>settings.json</code> from the link
|
|
266
|
-
at the bottom
|
|
269
|
+
at the bottom. If a connected server does not accept this window's folders as a workstation, its
|
|
270
|
+
entry says "Arbeitsplatz nicht angemeldet" (workstation not registered) with the cause. When the
|
|
271
|
+
extension and the server carry different workspace executor versions, the cause names both and
|
|
272
|
+
what to update: the extension if it is older, the server if it is newer. The same applies when the
|
|
273
|
+
host the extension uses lacks a plugin bundle the server's executor carries, such as a language
|
|
274
|
+
server, or carries it in another version: the cause names the plugin and the host to update.</p>
|
|
267
275
|
<p>Every status uses a colored icon and a tooltip with the same vocabulary everywhere. A run is
|
|
268
276
|
"läuft" (running), "wartet auf Eingabe" (waiting for input, with the number of open inputs),
|
|
269
277
|
"ruht" (idle), "beendet" (ended), "fehlgeschlagen" (failed), or "abgebrochen" (cancelled). A
|
|
@@ -84,11 +84,14 @@ The status bar shows the number of connected servers and opens the start page wh
|
|
|
84
84
|
the root `README.md` for details.
|
|
85
85
|
|
|
86
86
|
Install the extension from the Marketplace as `purestate.ragents-vscode` using "Extensions:
|
|
87
|
-
Install Extension" or `code --install-extension purestate.ragents-vscode`.
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
`
|
|
91
|
-
|
|
87
|
+
Install Extension" or `code --install-extension purestate.ragents-vscode`. The Marketplace
|
|
88
|
+
delivers the build for your platform, which carries ripgrep for the `bash` tool (see
|
|
89
|
+
[Work on Windows](guide-distributed.html#work-on-windows) for the Windows bash). To install a locally
|
|
90
|
+
packaged file, run `pnpm package:vscode`, which builds the universal
|
|
91
|
+
`dist/ragents-vscode-<version>.vsix` and one `dist/ragents-vscode-<platform>-<version>.vsix` per
|
|
92
|
+
platform, such as `darwin-arm64`, then use "Extensions: Install from VSIX" or
|
|
93
|
+
`code --install-extension dist/ragents-vscode-darwin-arm64-<version>.vsix --force`. `scripts/vscode/install-local.sh`
|
|
94
|
+
performs both steps with the file for this machine, rebuilds the built-in plugins, and
|
|
92
95
|
rebuilds the web interface if it no longer matches its sources, so that hosts from this checkout
|
|
93
96
|
start again. The script then restarts manually launched
|
|
94
97
|
servers (`scripts/start.sh`, identified by `RAGENTS_LAUNCH=start.sh` in their environment, with logs under
|
|
@@ -150,7 +153,12 @@ tooltip names the cause; it does not open, but the selection mode deletes it.
|
|
|
150
153
|
|
|
151
154
|
**Server** is the configuration page. You can add, edit, sign in, sign out, connect,
|
|
152
155
|
disconnect, and remove servers with confirmation, then open `settings.json` from the link
|
|
153
|
-
at the bottom.
|
|
156
|
+
at the bottom. If a connected server does not accept this window's folders as a workstation, its
|
|
157
|
+
entry says "Arbeitsplatz nicht angemeldet" (workstation not registered) with the cause. When the
|
|
158
|
+
extension and the server carry different workspace executor versions, the cause names both and
|
|
159
|
+
what to update: the extension if it is older, the server if it is newer. The same applies when the
|
|
160
|
+
host the extension uses lacks a plugin bundle the server's executor carries, such as a language
|
|
161
|
+
server, or carries it in another version: the cause names the plugin and the host to update.
|
|
154
162
|
|
|
155
163
|
Every status uses a colored icon and a tooltip with the same vocabulary everywhere. A run is
|
|
156
164
|
"läuft" (running), "wartet auf Eingabe" (waiting for input, with the number of open inputs),
|
|
@@ -287,9 +287,14 @@ After transfer, inspect the journal with <code>pnpm driver journal <runId>
|
|
|
287
287
|
<li><strong>The VS Code extension for Windows</strong> brings its own bash. The Marketplace delivers a
|
|
288
288
|
<code>win32-x64</code> or <code>win32-arm64</code> build that contains a slim bash with the GNU tools (coreutils,
|
|
289
289
|
<code>grep</code>, <code>sed</code>, <code>awk</code>, <code>find</code>, <code>diff</code>, <code>patch</code>, <code>tar</code>, <code>unzip</code>, <code>cygpath</code> and more), taken from
|
|
290
|
-
a fixed Git for Windows release
|
|
291
|
-
|
|
292
|
-
<code>cmd.exe</code> are not used either.</li>
|
|
290
|
+
a fixed Git for Windows release, plus <code>rg.exe</code> (ripgrep) from a fixed ripgrep release. The
|
|
291
|
+
<code>bash</code> tool uses only this bash, for the workspace and for the local host; an installed Git
|
|
292
|
+
Bash or a <code>bash.exe</code> on <code>PATH</code> is never used. PowerShell and <code>cmd.exe</code> are not used either.</li>
|
|
293
|
+
<li><strong>Code search</strong> runs through <code>rg</code>, which skips <code>node_modules</code>, <code>bin</code>, <code>obj</code> and everything else
|
|
294
|
+
<code>.gitignore</code> excludes. The extension builds for macOS and Linux carry <code>rg</code> as well and put it at
|
|
295
|
+
the front of the <code>bash</code> tool's <code>PATH</code>, on the workstation and for the local host. The system
|
|
296
|
+
prompt tells the model to search with <code>rg</code> only when the machine running <code>bash</code> has one;
|
|
297
|
+
otherwise it tells the model to exclude dependency and build folders from <code>grep -r</code>.</li>
|
|
293
298
|
<li><strong>Git</strong> is your own <code>git.exe</code> on <code>PATH</code>, for example from Git for Windows. The bundled bash
|
|
294
299
|
contains no git, so your login works as usual: Git Credential Manager, <code>~/.gitconfig</code> and
|
|
295
300
|
<code>~/.ssh</code>. On your own machine the bash inherits your whole environment, except the variables of
|
|
@@ -297,7 +302,10 @@ VS Code itself and <code>BASH_ENV</code>/<code>ENV</code>.</li>
|
|
|
297
302
|
<li><strong>Without the extension</strong> (<code>ragents start</code> or <code>ragents workspace-client</code> from the npm package)
|
|
298
303
|
set <code>RAGENTS_BASH</code> to the <code>bash.exe</code> of such a bundle, for example
|
|
299
304
|
<code><extension folder>\dist\bash\win32-x64\usr\bin\bash.exe</code>. Without it every <code>bash</code> call fails
|
|
300
|
-
and names what is missing
|
|
305
|
+
and names what is missing. <code>RAGENTS_RG</code> names an <code>rg</code> in the same way, for example
|
|
306
|
+
<code><extension folder>\dist\rg\win32-x64\rg.exe</code>, on every platform; without it, an <code>rg</code> on
|
|
307
|
+
<code>PATH</code> is used if there is one. A <code>RAGENTS_RG</code> that points to a missing file stops the server
|
|
308
|
+
start or the workstation's registration.</li>
|
|
301
309
|
<li><strong>Node.js</strong> is enough with <code>@schlenkr/ragents</code>. A checkout additionally needs <strong>pnpm</strong>, and
|
|
302
310
|
<code>pnpm install</code>, <code>pnpm build:agent</code>, and <code>scripts/start.sh</code> need a bash of your own, such as
|
|
303
311
|
Git Bash.</li>
|
|
@@ -191,9 +191,14 @@ The local host and workspace also run on Windows. Requirements are:
|
|
|
191
191
|
- **The VS Code extension for Windows** brings its own bash. The Marketplace delivers a
|
|
192
192
|
`win32-x64` or `win32-arm64` build that contains a slim bash with the GNU tools (coreutils,
|
|
193
193
|
`grep`, `sed`, `awk`, `find`, `diff`, `patch`, `tar`, `unzip`, `cygpath` and more), taken from
|
|
194
|
-
a fixed Git for Windows release
|
|
195
|
-
|
|
196
|
-
`cmd.exe` are not used either.
|
|
194
|
+
a fixed Git for Windows release, plus `rg.exe` (ripgrep) from a fixed ripgrep release. The
|
|
195
|
+
`bash` tool uses only this bash, for the workspace and for the local host; an installed Git
|
|
196
|
+
Bash or a `bash.exe` on `PATH` is never used. PowerShell and `cmd.exe` are not used either.
|
|
197
|
+
- **Code search** runs through `rg`, which skips `node_modules`, `bin`, `obj` and everything else
|
|
198
|
+
`.gitignore` excludes. The extension builds for macOS and Linux carry `rg` as well and put it at
|
|
199
|
+
the front of the `bash` tool's `PATH`, on the workstation and for the local host. The system
|
|
200
|
+
prompt tells the model to search with `rg` only when the machine running `bash` has one;
|
|
201
|
+
otherwise it tells the model to exclude dependency and build folders from `grep -r`.
|
|
197
202
|
- **Git** is your own `git.exe` on `PATH`, for example from Git for Windows. The bundled bash
|
|
198
203
|
contains no git, so your login works as usual: Git Credential Manager, `~/.gitconfig` and
|
|
199
204
|
`~/.ssh`. On your own machine the bash inherits your whole environment, except the variables of
|
|
@@ -201,7 +206,10 @@ The local host and workspace also run on Windows. Requirements are:
|
|
|
201
206
|
- **Without the extension** (`ragents start` or `ragents workspace-client` from the npm package)
|
|
202
207
|
set `RAGENTS_BASH` to the `bash.exe` of such a bundle, for example
|
|
203
208
|
`<extension folder>\dist\bash\win32-x64\usr\bin\bash.exe`. Without it every `bash` call fails
|
|
204
|
-
and names what is missing.
|
|
209
|
+
and names what is missing. `RAGENTS_RG` names an `rg` in the same way, for example
|
|
210
|
+
`<extension folder>\dist\rg\win32-x64\rg.exe`, on every platform; without it, an `rg` on
|
|
211
|
+
`PATH` is used if there is one. A `RAGENTS_RG` that points to a missing file stops the server
|
|
212
|
+
start or the workstation's registration.
|
|
205
213
|
- **Node.js** is enough with `@schlenkr/ragents`. A checkout additionally needs **pnpm**, and
|
|
206
214
|
`pnpm install`, `pnpm build:agent`, and `scripts/start.sh` need a bash of your own, such as
|
|
207
215
|
Git Bash.
|
|
@@ -156,15 +156,19 @@ that exact environment variable. Startup fails if it is missing. Existing enviro
|
|
|
156
156
|
take precedence over profile values; no <code>.env</code> file is loaded. Startup reports a missing
|
|
157
157
|
referenced variable as an error. Configured models and reasoning levels must be valid in the
|
|
158
158
|
available model catalog.</p>
|
|
159
|
-
<p>A profile can also name its models by alias: <code>MODEL_ALIASES</code> in the <code>host</code> section lists
|
|
160
|
-
<code>alias
|
|
161
|
-
|
|
159
|
+
<p>A profile can also name its models by alias: <code>MODEL_ALIASES</code> in the <code>host</code> section lists objects
|
|
160
|
+
with <code>alias</code>, <code>model</code> as <code>provider/model</code>, an optional default <code>thinking</code> level, and the model's
|
|
161
|
+
<code>compaction</code> values: the context size in tokens at which an agent compacts (<code>threshold</code>), how much
|
|
162
|
+
recent context stays verbatim (<code>keepRecentTokens</code>), and the summary budget (<code>summaryTokens</code>).
|
|
163
|
+
<code>AGENT_PROVIDER: "alias"</code> makes the product use them. The interface, the chat, and the journal then
|
|
164
|
+
show only the alias names.</p>
|
|
162
165
|
<p>Alternatively, a profile can obtain its models from another RAgents server running the
|
|
163
|
-
<code>ragents.model-relay</code> plugin, which offers that server's <code>MODEL_ALIASES</code
|
|
164
|
-
<code>AGENT_PROVIDER: "relay"</code>, point <code>RELAY_URL</code> to that server, use
|
|
165
|
-
user's personal token there, and use relay aliases for every model
|
|
166
|
-
see which model is behind an alias. Its log at
|
|
167
|
-
user, alias, target, and token count for each
|
|
166
|
+
<code>ragents.model-relay</code> plugin, which offers that server's <code>MODEL_ALIASES</code> with their compaction
|
|
167
|
+
values: set <code>AGENT_PROVIDER: "relay"</code>, point <code>RELAY_URL</code> to that server, use
|
|
168
|
+
<code>RELAY_TOKEN: env("...")</code> with a user's personal token there, and use relay aliases for every model
|
|
169
|
+
key. Only the relay server can see which model is behind an alias. Its log at
|
|
170
|
+
<code>plugins/ragents.model-relay/relay.log</code> records the user, alias, target, and token count for each
|
|
171
|
+
request.</p>
|
|
168
172
|
<p>Then start the neutral profile:</p>
|
|
169
173
|
<pre><code class="language-sh">scripts/start.sh core
|
|
170
174
|
</code></pre>
|
|
@@ -35,16 +35,20 @@ take precedence over profile values; no `.env` file is loaded. Startup reports a
|
|
|
35
35
|
referenced variable as an error. Configured models and reasoning levels must be valid in the
|
|
36
36
|
available model catalog.
|
|
37
37
|
|
|
38
|
-
A profile can also name its models by alias: `MODEL_ALIASES` in the `host` section lists
|
|
39
|
-
`alias
|
|
40
|
-
|
|
38
|
+
A profile can also name its models by alias: `MODEL_ALIASES` in the `host` section lists objects
|
|
39
|
+
with `alias`, `model` as `provider/model`, an optional default `thinking` level, and the model's
|
|
40
|
+
`compaction` values: the context size in tokens at which an agent compacts (`threshold`), how much
|
|
41
|
+
recent context stays verbatim (`keepRecentTokens`), and the summary budget (`summaryTokens`).
|
|
42
|
+
`AGENT_PROVIDER: "alias"` makes the product use them. The interface, the chat, and the journal then
|
|
43
|
+
show only the alias names.
|
|
41
44
|
|
|
42
45
|
Alternatively, a profile can obtain its models from another RAgents server running the
|
|
43
|
-
`ragents.model-relay` plugin, which offers that server's `MODEL_ALIASES
|
|
44
|
-
`AGENT_PROVIDER: "relay"`, point `RELAY_URL` to that server, use
|
|
45
|
-
user's personal token there, and use relay aliases for every model
|
|
46
|
-
see which model is behind an alias. Its log at
|
|
47
|
-
user, alias, target, and token count for each
|
|
46
|
+
`ragents.model-relay` plugin, which offers that server's `MODEL_ALIASES` with their compaction
|
|
47
|
+
values: set `AGENT_PROVIDER: "relay"`, point `RELAY_URL` to that server, use
|
|
48
|
+
`RELAY_TOKEN: env("...")` with a user's personal token there, and use relay aliases for every model
|
|
49
|
+
key. Only the relay server can see which model is behind an alias. Its log at
|
|
50
|
+
`plugins/ragents.model-relay/relay.log` records the user, alias, target, and token count for each
|
|
51
|
+
request.
|
|
48
52
|
|
|
49
53
|
Then start the neutral profile:
|
|
50
54
|
|
|
@@ -312,6 +312,7 @@ the built-in plugins live under <code>plugins/<id>/</code>:</p>
|
|
|
312
312
|
contract.ts import-free contract shared by both halves, when present
|
|
313
313
|
prompt.hbs assets at the plugin root, alongside prompts/, skills/,
|
|
314
314
|
run-scripts/, provision.ts
|
|
315
|
+
executor.ts contribution to the workspace executor, when present
|
|
315
316
|
</code></pre>
|
|
316
317
|
<p><code>server/index.ts</code> exports exactly one entry point:</p>
|
|
317
318
|
<pre><code class="language-ts">export const plugin: PluginModule = {
|
|
@@ -379,7 +380,8 @@ loads plugin sources; it loads finished bundles, and the author builds them. The
|
|
|
379
380
|
<code>@schlenkr/ragents</code> carries everything this needs, so an empty folder and the package are enough.</p>
|
|
380
381
|
<p><strong>Source folder.</strong> One folder per plugin, named after its ID, such as <code>acme.tickets</code>. It holds
|
|
381
382
|
<code>ragents-plugin.json</code>, <code>server/index.ts</code> exporting <code>plugin</code>, optionally <code>provision.ts</code> for tools the
|
|
382
|
-
plugin installs
|
|
383
|
+
plugin installs and <code>executor.ts</code> for work that runs on the machine of a workspace, such as a
|
|
384
|
+
language server, <code>web/index.tsx</code> exporting <code>webPlugin</code> when there is an interface, and assets such
|
|
383
385
|
as <code>prompt.hbs</code>, <code>prompts/</code>, <code>skills/</code>, and <code>run-scripts/</code> at the root. <code>ragents-plugin.json</code>
|
|
384
386
|
names the ID, the files other plugins may import (per half, as paths without extension), and
|
|
385
387
|
additional assets that go into the bundle:</p>
|
|
@@ -422,7 +424,9 @@ so does a host with the same number that lacks one of the names, as an older hos
|
|
|
422
424
|
changes only when the host API changes incompatibly, not with every host release.</p>
|
|
423
425
|
<p><strong>Ship.</strong> A bundle is a plain folder without <code>node_modules</code> or native binaries and runs wherever a
|
|
424
426
|
host offers the same host API with the names it uses. Native tools such as language servers come through the plugin's
|
|
425
|
-
provisioning.
|
|
427
|
+
provisioning. The contribution to the workspace executor becomes one self-contained file that
|
|
428
|
+
imports only Node modules, so every machine can load it, the VS Code extension included; a
|
|
429
|
+
workstation loads it from the bundles of its own host, in exactly the version the server uses. To hand a profile together with its bundles to other machines, a server adds
|
|
426
430
|
<code>ragents.profile-distribution</code>; <code>ragents connect</code> fetches the profile and its bundles and starts
|
|
427
431
|
them with the local host (<a href="guide-distributed.html">Distributed work</a>). The client
|
|
428
432
|
profile names such bundles relative to itself (<code>./</code> or <code>../</code>); the client resolves an absolute or
|
|
@@ -174,6 +174,7 @@ plugins/ragents.actor-programs/
|
|
|
174
174
|
contract.ts import-free contract shared by both halves, when present
|
|
175
175
|
prompt.hbs assets at the plugin root, alongside prompts/, skills/,
|
|
176
176
|
run-scripts/, provision.ts
|
|
177
|
+
executor.ts contribution to the workspace executor, when present
|
|
177
178
|
```
|
|
178
179
|
|
|
179
180
|
`server/index.ts` exports exactly one entry point:
|
|
@@ -257,7 +258,8 @@ loads plugin sources; it loads finished bundles, and the author builds them. The
|
|
|
257
258
|
|
|
258
259
|
**Source folder.** One folder per plugin, named after its ID, such as `acme.tickets`. It holds
|
|
259
260
|
`ragents-plugin.json`, `server/index.ts` exporting `plugin`, optionally `provision.ts` for tools the
|
|
260
|
-
plugin installs
|
|
261
|
+
plugin installs and `executor.ts` for work that runs on the machine of a workspace, such as a
|
|
262
|
+
language server, `web/index.tsx` exporting `webPlugin` when there is an interface, and assets such
|
|
261
263
|
as `prompt.hbs`, `prompts/`, `skills/`, and `run-scripts/` at the root. `ragents-plugin.json`
|
|
262
264
|
names the ID, the files other plugins may import (per half, as paths without extension), and
|
|
263
265
|
additional assets that go into the bundle:
|
|
@@ -310,7 +312,9 @@ changes only when the host API changes incompatibly, not with every host release
|
|
|
310
312
|
|
|
311
313
|
**Ship.** A bundle is a plain folder without `node_modules` or native binaries and runs wherever a
|
|
312
314
|
host offers the same host API with the names it uses. Native tools such as language servers come through the plugin's
|
|
313
|
-
provisioning.
|
|
315
|
+
provisioning. The contribution to the workspace executor becomes one self-contained file that
|
|
316
|
+
imports only Node modules, so every machine can load it, the VS Code extension included; a
|
|
317
|
+
workstation loads it from the bundles of its own host, in exactly the version the server uses. To hand a profile together with its bundles to other machines, a server adds
|
|
314
318
|
`ragents.profile-distribution`; `ragents connect` fetches the profile and its bundles and starts
|
|
315
319
|
them with the local host ([Distributed work](guide-distributed.html)). The client
|
|
316
320
|
profile names such bundles relative to itself (`./` or `../`); the client resolves an absolute or
|
|
@@ -200,7 +200,8 @@ copy of the current model context, and a new turn does not mean the model starts
|
|
|
200
200
|
conversation memory.</p>
|
|
201
201
|
<p>When the context grows too large, the agent compacts it: older parts are replaced by a summary
|
|
202
202
|
written by the model, and recent parts are kept. A compaction is recorded in the journal as well,
|
|
203
|
-
and the chat shows a short system note
|
|
203
|
+
and the chat shows a short system note. When it starts, how much recent context stays verbatim,
|
|
204
|
+
and how long the summary may be are values of the model; a profile sets them for each model alias.</p>
|
|
204
205
|
<h2 id="interrupting-a-turn-stopping-an-actor-stopping-a-run-and-shutting-down-the-server">Interrupting a turn, stopping an actor, stopping a run, and shutting down the server</h2>
|
|
205
206
|
<p>All stop paths follow the same principle: block new work first, then cancel, wait for running
|
|
206
207
|
work, and only then release resources. The exact boundary differs:</p>
|
|
@@ -84,7 +84,8 @@ conversation memory.
|
|
|
84
84
|
|
|
85
85
|
When the context grows too large, the agent compacts it: older parts are replaced by a summary
|
|
86
86
|
written by the model, and recent parts are kept. A compaction is recorded in the journal as well,
|
|
87
|
-
and the chat shows a short system note.
|
|
87
|
+
and the chat shows a short system note. When it starts, how much recent context stays verbatim,
|
|
88
|
+
and how long the summary may be are values of the model; a profile sets them for each model alias.
|
|
88
89
|
|
|
89
90
|
## Interrupting a turn, stopping an actor, stopping a run, and shutting down the server
|
|
90
91
|
|