@daihum/team
v0.1.2
Published
DAIHUM seat-neutral team domain: governed groups of agent|person|service principals with roles, members, threads, session-links, events, and the runner/store ports that pair a team role with the agent infra. Domain + ports; orchestration/persistence impls
Downloads
253
Maintainers
Readme
@daihum/team
The seat-neutral team domain: governed groups of Principals (agent | person |
service | …) with roles, members, an inbox thread, links to the sessions their
roles run, and an event log — plus the ports that pair a team role with the agent
infra.
import { createInMemoryTeamStoreV0, createTeamServiceV0 } from "@daihum/team";
const team = createTeamServiceV0({
store: createInMemoryTeamStoreV0(),
now: () => new Date().toISOString(),
newId: (p) => `${p}_${crypto.randomUUID()}`,
runner, // optional: the agent-infra pairing seam
});
const { value } = await team.createTeam({ workspaceId: "w1", name: "Research" });
await team.roleUpsert({ teamId: value.team.teamId, roleId: "lead", title: "Lead" });
await team.memberAdd({ teamId: value.team.teamId, principalKind: "agent", principalId: "ada", roleIds: ["lead"] });
// pairing: activate a role as a running session (runner = where @daihum/agent-loop plugs in)
await team.activateRole({ teamId: value.team.teamId, roleId: "lead", goal: "draft the brief", ownerPrincipalId: "sys" });Boundaries
- Domain + ports only. Orchestration (the
TeamRunnerPortV0that activates a role — where@daihum/agent-loopplugs in), durable persistence (TeamStorePortV0), and governance impls stay in products (carrel system-jobs/approval, ontal control-room). Mirrors@daihum/approval-resume. - Identity is the canonical
Principalfrom@daihum/persona—principalKindisPrincipalKindV0. A team member, a chat participant, a persona, an approval principal, and an agent run's owner are all onePrincipal. - Records carry NO frozen
schemaliteral. carrel (carrel.system.team.*.v0) and ontal (ontal.team.*.v0) attach their own wire schema in their adapter (pending the canonicalization decision); the core types are neutral structural shapes (the union/superset of both). - Bounded, governed multi-agent — not a world-scale society. A team is the product-regime grouping (roles, governance, human-in-loop). The world-sim (emergent, ungoverned) is a separate substrate; team's seat-neutral roles/ principals are reusable there, but team is not that engine.
