@monoes/monomindcli 2.0.0 → 2.0.2
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/.claude/helpers/token-tracker.cjs +10 -0
- package/README.md +11 -12
- package/dist/src/browser/dashboard/server.d.ts.map +1 -1
- package/dist/src/browser/dashboard/server.js +71 -12
- package/dist/src/browser/dashboard/server.js.map +1 -1
- package/dist/src/browser/dashboard/ui.html +4 -4
- package/dist/src/commands/browse-workflow.js +2 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +8 -7
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp-tools/coherence/types.d.ts +18 -18
- package/dist/src/mcp-tools/quality/coverage-analysis/prioritize-gaps.d.ts +12 -12
- package/dist/src/mcp-tools/quality/security-compliance/detect-secrets.d.ts +4 -4
- package/dist/src/orgrt/bus.d.ts +23 -0
- package/dist/src/orgrt/bus.d.ts.map +1 -0
- package/dist/src/orgrt/bus.js +64 -0
- package/dist/src/orgrt/bus.js.map +1 -0
- package/dist/src/orgrt/daemon.d.ts +41 -0
- package/dist/src/orgrt/daemon.d.ts.map +1 -0
- package/dist/src/orgrt/daemon.js +101 -0
- package/dist/src/orgrt/daemon.js.map +1 -0
- package/dist/src/orgrt/forwarder.d.ts +11 -0
- package/dist/src/orgrt/forwarder.d.ts.map +1 -0
- package/dist/src/orgrt/forwarder.js +37 -0
- package/dist/src/orgrt/forwarder.js.map +1 -0
- package/dist/src/orgrt/mailbox.d.ts +25 -0
- package/dist/src/orgrt/mailbox.d.ts.map +1 -0
- package/dist/src/orgrt/mailbox.js +39 -0
- package/dist/src/orgrt/mailbox.js.map +1 -0
- package/dist/src/orgrt/policy.d.ts +24 -0
- package/dist/src/orgrt/policy.d.ts.map +1 -0
- package/dist/src/orgrt/policy.js +86 -0
- package/dist/src/orgrt/policy.js.map +1 -0
- package/dist/src/orgrt/provider.d.ts +9 -0
- package/dist/src/orgrt/provider.d.ts.map +1 -0
- package/dist/src/orgrt/provider.js +54 -0
- package/dist/src/orgrt/provider.js.map +1 -0
- package/dist/src/orgrt/session.d.ts +23 -0
- package/dist/src/orgrt/session.d.ts.map +1 -0
- package/dist/src/orgrt/session.js +78 -0
- package/dist/src/orgrt/session.js.map +1 -0
- package/dist/src/orgrt/types.d.ts +847 -0
- package/dist/src/orgrt/types.d.ts.map +1 -0
- package/dist/src/orgrt/types.js +51 -0
- package/dist/src/orgrt/types.js.map +1 -0
- package/dist/src/parser.d.ts.map +1 -1
- package/dist/src/parser.js +31 -5
- package/dist/src/parser.js.map +1 -1
- package/dist/src/ui/collector.mjs +69 -44
- package/dist/src/ui/dashboard.html +112 -25
- package/dist/src/ui/orgs.html +54 -0
- package/dist/src/ui/server.mjs +87 -12
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -2
- package/scripts/setup-ipfs-registry.md +14 -15
- package/dist/src/consensus/vote-signer.d.ts +0 -36
- package/dist/src/consensus/vote-signer.d.ts.map +0 -1
- package/dist/src/consensus/vote-signer.js +0 -88
- package/dist/src/consensus/vote-signer.js.map +0 -1
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
// packages/@monomind/cli/src/orgrt/policy.ts
|
|
2
|
+
import { relative, resolve } from 'node:path';
|
|
3
|
+
const WRITE_TOOLS = new Set(['Write', 'Edit', 'NotebookEdit']);
|
|
4
|
+
const READ_TOOLS = new Set(['Read', 'Glob', 'Grep']);
|
|
5
|
+
const WEB_TOOLS = new Set(['WebFetch', 'WebSearch']);
|
|
6
|
+
/** tiny glob→RegExp: supports ** (any depth) and * (single segment). */
|
|
7
|
+
export function globToRegExp(glob) {
|
|
8
|
+
const esc = glob.replace(/[.+^${}()|[\]\\]/g, '\\$&')
|
|
9
|
+
.replace(/\*\*/g, ' ').replace(/\*/g, '[^/]*').replace(/ /g, '.*');
|
|
10
|
+
return new RegExp(`^${esc}$`);
|
|
11
|
+
}
|
|
12
|
+
export class PolicyEngine {
|
|
13
|
+
role;
|
|
14
|
+
policy;
|
|
15
|
+
bus;
|
|
16
|
+
cwd;
|
|
17
|
+
used = 0;
|
|
18
|
+
constructor(role, policy, bus, cwd) {
|
|
19
|
+
this.role = role;
|
|
20
|
+
this.policy = policy;
|
|
21
|
+
this.bus = bus;
|
|
22
|
+
this.cwd = cwd;
|
|
23
|
+
}
|
|
24
|
+
addUsage(tokens) { this.used += tokens; }
|
|
25
|
+
get usage() { return this.used; }
|
|
26
|
+
get overBudget() {
|
|
27
|
+
return this.policy.maxTokens != null && this.used >= this.policy.maxTokens;
|
|
28
|
+
}
|
|
29
|
+
async decide(tool, input) {
|
|
30
|
+
const deny = (reason) => {
|
|
31
|
+
this.bus.emit({ type: 'tool', from: this.role, tool, decision: 'deny', reason, data: { input: summarize(input) } });
|
|
32
|
+
return { behavior: 'deny', message: `[org-policy] ${reason}` };
|
|
33
|
+
};
|
|
34
|
+
const allow = () => {
|
|
35
|
+
this.bus.emit({ type: 'tool', from: this.role, tool, decision: 'allow', data: { input: summarize(input) } });
|
|
36
|
+
if (WRITE_TOOLS.has(tool) && typeof input.file_path === 'string') {
|
|
37
|
+
this.bus.emit({ type: 'asset', from: this.role, path: String(input.file_path) });
|
|
38
|
+
}
|
|
39
|
+
return { behavior: 'allow', updatedInput: input };
|
|
40
|
+
};
|
|
41
|
+
if (this.overBudget)
|
|
42
|
+
return deny(`token budget exhausted (${this.used}/${this.policy.maxTokens})`);
|
|
43
|
+
if (this.policy.denyTools?.includes(tool))
|
|
44
|
+
return deny(`tool ${tool} is denied for role ${this.role}`);
|
|
45
|
+
if (this.policy.allowTools && !this.policy.allowTools.includes(tool) && !tool.startsWith('mcp__org__'))
|
|
46
|
+
return deny(`tool ${tool} not in allowlist for role ${this.role}`);
|
|
47
|
+
if (WRITE_TOOLS.has(tool) || READ_TOOLS.has(tool)) {
|
|
48
|
+
const globs = WRITE_TOOLS.has(tool) ? (this.policy.fileWrite ?? ['**']) : (this.policy.fileRead ?? ['**']);
|
|
49
|
+
const p = typeof input.file_path === 'string' ? input.file_path
|
|
50
|
+
: typeof input.path === 'string' ? input.path : null;
|
|
51
|
+
if (p !== null) {
|
|
52
|
+
const rel = relative(this.cwd, resolve(this.cwd, p));
|
|
53
|
+
if (rel.startsWith('..'))
|
|
54
|
+
return deny(`path escapes org workdir: ${p}`);
|
|
55
|
+
if (!globs.some(g => globToRegExp(g).test(rel)))
|
|
56
|
+
return deny(`path ${rel} outside ${WRITE_TOOLS.has(tool) ? 'write' : 'read'} scope`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
if (WEB_TOOLS.has(tool) && this.policy.webAllow !== undefined) {
|
|
60
|
+
if (this.policy.webAllow.length === 0)
|
|
61
|
+
return deny(`web access disabled for role ${this.role}`);
|
|
62
|
+
if (tool === 'WebFetch') {
|
|
63
|
+
const host = safeHost(String(input.url ?? ''));
|
|
64
|
+
if (!host || !this.policy.webAllow.some(d => host === d || host.endsWith(`.${d}`)))
|
|
65
|
+
return deny(`domain ${host ?? '?'} not in research allowlist`);
|
|
66
|
+
}
|
|
67
|
+
// WebSearch has no URL up front; allowed if webAllow is non-empty
|
|
68
|
+
}
|
|
69
|
+
return allow();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
function safeHost(url) {
|
|
73
|
+
try {
|
|
74
|
+
return new URL(url).hostname;
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
function summarize(input) {
|
|
81
|
+
const out = {};
|
|
82
|
+
for (const [k, v] of Object.entries(input))
|
|
83
|
+
out[k] = typeof v === 'string' && v.length > 200 ? v.slice(0, 200) + '…' : v;
|
|
84
|
+
return out;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../../../src/orgrt/policy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ProviderConfig } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Builds the child-process env for one agent session.
|
|
4
|
+
* Default (no provider block) = subscription: remove the API key var so the
|
|
5
|
+
* spawned Claude Code engine uses the user's `claude login` credentials.
|
|
6
|
+
* Never stores secrets in org JSON — only env var NAMES.
|
|
7
|
+
*/
|
|
8
|
+
export declare function resolveProviderEnv(cfg: ProviderConfig | undefined, parentEnv?: Record<string, string | undefined>): Record<string, string>;
|
|
9
|
+
//# sourceMappingURL=provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/orgrt/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAIjD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,cAAc,GAAG,SAAS,EAC/B,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GAC1D,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAiCxB"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
const KEY_VAR = ['ANTHROPIC', 'API', 'KEY'].join('_');
|
|
2
|
+
/**
|
|
3
|
+
* Builds the child-process env for one agent session.
|
|
4
|
+
* Default (no provider block) = subscription: remove the API key var so the
|
|
5
|
+
* spawned Claude Code engine uses the user's `claude login` credentials.
|
|
6
|
+
* Never stores secrets in org JSON — only env var NAMES.
|
|
7
|
+
*/
|
|
8
|
+
export function resolveProviderEnv(cfg, parentEnv = process.env) {
|
|
9
|
+
const env = {};
|
|
10
|
+
for (const [k, v] of Object.entries(parentEnv))
|
|
11
|
+
if (v !== undefined)
|
|
12
|
+
env[k] = v;
|
|
13
|
+
const kind = cfg?.kind ?? 'subscription';
|
|
14
|
+
switch (kind) {
|
|
15
|
+
case 'subscription':
|
|
16
|
+
delete env[KEY_VAR];
|
|
17
|
+
delete env.ANTHROPIC_BASE_URL;
|
|
18
|
+
delete env.ANTHROPIC_AUTH_TOKEN;
|
|
19
|
+
break;
|
|
20
|
+
case 'api-key': {
|
|
21
|
+
const name = cfg?.apiKeyEnv ?? KEY_VAR;
|
|
22
|
+
const key = parentEnv[name];
|
|
23
|
+
if (!key)
|
|
24
|
+
throw new Error(`provider api-key: env var ${name} is not set`);
|
|
25
|
+
env[KEY_VAR] = key;
|
|
26
|
+
break;
|
|
27
|
+
}
|
|
28
|
+
case 'base-url': {
|
|
29
|
+
if (!cfg?.baseUrl)
|
|
30
|
+
throw new Error('provider base-url: baseUrl is required');
|
|
31
|
+
env.ANTHROPIC_BASE_URL = cfg.baseUrl;
|
|
32
|
+
delete env[KEY_VAR];
|
|
33
|
+
if (cfg.authTokenEnv) {
|
|
34
|
+
const tok = parentEnv[cfg.authTokenEnv];
|
|
35
|
+
if (!tok)
|
|
36
|
+
throw new Error(`provider base-url: env var ${cfg.authTokenEnv} is not set`);
|
|
37
|
+
env.ANTHROPIC_AUTH_TOKEN = tok;
|
|
38
|
+
}
|
|
39
|
+
break;
|
|
40
|
+
}
|
|
41
|
+
case 'bedrock':
|
|
42
|
+
env.CLAUDE_CODE_USE_BEDROCK = '1';
|
|
43
|
+
delete env[KEY_VAR];
|
|
44
|
+
delete env.ANTHROPIC_AUTH_TOKEN;
|
|
45
|
+
break;
|
|
46
|
+
case 'vertex':
|
|
47
|
+
env.CLAUDE_CODE_USE_VERTEX = '1';
|
|
48
|
+
delete env[KEY_VAR];
|
|
49
|
+
delete env.ANTHROPIC_AUTH_TOKEN;
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
return env;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/orgrt/provider.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,GAAG,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEtD;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAChC,GAA+B,EAC/B,YAAgD,OAAO,CAAC,GAAG;IAE3D,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;QAAE,IAAI,CAAC,KAAK,SAAS;YAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAChF,MAAM,IAAI,GAAG,GAAG,EAAE,IAAI,IAAI,cAAc,CAAC;IAEzC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,cAAc;YACjB,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC;YACpB,OAAO,GAAG,CAAC,kBAAkB,CAAC;YAC9B,OAAO,GAAG,CAAC,oBAAoB,CAAC;YAChC,MAAM;QACR,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,IAAI,GAAG,GAAG,EAAE,SAAS,IAAI,OAAO,CAAC;YACvC,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;YAC5B,IAAI,CAAC,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,IAAI,aAAa,CAAC,CAAC;YAC1E,GAAG,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC;YACnB,MAAM;QACR,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,IAAI,CAAC,GAAG,EAAE,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;YAC7E,GAAG,CAAC,kBAAkB,GAAG,GAAG,CAAC,OAAO,CAAC;YACrC,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC;YACpB,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC;gBACrB,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;gBACxC,IAAI,CAAC,GAAG;oBAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,GAAG,CAAC,YAAY,aAAa,CAAC,CAAC;gBACvF,GAAG,CAAC,oBAAoB,GAAG,GAAG,CAAC;YACjC,CAAC;YACD,MAAM;QACR,CAAC;QACD,KAAK,SAAS;YAAE,GAAG,CAAC,uBAAuB,GAAG,GAAG,CAAC;YAAC,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC;YAAC,OAAO,GAAG,CAAC,oBAAoB,CAAC;YAAC,MAAM;QAC/G,KAAK,QAAQ;YAAE,GAAG,CAAC,sBAAsB,GAAG,GAAG,CAAC;YAAC,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC;YAAC,OAAO,GAAG,CAAC,oBAAoB,CAAC;YAAC,MAAM;IAC/G,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { query } from '@anthropic-ai/claude-agent-sdk';
|
|
2
|
+
import type { OrgBus } from './bus.js';
|
|
3
|
+
import type { PolicyEngine } from './policy.js';
|
|
4
|
+
import type { Mailbox } from './mailbox.js';
|
|
5
|
+
import type { OrgDef, OrgRole } from './types.js';
|
|
6
|
+
export type DeliverFn = (from: string, to: string, subject: string, body: string) => Promise<string>;
|
|
7
|
+
export interface SessionOpts {
|
|
8
|
+
org: string;
|
|
9
|
+
role: OrgRole;
|
|
10
|
+
bus: OrgBus;
|
|
11
|
+
policy: PolicyEngine;
|
|
12
|
+
mailbox: Mailbox;
|
|
13
|
+
cwd: string;
|
|
14
|
+
deliver: DeliverFn;
|
|
15
|
+
def?: OrgDef;
|
|
16
|
+
maxTurns?: number;
|
|
17
|
+
queryFn?: typeof query;
|
|
18
|
+
}
|
|
19
|
+
/** Role briefing given to each agent session (SDK systemPrompt option). */
|
|
20
|
+
export declare function buildRolePrompt(role: OrgRole, def: Pick<OrgDef, 'name' | 'goal'>, roster: string[]): string;
|
|
21
|
+
/** Runs one persistent agent session; resolves when the mailbox closes and the SDK stream ends. */
|
|
22
|
+
export declare function runAgentSession(opts: SessionOpts): Promise<void>;
|
|
23
|
+
//# sourceMappingURL=session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/orgrt/session.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAA4B,MAAM,gCAAgC,CAAC;AACjF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAGlD,MAAM,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAErG,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,SAAS,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;CACxB;AAED,2EAA2E;AAC3E,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAY3G;AAED,mGAAmG;AACnG,wBAAsB,eAAe,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAiEtE"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
// packages/@monomind/cli/src/orgrt/session.ts
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { query, tool, createSdkMcpServer } from '@anthropic-ai/claude-agent-sdk';
|
|
4
|
+
import { resolveProviderEnv } from './provider.js';
|
|
5
|
+
/** Role briefing given to each agent session (SDK systemPrompt option). */
|
|
6
|
+
export function buildRolePrompt(role, def, roster) {
|
|
7
|
+
return [
|
|
8
|
+
`You are agent "${role.id}" (${role.title || role.type}) in the org "${def.name}".`,
|
|
9
|
+
`Org goal: ${def.goal}`,
|
|
10
|
+
role.reports_to ? `You report to "${role.reports_to}".` : `You are the coordinator of this org.`,
|
|
11
|
+
role.responsibilities?.length ? `Your responsibilities:\n- ${role.responsibilities.join('\n- ')}` : '',
|
|
12
|
+
`## Communication protocol`,
|
|
13
|
+
`The ONLY way to communicate with other agents is the org_send tool.`,
|
|
14
|
+
`Roster: ${roster.join(', ')}. Address another org's agent as "<org-name>:<role-id>".`,
|
|
15
|
+
`When you receive a message, act on it, then org_send your result to the requester.`,
|
|
16
|
+
`When your current work is complete and no reply is needed, end your turn without further tool calls.`,
|
|
17
|
+
].filter(Boolean).join('\n\n');
|
|
18
|
+
}
|
|
19
|
+
/** Runs one persistent agent session; resolves when the mailbox closes and the SDK stream ends. */
|
|
20
|
+
export async function runAgentSession(opts) {
|
|
21
|
+
const { org, role, bus, policy, mailbox, cwd, deliver } = opts;
|
|
22
|
+
const queryFn = opts.queryFn ?? query;
|
|
23
|
+
const orgServer = createSdkMcpServer({
|
|
24
|
+
name: 'org',
|
|
25
|
+
version: '1.0.0',
|
|
26
|
+
tools: [
|
|
27
|
+
tool('org_send', 'Send a message to another agent (role id) or another org ("org:role"). This is the only inter-agent channel.', { to: z.string(), subject: z.string(), message: z.string() }, async (args) => {
|
|
28
|
+
const receipt = await deliver(role.id, args.to, args.subject, args.message);
|
|
29
|
+
return { content: [{ type: 'text', text: receipt }] };
|
|
30
|
+
}),
|
|
31
|
+
],
|
|
32
|
+
});
|
|
33
|
+
bus.emit({ type: 'status', from: role.id, msg: 'session starting' });
|
|
34
|
+
try {
|
|
35
|
+
const stream = queryFn({
|
|
36
|
+
prompt: mailbox.stream(),
|
|
37
|
+
options: {
|
|
38
|
+
systemPrompt: buildRolePrompt(role, (opts.def ?? { name: org, goal: '' }), opts.def?.roles.map(r => r.id) ?? [role.id]),
|
|
39
|
+
model: role.adapter_config?.model,
|
|
40
|
+
cwd,
|
|
41
|
+
env: resolveProviderEnv(role.provider),
|
|
42
|
+
mcpServers: { org: orgServer },
|
|
43
|
+
maxTurns: opts.maxTurns ?? 30,
|
|
44
|
+
permissionMode: 'default',
|
|
45
|
+
canUseTool: async (toolName, input) => policy.decide(toolName, input),
|
|
46
|
+
// test seam: lets the scripted fake SDK (test-loop.ts) drive org_send and
|
|
47
|
+
// tool calls through the real deliver/policy paths; the real SDK ignores it
|
|
48
|
+
_orgTest: {
|
|
49
|
+
deliver: (to, subject, body) => deliver(role.id, to, subject, body),
|
|
50
|
+
callTool: (name, input) => policy.decide(name, input),
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
for await (const m of stream) {
|
|
55
|
+
if (m.type === 'assistant') {
|
|
56
|
+
const text = (m.message?.content ?? [])
|
|
57
|
+
.filter((b) => b.type === 'text').map((b) => b.text).join('\n');
|
|
58
|
+
if (text.trim())
|
|
59
|
+
bus.emit({ type: 'chat', from: role.id, msg: text });
|
|
60
|
+
}
|
|
61
|
+
else if (m.type === 'result') {
|
|
62
|
+
const tokens = (m.usage?.input_tokens ?? 0) + (m.usage?.output_tokens ?? 0);
|
|
63
|
+
policy.addUsage(tokens);
|
|
64
|
+
bus.emit({ type: 'usage', from: role.id, data: { tokens, cost_usd: m.total_cost_usd, subtype: m.subtype } });
|
|
65
|
+
if (policy.overBudget) {
|
|
66
|
+
bus.emit({ type: 'status', from: role.id, msg: 'token budget exhausted — closing session' });
|
|
67
|
+
mailbox.close();
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
bus.emit({ type: 'status', from: role.id, msg: 'session ended' });
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
bus.emit({ type: 'status', from: role.id, msg: `session error: ${err.message}` });
|
|
75
|
+
throw err;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/orgrt/session.ts"],"names":[],"mappings":"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"}
|