Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,11 +40,12 @@ address.

## Agents and workflows

Myra (`agents/myra`) is the only agent Workbench ships. There is no
workflow catalog to browse — Myra creates a workflow, tool, or skill
dynamically, as code, when a job needs one, and deploys it through the
stock workflow-deploy route. `tools/*` and `skills/*` are ordinary
`@corbits/*` packages an agent can pin.
Myra (`agents/myra`) is the only agent Workbench ships. Her tools are
Interchange's own tool packages — `@intx/tools-mail` over her mail
transport and `@intx/tools-posix` over her working tree. The platform has
no notion of an agent calling the hub API, so Workbench ships no
hub-calling tool package: Myra writes a workflow or agent as code and the
person deploys it from Workbench through the stock workflow-deploy route.

## Data

Expand Down
5 changes: 2 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@ local [Ollama](https://ollama.com) works with no key, see
| ------------- | ---------------------------------------------------------------- |
| `apps/` | `hub` (API), `web` (React client), `sidecar` (execution host) |
| `packages/` | Corbits libraries |
| `tools/` | `@corbits/*` agent tool packages |
| `agents/` | `@corbits/myra`, the one shipped agent |
| `vendor/intx` | Hand-copied Interchange packages, see [VENDORED.md](VENDORED.md) |

Expand All @@ -48,5 +47,5 @@ Conventions live in [AGENTS.md](AGENTS.md).
## License

The application is GPLv2 with the [AI Exception](GPLv2-AI-Exception.md);
see [LICENSE.md](LICENSE.md). Libraries under `packages/`, `tools/`, and
`agents/` are LGPL-2.1.
see [LICENSE.md](LICENSE.md). Libraries under `packages/` and `agents/`
are LGPL-2.1.
11 changes: 2 additions & 9 deletions agents/myra/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
"exports": {
".": "./src/index.ts",
"./prompt": "./src/system-prompt.ts",
"./tool-packages": "./src/tool-packages.ts",
"./workflow-ids": "./src/workflow-ids.ts",
"./bundle": "./src/bundle.ts"
},
Expand All @@ -33,14 +32,8 @@
"build": "bun run scripts/build-bundle.ts"
},
"dependencies": {
"@corbits/access-tools": "workspace:*",
"@corbits/agent-directory-tools": "workspace:*",
"@corbits/capability-tools": "workspace:*",
"@corbits/catalog-tools": "workspace:*",
"@corbits/interaction-tools": "workspace:*",
"@corbits/memory": "github:corbitsdev/corbits-memory#9e6f213fa2c002b531d3f6af1aa0abd737b8afe3",
"@corbits/skills-tools": "workspace:*",
"@corbits/workflow-authoring-tools": "workspace:*"
"@intx/tools-mail": "0.3.0",
"@intx/tools-posix": "0.3.0"
},
"devDependencies": {
"@types/bun": "catalog:",
Expand Down
30 changes: 6 additions & 24 deletions agents/myra/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,19 +11,12 @@
import type { AgentDefinition, AnnotatedToolFactory, InferencePreference } from "@intx/agent";
import { defineWorkflow, step } from "@intx/workflow";
import type { WorkflowDefinition } from "@intx/workflow";
import { memoryAdd, memoryList, memorySearch } from "@corbits/memory/tools";
import { accessTools } from "@corbits/access-tools";
import { agentDirectoryTools } from "@corbits/agent-directory-tools";
import { capabilityTools } from "@corbits/capability-tools";
import { catalogTools } from "@corbits/catalog-tools";
import { interactionTools } from "@corbits/interaction-tools";
import { skillsManageTools, skillsQueryTools } from "@corbits/skills-tools";
import { workflowAuthoringTools } from "@corbits/workflow-authoring-tools";
import { mail } from "@intx/tools-mail/sidecar-bundle";
import { posix } from "@intx/tools-posix/sidecar-bundle";

import { ASSISTANT_STEP_ID, ASSISTANT_WORKFLOW_ID } from "./workflow-ids";

export { ASSISTANT_SYSTEM_PROMPT } from "./system-prompt";
export { ASSISTANT_TOOL_PACKAGE_PINS } from "./tool-packages";
export { ASSISTANT_STEP_ID, ASSISTANT_WORKFLOW_ID } from "./workflow-ids";

/** The description the agent step carries; mirrored by the JSON projection
Expand All @@ -32,21 +25,10 @@ export const ASSISTANT_DESCRIPTION =
"A general-purpose assistant that answers questions, drafts " +
"text, and reasons through problems for the team";

// Each factory declares its own env requirements, so the union has no
// common `EnvReq`; the runtime `validateEnv` is the load-bearing check.
export const MYRA_TOOL_FACTORIES = [
memoryAdd,
memorySearch,
memoryList,
capabilityTools,
agentDirectoryTools,
catalogTools,
skillsQueryTools,
skillsManageTools,
interactionTools,
workflowAuthoringTools,
accessTools,
] as unknown as readonly AnnotatedToolFactory[];
// Upstream's own tool packages, the only kind of tool Interchange has:
// mail over the agent's transport and posix over its working tree. Neither
// calls a hub API — nothing in the platform gives an agent that reach.
export const MYRA_TOOL_FACTORIES = [mail, posix] as unknown as readonly AnnotatedToolFactory[];

/** Everything the definition needs that is per-deployment data. */
export interface MyraWorkflowInput {
Expand Down
14 changes: 9 additions & 5 deletions agents/myra/src/system-prompt.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,12 @@ export const ASSISTANT_SYSTEM_PROMPT =
"\n" +
"Act once you have what you need for anything read-only or " +
"reversible; ask first before anything with an external or " +
"hard-to-undo effect (creating a teammate, sending mail on someone " +
"else's behalf, connecting a service). Use the team's memory to " +
"recall and record facts across conversations, but only when you " +
"actually need one — never fabricate a recollection when a search " +
"comes back empty.";
"hard-to-undo effect, such as sending mail on someone else's " +
"behalf.\n" +
"\n" +
"You have mail and a working tree, and nothing else reaches the " +
"workbench itself. To stand up a new agent or workflow, write it as " +
"a package in your working tree and ask the person to deploy it " +
"from Workbench. New capabilities, connected services, and access " +
"for anyone are approvals the person makes there too — say what is " +
"needed and why, and let them do it.";
13 changes: 0 additions & 13 deletions agents/myra/src/tool-packages.ts

This file was deleted.

1 change: 0 additions & 1 deletion apps/hub/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
"@corbits/codex-provider": "github:corbitsdev/corbits-codex-provider#a1f475f341261c05fa8dade0c82f1246c175b5b3",
"@corbits/cron": "workspace:*",
"@corbits/error-sink": "workspace:*",
"@corbits/inference-catalog": "workspace:*",
"@corbits/mailbox": "github:corbitsdev/corbits-mailbox#65590a85fa143251b3ac20ba2eca92fc35e70e51",
"@corbits/memory": "github:corbitsdev/corbits-memory#e74da20f148a302dff5400915fe504ee2395e913",
"@corbits/url-path": "workspace:*",
Expand Down
38 changes: 15 additions & 23 deletions apps/web/src/pages/onboarding-page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ import { useCallback, useEffect, useRef, useState } from "react";
import { ensurePrimaryTenant, runPortableClientBootstrap } from "../client-bootstrap";
import { createFetchStockHub, findOwnedTenants } from "../needs-converge";
import { deployMyraSource } from "../myra-deploy";
import { publishToolPackageRegistry } from "../tools/registry-publish";
import { useNavigate } from "../navigation";
import { triggerFirstLoginProvisioning } from "../onboarding";
import { OnboardingLayout } from "../onboarding/onboarding-layout";
Expand Down Expand Up @@ -154,28 +153,21 @@ export function OnboardingPage({ user }: { readonly user: SessionUser }) {
tenantDomain: string,
offering: ExistingOffering,
): Promise<void> {
// Myra's pins resolve from the tenant registry, so the tool packages
// must be there before her definition deploys.
return publishToolPackageRegistry(tenantId)
.then(() =>
deployMyraSource({
tenantId,
tenantDomain,
sourceOfferingIds: offering.sourceOfferingIds,
defaultSourceOfferingId: offering.defaultSourceOfferingId,
declaredSources: offering.declaredSources,
}),
)
.then(
(myraDeploy) => setState({ phase: "installing", myraDeploy }),
(error: unknown) => {
setState({
phase: "error",
message:
error instanceof Error ? error.message : "Publishing Myra's source hit a snag.",
});
},
);
return deployMyraSource({
tenantId,
tenantDomain,
sourceOfferingIds: offering.sourceOfferingIds,
defaultSourceOfferingId: offering.defaultSourceOfferingId,
declaredSources: offering.declaredSources,
}).then(
(myraDeploy) => setState({ phase: "installing", myraDeploy }),
(error: unknown) => {
setState({
phase: "error",
message: error instanceof Error ? error.message : "Publishing Myra's source hit a snag.",
});
},
);
}

// Step 4: the installer itself, run once a `myraDeploy` is in hand. A
Expand Down
5 changes: 2 additions & 3 deletions apps/web/src/pages/tools-page.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
// Tools: a standalone rail destination listing the tool packages this
// tenant has published into its own registry — the same
// `corbits-tools` package-registry asset `registry-publish.ts` writes to.
// No stock route lists a tenant's MCP servers yet, so this page has
// tenant has published into its own `corbits-tools` package-registry
// asset. No stock route lists a tenant's MCP servers yet, so this page has
// nothing to show for those until one exists.

import {
Expand Down
59 changes: 0 additions & 59 deletions apps/web/src/tools/registry-publish.test.ts

This file was deleted.

Loading
Loading