fuli-context 0.10.0 → 0.11.1
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/README.md +27 -30
- package/README.zh-CN.md +22 -26
- package/dist/web/assets/AboutPage-cW9hDghN.js +1 -0
- package/dist/web/assets/AgentConversations-CGznTWuV.js +2 -0
- package/dist/web/assets/AgentConversations-XqNEBY_2.css +1 -0
- package/dist/web/assets/AgentHand-DkyF4vgk.js +1 -0
- package/dist/web/assets/AgentName-C1mAVr-v.js +1 -0
- package/dist/web/assets/AgentProfilePage-pKUR0rfj.js +1 -0
- package/dist/web/assets/AgentsDirectoryPage-CUlbT2hD.js +1 -0
- package/dist/web/assets/AgentsDirectoryPage-yRWktiin.css +1 -0
- package/dist/web/assets/ConnectionsPage-CM9C-zEI.css +1 -0
- package/dist/web/assets/ConnectionsPage-CuDHIJXu.js +1 -0
- package/dist/web/assets/EmployeeRecruitDialog-CVbqCzHb.css +1 -0
- package/dist/web/assets/EmployeeRecruitDialog-D9QfGipd.js +1 -0
- package/dist/web/assets/EmployeeWorkbenchPage-D-c_Jm2z.css +1 -0
- package/dist/web/assets/EmployeeWorkbenchPage-DAtvGney.js +3 -0
- package/dist/web/assets/KnowledgeEditDialog-a-5rasG0.js +1 -0
- package/dist/web/assets/KnowledgeEditDialog-hT9znkoe.css +1 -0
- package/dist/web/assets/KnowledgeInspector-BGsqjNY2.js +1 -0
- package/dist/web/assets/KnowledgeOrganizerPage-BndgUsHS.js +1 -0
- package/dist/web/assets/KnowledgeOrganizerPage-DeL7Jp34.css +1 -0
- package/dist/web/assets/KnowledgePage-CQweO0YJ.js +1 -0
- package/dist/web/assets/KnowledgeWorkspace-BtUjKTLb.js +4 -0
- package/dist/web/assets/KnowledgeWorkspace-D4a7FcAb.css +1 -0
- package/dist/web/assets/NotFoundPage-BmQTTqQn.js +1 -0
- package/dist/web/assets/OverviewPage-By-fUzSG.css +1 -0
- package/dist/web/assets/OverviewPage-C73HyTsM.js +1 -0
- package/dist/web/assets/PersonalProfilePage-BMuOrppx.js +1 -0
- package/dist/web/assets/PersonalProfilePage-DrMDAAdy.css +1 -0
- package/dist/web/assets/PersonalProjectsPage-Cq9_kFvs.js +1 -0
- package/dist/web/assets/ProjectAgentFirstTask-Bi1ZsTC1.css +1 -0
- package/dist/web/assets/ProjectAgentFirstTask-CaHvOjkp.js +1 -0
- package/dist/web/assets/ProjectAgentsPage-DWGkgIsr.css +1 -0
- package/dist/web/assets/ProjectAgentsPage-WVcNdzVi.js +12 -0
- package/dist/web/assets/ProjectScopePicker-zAgiaZKL.js +1 -0
- package/dist/web/assets/PublicProjectsPage-DKamXDV9.css +1 -0
- package/dist/web/assets/PublicProjectsPage-DL093f65.js +1 -0
- package/dist/web/assets/ReviewPage-D_NIhPx8.js +1 -0
- package/dist/web/assets/RoundtablesPage-Cb0R4GaM.css +1 -0
- package/dist/web/assets/RoundtablesPage-CdVVyZE-.js +1 -0
- package/dist/web/assets/SettingsPage-BmYkLul4.css +1 -0
- package/dist/web/assets/SettingsPage-CbLaau8Q.js +1 -0
- package/dist/web/assets/SharedJefaReportPage-aygd6wvb.js +1 -0
- package/dist/web/assets/UiDialog-Q7fsJUoO.js +1 -0
- package/dist/web/assets/UiDisclosure-BS-muK5j.js +1 -0
- package/dist/web/assets/UiSegmented-CT28bxqw.js +1 -0
- package/dist/web/assets/UiSelect-Bv6R0yr1.css +1 -0
- package/dist/web/assets/UiSelect-DcGpPQQo.js +1 -0
- package/dist/web/assets/WritingTastePage-B_zYD1df.css +1 -0
- package/dist/web/assets/WritingTastePage-CYlwAFqV.js +1 -0
- package/dist/web/assets/agent-profile-BZj3ezWe.css +1 -0
- package/dist/web/assets/{attention-store-Dk-_P4Oi.js → attention-store-D-qIFRIb.js} +1 -1
- package/dist/web/assets/{catalog-DN72452f.js → catalog-UDv854JN.js} +1 -1
- package/dist/web/assets/client-DLS5FZBI.js +1 -0
- package/dist/web/assets/{console-BtPqo79j.js → console-CqzwSo7a.js} +1 -1
- package/dist/web/assets/{conversation-launcher-settings-jkHRmWai.js → conversation-launcher-settings-DRoIz42V.js} +1 -1
- package/dist/web/assets/{i18n-D2CJkEYK.js → i18n-b14l2pQA.js} +3 -3
- package/dist/web/assets/{identity-B3zEw-1u.js → identity-BWbPmZZf.js} +1 -1
- package/dist/web/assets/index-D1OHIz4c.js +5 -0
- package/dist/web/assets/index-kPB0Cf8Q.css +1 -0
- package/dist/web/assets/{model-S7ehAjky.js → model-DupZy8Qb.js} +1 -1
- package/dist/web/assets/{personal-profile-graph--GG3Mizo.js → personal-profile-graph-BPTtMJTZ.js} +1 -1
- package/dist/web/assets/shared-report-BYnLhmCZ.js +1 -0
- package/dist/web/assets/{useAgentRoster-BAPKWZ9y.js → useAgentRoster-ep7SpKv1.js} +1 -1
- package/dist/web/assets/{useApi-CROJJdhE-BtFMXFjw.js → useApi-CROJJdhE-CEQAEuug.js} +1 -1
- package/dist/web/assets/{vue-router-DkaTtPn0.js → vue-router-B6ZjK-Br.js} +1 -1
- package/dist/web/index.html +14 -16
- package/docs/agent-conversations-and-collaboration.md +9 -9
- package/docs/agent-roundtable.md +77 -0
- package/docs/employee-agents.md +2 -2
- package/docs/project-agent-memory.md +1 -1
- package/graph-provider/fuli_graph/agent_conversation_models.py +11 -2
- package/graph-provider/fuli_graph/conversation_context.py +40 -9
- package/graph-provider/fuli_graph/default_project_lead.py +88 -0
- package/graph-provider/fuli_graph/project_agent_context_models.py +5 -1
- package/graph-provider/fuli_graph/project_agent_delegations.py +118 -0
- package/graph-provider/fuli_graph/project_agent_employee_numbers.py +41 -0
- package/graph-provider/fuli_graph/project_agent_memory_routes.py +20 -0
- package/graph-provider/fuli_graph/project_agent_models.py +1 -0
- package/graph-provider/fuli_graph/project_agent_task_models.py +3 -0
- package/graph-provider/fuli_graph/project_agent_team_growth.py +2 -2
- package/graph-provider/fuli_graph/runtime.py +10 -76
- package/graph-provider/fuli_graph/store.py +2 -0
- package/graph-provider/fuli_graph/store_agent_conversations.py +60 -8
- package/graph-provider/fuli_graph/store_project_agent_context.py +52 -4
- package/graph-provider/fuli_graph/store_project_agent_coordination_policy.py +16 -1
- package/graph-provider/fuli_graph/store_project_agent_task_recruitment.py +3 -1
- package/graph-provider/fuli_graph/store_project_agent_task_staffing.py +3 -2
- package/graph-provider/fuli_graph/store_project_agent_tasks.py +12 -8
- package/graph-provider/fuli_graph/store_project_agents.py +56 -129
- package/graph-provider/fuli_graph/store_task_contexts.py +26 -0
- package/graph-provider/fuli_graph/system_agents.py +130 -0
- package/graph-provider/fuli_graph/system_hr_identity.py +1 -1
- package/graph-provider/fuli_graph/task_context_routes.py +10 -0
- package/graph-provider/pyproject.toml +1 -1
- package/npm-shrinkwrap.json +2 -2
- package/package.json +2 -2
- package/src/agent-roundtable/http.js +14 -0
- package/src/agent-roundtable/service.js +247 -0
- package/src/agent-roundtable/store.js +86 -0
- package/src/agent-roundtable/tools.js +61 -0
- package/src/agent-roundtable/wake.js +100 -0
- package/src/agent-tools/agent-conversation-definitions.js +3 -3
- package/src/agent-tools/graph-definitions.js +3 -2
- package/src/agent-tools/interface-catalog.js +0 -5
- package/src/agent-tools.js +2 -2
- package/src/agents/claude-code/wake.js +37 -0
- package/src/agents/codex/wake.js +47 -0
- package/src/agents/identity-receipt.js +35 -7
- package/src/agents/session-log.js +34 -0
- package/src/agents/wake-registry.js +14 -0
- package/src/cli/command-registry.js +0 -2
- package/src/cli/setup-command.js +2 -5
- package/src/cli/update-command.js +13 -2
- package/src/cli.js +0 -5
- package/src/employees/management-policy.js +4 -2
- package/src/employees/manifest.js +3 -0
- package/src/employees/recruitment.js +3 -2
- package/src/graphiti/agent-conversations.js +11 -9
- package/src/graphiti/agent-knowledge-workflows.js +34 -7
- package/src/graphiti/federated-application.js +17 -5
- package/src/graphiti/project-agent-mapping.js +2 -0
- package/src/graphiti/project-agent-task-entry.js +38 -8
- package/src/graphiti/project-agent-team-context.js +4 -1
- package/src/graphiti/project-path-context.js +7 -2
- package/src/graphiti/provider-client.js +17 -0
- package/src/graphiti/repository-project-registration.js +17 -0
- package/src/graphiti/task-entry-preferences.js +17 -4
- package/src/graphiti/task-entry-project-scope.js +67 -0
- package/src/http/api-router.js +5 -3
- package/src/http/error-mapping.js +0 -2
- package/src/mcp/instructions.js +5 -5
- package/src/mcp/session-id.js +1 -1
- package/src/mcp/tool-annotations.js +3 -4
- package/src/setup/agents.js +1 -41
- package/src/setup/graph-runtime.js +15 -2
- package/src/setup/session-skill.js +22 -2
- package/dist/web/assets/AboutPage-D-GyJNv1.js +0 -1
- package/dist/web/assets/AgentConversations-DOuZgUeA.js +0 -2
- package/dist/web/assets/AgentConversations-DS8h3yKn.css +0 -1
- package/dist/web/assets/AgentHand-eGsXoGSq.js +0 -1
- package/dist/web/assets/AgentName-Dtmu9Ff5.js +0 -1
- package/dist/web/assets/AgentProfilePage-D8Tvayn7.js +0 -1
- package/dist/web/assets/AgentsDirectoryPage-BTEfKZjF.js +0 -1
- package/dist/web/assets/ConnectionsPage-C1w99yN3.css +0 -1
- package/dist/web/assets/ConnectionsPage-DwOIcvl9.js +0 -1
- package/dist/web/assets/EmployeeRecruitDialog-BrIMRblq.css +0 -1
- package/dist/web/assets/EmployeeRecruitDialog-D11blfwU.js +0 -1
- package/dist/web/assets/EmployeeWorkbenchPage-BcEzYt65.css +0 -1
- package/dist/web/assets/EmployeeWorkbenchPage-CK2BAoGt.js +0 -3
- package/dist/web/assets/GrowthLoading-KTjE2e50.js +0 -1
- package/dist/web/assets/KnowledgeEditDialog-B3x8vs3c.css +0 -1
- package/dist/web/assets/KnowledgeEditDialog-n9trHQ5d.js +0 -1
- package/dist/web/assets/KnowledgeInspector-BcNjgw9H.js +0 -1
- package/dist/web/assets/KnowledgeOrganizerPage-BzgxP-nG.css +0 -1
- package/dist/web/assets/KnowledgeOrganizerPage-DMBpGxLr.js +0 -1
- package/dist/web/assets/KnowledgePage-POkCMW8f.js +0 -1
- package/dist/web/assets/KnowledgeWorkspace-2FvQadhB.js +0 -4
- package/dist/web/assets/KnowledgeWorkspace-sb8OJ97I.css +0 -1
- package/dist/web/assets/NotFoundPage-BCMZbeB8.js +0 -1
- package/dist/web/assets/OverviewPage-0CFWCG9-.css +0 -1
- package/dist/web/assets/OverviewPage-0mYifpjp.js +0 -1
- package/dist/web/assets/PersonalProfilePage-Chv2a2pi.css +0 -1
- package/dist/web/assets/PersonalProfilePage-JW6Muix6.js +0 -1
- package/dist/web/assets/PersonalProjectsPage-CRbi64JP.js +0 -1
- package/dist/web/assets/ProjectAgentFirstTask-6afJ8HUe.css +0 -1
- package/dist/web/assets/ProjectAgentFirstTask-DJ0wTbh8.js +0 -1
- package/dist/web/assets/ProjectAgentsPage-CPgKVLgg.js +0 -12
- package/dist/web/assets/ProjectAgentsPage-DeuRkMp1.css +0 -1
- package/dist/web/assets/ProjectScopePicker-BwB7gK-7.js +0 -1
- package/dist/web/assets/PublicProjectsPage-CB272Sq-.js +0 -1
- package/dist/web/assets/ReviewPage-CelTZU4C.js +0 -1
- package/dist/web/assets/RoundtablesPage-C9dXfWCl.js +0 -2
- package/dist/web/assets/RoundtablesPage-DCbIBnBq.css +0 -1
- package/dist/web/assets/SearchableSelect-f7EHbyDL.js +0 -1
- package/dist/web/assets/SettingsPage-5g7mRN2F.css +0 -1
- package/dist/web/assets/SettingsPage-nAijmm5f.js +0 -1
- package/dist/web/assets/SharedJefaReportPage-CjpJ9bkk.js +0 -1
- package/dist/web/assets/UiDisclosure-CWlC91Zt.js +0 -1
- package/dist/web/assets/WritingTastePage-DaHWY61P.js +0 -1
- package/dist/web/assets/WritingTastePage-SMGF39mf.css +0 -1
- package/dist/web/assets/agent-profile-CBvJHGjt.css +0 -1
- package/dist/web/assets/client-B2cRl-7c.js +0 -1
- package/dist/web/assets/copy-D2LqwtPZ.js +0 -1
- package/dist/web/assets/index-CNp0tRNp.css +0 -1
- package/dist/web/assets/index-ulISYH02.js +0 -5
- package/dist/web/assets/shared-report-DEK9wvhl.js +0 -1
- package/dist/web/assets/useModalDialog-D8tiJfbc.js +0 -1
- package/docs/roundtable.md +0 -46
- package/src/agents/a2a/roundtable-participant.js +0 -374
- package/src/agents/claude-code/roundtable-participant.js +0 -24
- package/src/agents/codex/roundtable-config.js +0 -32
- package/src/agents/codex/roundtable-participant.js +0 -34
- package/src/agents/grok/roundtable-participant.js +0 -185
- package/src/agents/pi/roundtable-participant.js +0 -193
- package/src/agents/pi/roundtable-result-format.js +0 -183
- package/src/cli/roundtable-command.js +0 -79
- package/src/roundtables/application.js +0 -69
- package/src/roundtables/domain.js +0 -181
- package/src/roundtables/http-router.js +0 -58
- package/src/roundtables/mcp-server.js +0 -55
- package/src/roundtables/participant-registry.js +0 -12
- package/src/roundtables/process.js +0 -70
- package/src/roundtables/profiles.js +0 -84
- package/src/roundtables/result-contract.js +0 -47
- package/src/roundtables/server.js +0 -52
- package/src/roundtables/service.js +0 -480
- package/src/roundtables/store.js +0 -63
- package/src/roundtables/tool-contract.js +0 -58
- package/src/roundtables/turn-prompt.js +0 -24
- package/src/roundtables/worker.js +0 -85
- /package/dist/web/assets/{GrowthLoading-CIuQ1icy.css → client-CIuQ1icy.css} +0 -0
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import { setTimeout as delay } from 'node:timers/promises';
|
|
2
|
-
import { resolve } from 'node:path';
|
|
3
|
-
import { createRoundtableParticipant } from './participant-registry.js';
|
|
4
|
-
import { PARTICIPANT_RESULT_SCHEMA, parseRoundtableParticipantResult } from './result-contract.js';
|
|
5
|
-
import { createRoundtableTaskPrompt } from './turn-prompt.js';
|
|
6
|
-
|
|
7
|
-
export function validateCoordinatorUrl(value, { allowHttp = false } = {}) {
|
|
8
|
-
const url = new URL(value);
|
|
9
|
-
const loopback = ['127.0.0.1', 'localhost', '[::1]'].includes(url.hostname);
|
|
10
|
-
if (url.username || url.password || url.search || url.hash ||
|
|
11
|
-
(url.protocol !== 'https:' && !(url.protocol === 'http:' && (loopback || allowHttp)))) {
|
|
12
|
-
throw new TypeError('Coordinator requires HTTPS or explicit HTTP test mode');
|
|
13
|
-
}
|
|
14
|
-
return url.origin;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export async function runRoundtableWorker({ url, roomId, runtime, workspace = process.cwd(),
|
|
18
|
-
allowWrite = false, model, a2aUrl, env = process.env, signal, once = false,
|
|
19
|
-
allowHttp = false, fetchImpl = globalThis.fetch, participant: configuredParticipant, onEvent = () => {} }) {
|
|
20
|
-
const base = validateCoordinatorUrl(url, { allowHttp });
|
|
21
|
-
const token = env.FULI_ROUNDTABLE_TOKEN;
|
|
22
|
-
if (!token) throw new TypeError('Set FULI_ROUNDTABLE_TOKEN to your seat invitation');
|
|
23
|
-
const participant = configuredParticipant ?? createRoundtableParticipant(runtime, { workspace, model, url: a2aUrl, env });
|
|
24
|
-
const call = async (operation, input = {}, requestSignal = signal) => {
|
|
25
|
-
const response = await fetchImpl(`${base}/roundtable-peer/v1/rooms/${encodeURIComponent(roomId)}/${operation}`, {
|
|
26
|
-
method: 'POST', headers: { authorization: `Bearer ${token}`, 'content-type': 'application/json' },
|
|
27
|
-
body: JSON.stringify(input), redirect: 'error', signal: requestSignal
|
|
28
|
-
});
|
|
29
|
-
if (!response.ok) throw Object.assign(new Error(`Roundtable ${operation} failed (${response.status})`), { code: 'coordinator_error', status: response.status });
|
|
30
|
-
return response.json();
|
|
31
|
-
};
|
|
32
|
-
try {
|
|
33
|
-
const ready = await participant.preflight({ signal });
|
|
34
|
-
if (!ready.ready) throw Object.assign(new Error(`Participant not ready: ${ready.reason}`), { code: ready.code ?? ready.reason });
|
|
35
|
-
await call('join'); onEvent({ status: 'joined', runtime });
|
|
36
|
-
while (!signal?.aborted) {
|
|
37
|
-
const snapshot = await call('read');
|
|
38
|
-
if (['concluded', 'cancelled', 'failed'].includes(snapshot.room.status)) return { status: snapshot.room.status };
|
|
39
|
-
const turn = await call('claim');
|
|
40
|
-
if (!turn) { if (once) return { status: 'waiting_turn' }; await delay(1000, undefined, { signal }); continue; }
|
|
41
|
-
const controller = new AbortController();
|
|
42
|
-
const turnSignal = signal ? AbortSignal.any([signal, controller.signal]) : controller.signal;
|
|
43
|
-
const deadline = typeof turn.deadline === 'number' ? turn.deadline : Date.parse(turn.deadline);
|
|
44
|
-
if (!Number.isFinite(deadline)) throw new TypeError('Invalid coordinator deadline');
|
|
45
|
-
const timeout = setTimeout(() => controller.abort(), Math.max(1, deadline - Date.now()));
|
|
46
|
-
const watcher = setInterval(() => {
|
|
47
|
-
void call('read', {}, turnSignal).then((state) => {
|
|
48
|
-
const current = state.currentTurn;
|
|
49
|
-
if (['cancelled', 'failed', 'concluded'].includes(state.room.status) ||
|
|
50
|
-
!current || current.id !== turn.turnId || current.attemptId !== turn.attemptId ||
|
|
51
|
-
current.fence !== turn.fence || current.status !== 'claimed') controller.abort();
|
|
52
|
-
}).catch(() => controller.abort());
|
|
53
|
-
}, 1000);
|
|
54
|
-
let result;
|
|
55
|
-
try {
|
|
56
|
-
const seat = turn.context?.seat;
|
|
57
|
-
const permitted = allowWrite && turn.context?.phase === 'implementation' && seat?.role === 'implementer' &&
|
|
58
|
-
seat.execution?.permission === 'workspace-write' && resolve(seat.execution.workspace) === resolve(workspace);
|
|
59
|
-
const prompt = `${createRoundtableTaskPrompt(turn.context, { allowWrite: permitted })}\nReturn ONLY a JSON object matching this schema, within 16 KiB: ${JSON.stringify(PARTICIPANT_RESULT_SCHEMA)}. Implementation requires real artifact references. Review requires an explicit passed true/false verdict and evidence. For other phases passed can be null.`;
|
|
60
|
-
const dispatched = await participant.dispatch({ prompt, turn, signal: turnSignal, allowWrite: permitted, resultSchema: PARTICIPANT_RESULT_SCHEMA });
|
|
61
|
-
result = parseRoundtableParticipantResult(dispatched, turn.context?.phase);
|
|
62
|
-
} catch (error) {
|
|
63
|
-
const code = error.code ?? 'runtime_failed';
|
|
64
|
-
result = { body: error.body ?? `Participant interrupted: ${code}`,
|
|
65
|
-
status: ['waiting_auth', 'waiting_input'].includes(code) ? 'blocked' : 'failed',
|
|
66
|
-
blockedReason: ['waiting_auth', 'waiting_input'].includes(code) ? code : undefined,
|
|
67
|
-
actual: { sourceApplication: runtime, model: null, sessionId: null, usage: null,
|
|
68
|
-
evidenceLevel: 'execution_failure', ...error.actual,
|
|
69
|
-
...(error.remoteTaskId ? { remoteTaskId: error.remoteTaskId } : {}),
|
|
70
|
-
cancellationConfirmed: typeof error.cancellationConfirmed === 'boolean' ? error.cancellationConfirmed : null } };
|
|
71
|
-
} finally { clearTimeout(timeout); clearInterval(watcher); controller.abort(); }
|
|
72
|
-
const artifacts = (result.artifacts ?? []).map((artifact) => typeof artifact === 'string' ? artifact : {
|
|
73
|
-
id: artifact.id ?? artifact.artifactId, ...(artifact.name ? { name: artifact.name } : {}),
|
|
74
|
-
...(artifact.uri ? { uri: artifact.uri } : {}), ...(artifact.mimeType ? { mimeType: artifact.mimeType } : {})
|
|
75
|
-
});
|
|
76
|
-
const submitted = await call('submit', {
|
|
77
|
-
...result, turnId: turn.turnId, attemptId: turn.attemptId, fence: turn.fence,
|
|
78
|
-
artifacts, idempotencyKey: `attempt-${turn.attemptId}`, ...(result.kind ? { kind: result.kind } : {}), status: result.status ?? 'completed'
|
|
79
|
-
});
|
|
80
|
-
onEvent({ status: result.status ?? 'completed', runtime, turnId: turn.turnId });
|
|
81
|
-
if (once || ['failed', 'blocked'].includes(result.status)) return { status: result.status ?? 'completed', submitted };
|
|
82
|
-
}
|
|
83
|
-
return { status: 'cancelled' };
|
|
84
|
-
} finally { await participant.close?.(); }
|
|
85
|
-
}
|
|
File without changes
|