fuli-context 0.8.2 → 0.9.0-beta.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 +115 -12
- package/README.zh-CN.md +99 -12
- package/dist/web/assets/{AboutPage-fBq5VFoQ.js → AboutPage-u2Bv6cO-.js} +1 -1
- package/dist/web/assets/{AgentHand-CMZk5GjY.js → AgentHand-CsMcNXUm.js} +1 -1
- package/dist/web/assets/{AgentName-DRZHAIB2.js → AgentName-BboCA-Fd.js} +1 -1
- package/dist/web/assets/{AgentProfilePage-BPQEfMhB.js → AgentProfilePage-Dyux6qE3.js} +1 -1
- package/dist/web/assets/AgentsDirectoryPage-BEJdvmX7.js +1 -0
- package/dist/web/assets/{ConnectionsPage-COb56qnk.js → ConnectionsPage-Dw_hK_EM.js} +1 -1
- package/dist/web/assets/{EmployeeRecruitDialog-BLTpjCcK.js → EmployeeRecruitDialog-DP_ktv3w.js} +1 -1
- package/dist/web/assets/{EmployeeWorkbenchPage-HUd-gne2.js → EmployeeWorkbenchPage-CAt8lVnr.js} +1 -1
- package/dist/web/assets/{GrowthLoading-Bu_kH-I8.js → GrowthLoading-DIwqGFSc.js} +1 -1
- package/dist/web/assets/{KnowledgeEditDialog-BTwXXRCD.js → KnowledgeEditDialog-Degd9AGD.js} +1 -1
- package/dist/web/assets/{KnowledgeInspector-Ct5hl2--.js → KnowledgeInspector-yms1ysZ4.js} +1 -1
- package/dist/web/assets/{KnowledgeOrganizerPage-DMC8Hh43.js → KnowledgeOrganizerPage-C64wNn8a.js} +1 -1
- package/dist/web/assets/KnowledgePage-BTFEXzgi.js +1 -0
- package/dist/web/assets/{KnowledgeWorkspace-DmHIc0jb.js → KnowledgeWorkspace-BsF1X4Aq.js} +1 -1
- package/dist/web/assets/{NotFoundPage-C0yOR9T9.js → NotFoundPage-DfaNTiD1.js} +1 -1
- package/dist/web/assets/{OverviewPage-BreX_kb4.js → OverviewPage-VXMfcWFI.js} +1 -1
- package/dist/web/assets/{PersonalProfilePage-CX1a6_E3.js → PersonalProfilePage-C1LBhcYu.js} +1 -1
- package/dist/web/assets/PersonalProjectsPage-B5lV4ZJW.js +1 -0
- package/dist/web/assets/ProjectAgentFirstTask-6afJ8HUe.css +1 -0
- package/dist/web/assets/ProjectAgentFirstTask-DF-IvEqp.js +1 -0
- package/dist/web/assets/ProjectAgentsPage-CgL92gng.js +13 -0
- package/dist/web/assets/ProjectAgentsPage-CoJ4qQlA.css +1 -0
- package/dist/web/assets/{ProjectScopePicker-DVHfXX1f.js → ProjectScopePicker-CZUMdyYz.js} +1 -1
- package/dist/web/assets/{PublicProjectsPage-CtctKml1.js → PublicProjectsPage-e4CpxHk9.js} +1 -1
- package/dist/web/assets/{ReviewPage-DUqaK-do.js → ReviewPage-DugEaFvI.js} +1 -1
- package/dist/web/assets/RoundtablesPage-642YtZBC.js +2 -0
- package/dist/web/assets/RoundtablesPage-DCbIBnBq.css +1 -0
- package/dist/web/assets/{SearchableSelect-BZtyYmZN.js → SearchableSelect-Do6X3fXi.js} +1 -1
- package/dist/web/assets/{SettingsPage-CB4ymLr8.js → SettingsPage-wqYxDPyu.js} +1 -1
- package/dist/web/assets/{SharedJefaReportPage-CbFtrDCY.js → SharedJefaReportPage-CNQDezJr.js} +1 -1
- package/dist/web/assets/{WritingTastePage-B7lSzs2z.js → WritingTastePage-CAUvbDlL.js} +1 -1
- package/dist/web/assets/{agent-profile.css_vue_type_style_index_0_src_true_lang-C22UdfU0.js → agent-profile.css_vue_type_style_index_0_src_true_lang-DHOcWSe_.js} +1 -1
- package/dist/web/assets/{catalog-DU4Kfd-N.js → catalog-JmKyJnKL.js} +1 -1
- package/dist/web/assets/{client-CEHkJJ-5.js → client-DTQ_tUr2.js} +1 -1
- package/dist/web/assets/{console--CZxc3PW.js → console-CrhIK67Y.js} +1 -1
- package/dist/web/assets/{conversation-launcher-settings-Co1RlTFH.js → conversation-launcher-settings-fUWCt3XG.js} +1 -1
- package/dist/web/assets/copy-CX6pyzAG.js +1 -0
- package/dist/web/assets/i18n-CIIxzhPZ.js +10 -0
- package/dist/web/assets/{identity-CsowvtIm.js → identity-CdFITIOu.js} +1 -1
- package/dist/web/assets/{index-CWMqDq8g.css → index-CYZi7E1e.css} +1 -1
- package/dist/web/assets/index-DMoxVzDU.js +2 -0
- package/dist/web/assets/{model-CGpllrds.js → model-CJsrDUNb.js} +1 -1
- package/dist/web/assets/{personal-profile-graph-BNTG4PSY.js → personal-profile-graph-CQLOait6.js} +1 -1
- package/dist/web/assets/{shared-report-BFUJqqQe.js → shared-report-Cll2Yj8W.js} +1 -1
- package/dist/web/assets/{task-evidence-BUu7yYIn.js → task-evidence-DTiPCs7r.js} +1 -1
- package/dist/web/assets/{useApi-CROJJdhE-raNlHRDl.js → useApi-CROJJdhE-fcdVGInY.js} +1 -1
- package/dist/web/assets/{useModalDialog-CroGk2Cs.js → useModalDialog-B-45idX9.js} +1 -1
- package/dist/web/assets/{vue-router-JFYBLXB1.js → vue-router-BUX6njIv.js} +1 -1
- package/dist/web/index.html +12 -11
- package/docs/agent-conversations-and-collaboration.md +18 -1
- package/docs/employee-agents.md +20 -1
- package/docs/roundtable-beta-testing.md +102 -0
- package/docs/roundtable-beta-validation.md +125 -0
- package/docs/roundtable-research.md +142 -0
- package/graph-provider/fuli_graph/app.py +5 -0
- package/graph-provider/fuli_graph/models.py +1 -0
- package/graph-provider/fuli_graph/project_agent_task_models.py +1 -0
- package/graph-provider/fuli_graph/store_project_agent_context.py +22 -1
- package/graph-provider/fuli_graph/store_project_agent_task_reads.py +23 -8
- package/graph-provider/fuli_graph/store_project_agent_task_staffing.py +86 -11
- package/graph-provider/fuli_graph/store_project_agent_tasks.py +1 -0
- package/graph-provider/fuli_graph/store_records.py +1 -0
- package/graph-provider/fuli_graph/store_task_contexts.py +2 -1
- package/graph-provider/fuli_graph/task_context_adoption.py +9 -4
- package/graph-provider/fuli_graph/task_context_temporary_owner.py +25 -0
- package/graph-provider/fuli_graph/temporary_project_scope.py +88 -0
- package/graph-provider/pyproject.toml +1 -1
- package/npm-shrinkwrap.json +131 -79
- package/package.json +8 -4
- package/skills/capturing-session-knowledge/SKILL.md +20 -5
- package/skills/operating-fuli/SKILL.md +8 -0
- package/src/agent-tools/graph-definitions.js +1 -1
- package/src/agent-tools/interface-catalog.js +5 -0
- package/src/agent-tools/project-agent-definitions.js +2 -2
- package/src/agent-tools.js +9 -2
- package/src/agents/a2a/roundtable-participant.js +374 -0
- package/src/agents/claude-code/roundtable-participant.js +24 -0
- package/src/agents/codex/roundtable-config.js +29 -0
- package/src/agents/codex/roundtable-participant.js +34 -0
- package/src/agents/grok/roundtable-participant.js +185 -0
- package/src/agents/identity-receipt.js +29 -0
- package/src/agents/pi/roundtable-participant.js +193 -0
- package/src/agents/pi/roundtable-result-format.js +183 -0
- package/src/cli/command-registry.js +2 -0
- package/src/cli/roundtable-command.js +59 -0
- package/src/cli.js +5 -0
- package/src/conversations/task-context-view.js +3 -1
- package/src/employees/service.js +9 -2
- package/src/employees/task-entry.js +5 -1
- package/src/graphiti/agent-conversations.js +15 -1
- package/src/graphiti/agent-knowledge-workflows.js +14 -5
- package/src/graphiti/federated-application.js +9 -41
- package/src/graphiti/project-agent-mapping.js +1 -0
- package/src/graphiti/project-agent-mention.js +35 -0
- package/src/graphiti/project-agent-task-entry.js +22 -3
- package/src/graphiti/project-agent-workflows.js +31 -12
- package/src/graphiti/project-path-context.js +1 -0
- package/src/graphiti/provider-client.js +3 -0
- package/src/graphiti/task-entry-preferences.js +50 -0
- package/src/graphiti/temporary-project-scope.js +46 -0
- package/src/http/api-router.js +2 -0
- package/src/http/error-mapping.js +2 -0
- package/src/mcp/provider-task-context-registry.js +10 -0
- package/src/mcp/session-id.js +1 -0
- package/src/mcp/tool-annotations.js +2 -0
- package/src/roundtables/application.js +69 -0
- package/src/roundtables/domain.js +181 -0
- package/src/roundtables/http-router.js +56 -0
- package/src/roundtables/mcp-server.js +48 -0
- package/src/roundtables/participant-registry.js +12 -0
- package/src/roundtables/process.js +70 -0
- package/src/roundtables/result-contract.js +47 -0
- package/src/roundtables/server.js +52 -0
- package/src/roundtables/service.js +396 -0
- package/src/roundtables/store.js +59 -0
- package/src/roundtables/tool-contract.js +41 -0
- package/src/roundtables/turn-prompt.js +21 -0
- package/src/roundtables/worker.js +85 -0
- package/dist/web/assets/AgentsDirectoryPage-CKZfrcuD.js +0 -1
- package/dist/web/assets/KnowledgePage-uXW1Eovz.js +0 -1
- package/dist/web/assets/PersonalProjectsPage-Br1S8ETM.js +0 -1
- package/dist/web/assets/ProjectAgentsPage-CA04h1Uf.js +0 -13
- package/dist/web/assets/ProjectAgentsPage-CZWWV4Kw.css +0 -1
- package/dist/web/assets/i18n-BtOOoyJd.js +0 -9
- package/dist/web/assets/index-7X3LGByg.js +0 -2
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"""Recover only the task-only employee already bound to this host lifecycle."""
|
|
2
|
+
|
|
3
|
+
from .project_agent_context_models import ProjectAgentContextResolution
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
async def temporary_task_owner(store, actor, request):
|
|
7
|
+
if not request.session_id or not hasattr(store, 'current_task_context'):
|
|
8
|
+
return None
|
|
9
|
+
context = await store.current_task_context(actor, request.personal_space_id,
|
|
10
|
+
request.session_id, request.source_application)
|
|
11
|
+
if not context or context.get('agent_memory_scope') != 'task_only':
|
|
12
|
+
return None
|
|
13
|
+
if (context.get('personal_project_id') != request.personal_project_id
|
|
14
|
+
or (request.turn_id and context.get('turn_id') != request.turn_id)
|
|
15
|
+
or (request.agent_id and context.get('project_agent_id') != request.agent_id)):
|
|
16
|
+
return None
|
|
17
|
+
agent = await store.get_project_agent(actor, request.personal_space_id,
|
|
18
|
+
request.personal_project_id, context['project_agent_id'])
|
|
19
|
+
if (agent.profile.agent_type != 'temporary'
|
|
20
|
+
or agent.temporary_task_id != context.get('coordination_task_id')
|
|
21
|
+
or agent.profile.status != 'active'
|
|
22
|
+
or request.source_application not in agent.profile.allowed_clients):
|
|
23
|
+
return ProjectAgentContextResolution(status='agent_unavailable', reason='agent_unavailable')
|
|
24
|
+
return ProjectAgentContextResolution(status='ready', agent=agent, reason='active_task_owner',
|
|
25
|
+
candidate_count=1, match_basis=['temporary employee bound to this exact host task'], worker_started=False)
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"""Idempotent task scopes; retain audit history without directory registration."""
|
|
2
|
+
|
|
3
|
+
import hashlib
|
|
4
|
+
import json
|
|
5
|
+
|
|
6
|
+
from fastapi import HTTPException
|
|
7
|
+
from pydantic import Field
|
|
8
|
+
|
|
9
|
+
from .models import ProjectProfile, SourceApplication, StrictModel
|
|
10
|
+
from .provider_values import now_utc, stable_uuid
|
|
11
|
+
from .store_transactions import TransactionQueryDriver, query_store_transaction
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
TEMPORARY_SCOPE = {'type': 'temporary', 'lifetime': 'task', 'persisted': True}
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class TemporaryProjectEnsure(StrictModel):
|
|
18
|
+
personal_space_id: str = Field(min_length=1, max_length=128)
|
|
19
|
+
scope_key: str = Field(pattern=r'^[a-f0-9]{64}$')
|
|
20
|
+
source_application: SourceApplication
|
|
21
|
+
task_context_token: str | None = Field(default=None, pattern=r'^fuli-task-[a-zA-Z0-9-]{8,128}$')
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
async def ensure_temporary_project(store, actor, request):
|
|
25
|
+
if not isinstance(store.runtime.driver, TransactionQueryDriver):
|
|
26
|
+
async with query_store_transaction(store) as scoped:
|
|
27
|
+
return await ensure_temporary_project(scoped, actor, request)
|
|
28
|
+
store._require_personal()
|
|
29
|
+
await store.authorize(actor, request.personal_space_id, 'maintainer')
|
|
30
|
+
project_id = f'temporary-{request.scope_key}'
|
|
31
|
+
if request.task_context_token:
|
|
32
|
+
expected = hashlib.sha256(json.dumps([
|
|
33
|
+
'fuli-temporary-task-v1', request.personal_space_id,
|
|
34
|
+
request.source_application, request.task_context_token, None,
|
|
35
|
+
], separators=(',', ':'), ensure_ascii=False).encode()).hexdigest()
|
|
36
|
+
if expected != request.scope_key:
|
|
37
|
+
raise HTTPException(409, 'Temporary scope does not belong to this task context')
|
|
38
|
+
await _bind_task_context(store, actor, request, project_id)
|
|
39
|
+
node_id = stable_uuid(store.settings.provider_id, request.personal_space_id,
|
|
40
|
+
'personal-project', project_id)
|
|
41
|
+
profile = ProjectProfile(name='临时任务 / Temporary task', lifecycle='active',
|
|
42
|
+
purpose='Isolated task scope created by explicit Agent coordination.',
|
|
43
|
+
boundaries=['Task-local context only; no implicit project inheritance.',
|
|
44
|
+
'Audit history is retained after the task ends.'])
|
|
45
|
+
records, _, _ = await store.runtime.driver.execute_query(
|
|
46
|
+
'''
|
|
47
|
+
MATCH (space:FuliSpace {id: $space_id, kind: 'personal'})
|
|
48
|
+
MERGE (project:FuliPersonalProject {id: $id})
|
|
49
|
+
ON CREATE SET project.project_id = $project_id,
|
|
50
|
+
project.publication_key = $publication_key, project.scope_type = 'temporary',
|
|
51
|
+
project.scope_key = $scope_key, project.profile_json = $profile_json,
|
|
52
|
+
project.name = $name, project.created_at = $now, project.updated_at = $now
|
|
53
|
+
WITH space, project
|
|
54
|
+
WHERE project.scope_type = 'temporary' AND project.scope_key = $scope_key
|
|
55
|
+
MERGE (space)-[:CONTAINS_PROJECT]->(project)
|
|
56
|
+
RETURN project
|
|
57
|
+
''', space_id=request.personal_space_id, id=node_id, project_id=project_id,
|
|
58
|
+
publication_key=stable_uuid(node_id, 'publication'), scope_key=request.scope_key,
|
|
59
|
+
profile_json=profile.model_dump_json(), name=profile.name, now=now_utc())
|
|
60
|
+
if not records:
|
|
61
|
+
raise HTTPException(409, 'Temporary scope conflicts with an existing project')
|
|
62
|
+
return store._personal_project(records[0]['project'], request.personal_space_id)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
async def _bind_task_context(store, actor, request, project_id):
|
|
66
|
+
record = await store.get_task_context(actor, request.personal_space_id,
|
|
67
|
+
request.task_context_token, request.source_application)
|
|
68
|
+
if record.get('personal_project_id') == project_id and record.get('project_scope') == TEMPORARY_SCOPE:
|
|
69
|
+
return
|
|
70
|
+
if record.get('personal_project_id') or record.get('project_agent_id') or record.get('checkpoint'):
|
|
71
|
+
raise HTTPException(409, 'Task context cannot change its project scope')
|
|
72
|
+
before = json.dumps(record, ensure_ascii=False)
|
|
73
|
+
record.update(personal_project_id=project_id, project_scope=TEMPORARY_SCOPE)
|
|
74
|
+
rows, _, _ = await store.runtime.driver.execute_query(
|
|
75
|
+
'''
|
|
76
|
+
MATCH (:FuliSpace {id: $space_id, kind: 'personal'})-[:HAS_TASK_CONTEXT_SESSION]->
|
|
77
|
+
(session:FuliTaskContextSession)-[:HAS_CONTEXT]->(context:FuliTaskContext {token: $token})
|
|
78
|
+
SET session.write_serial = coalesce(session.write_serial, 0) + 1
|
|
79
|
+
WITH session, context
|
|
80
|
+
WHERE session.current_token = context.token AND context.personal_project_id IS NULL
|
|
81
|
+
AND context.project_agent_id IS NULL AND context.fingerprint IS NULL
|
|
82
|
+
AND NOT context.completed AND context.record_json = $before
|
|
83
|
+
SET context.personal_project_id = $project_id, context.record_json = $record_json
|
|
84
|
+
RETURN context.record_json AS record_json
|
|
85
|
+
''', space_id=request.personal_space_id, token=request.task_context_token,
|
|
86
|
+
project_id=project_id, before=before, record_json=json.dumps(record, ensure_ascii=False))
|
|
87
|
+
if not rows:
|
|
88
|
+
raise HTTPException(409, 'Task context changed or was superseded during temporary scope binding')
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fuli-context",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0-beta.1",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "fuli-context",
|
|
9
|
-
"version": "0.
|
|
9
|
+
"version": "0.9.0-beta.1",
|
|
10
10
|
"license": "Apache-2.0",
|
|
11
11
|
"dependencies": {
|
|
12
|
+
"@a2a-js/sdk": "1.3.0",
|
|
12
13
|
"@hono/node-server": "2.0.12",
|
|
13
|
-
"@modelcontextprotocol/sdk": "^1.
|
|
14
|
+
"@modelcontextprotocol/sdk": "^1.31.0",
|
|
14
15
|
"zod": "^4.4.3"
|
|
15
16
|
},
|
|
16
17
|
"bin": {
|
|
@@ -31,7 +32,7 @@
|
|
|
31
32
|
"typescript": "~6.0.0",
|
|
32
33
|
"vite": "^8.1.5",
|
|
33
34
|
"vitest": "^4.1.10",
|
|
34
|
-
"vue": "^3.5.
|
|
35
|
+
"vue": "^3.5.42",
|
|
35
36
|
"vue-i18n": "^11.4.8",
|
|
36
37
|
"vue-router": "^5.2.0",
|
|
37
38
|
"vue-tsc": "^3.3.8"
|
|
@@ -40,6 +41,53 @@
|
|
|
40
41
|
"node": ">=24.12"
|
|
41
42
|
}
|
|
42
43
|
},
|
|
44
|
+
"node_modules/@a2a-js/sdk": {
|
|
45
|
+
"version": "1.3.0",
|
|
46
|
+
"resolved": "https://registry.npmjs.org/@a2a-js/sdk/-/sdk-1.3.0.tgz",
|
|
47
|
+
"integrity": "sha512-OpK4nygUnLKlpTFZlM2IrYu7f3c/B7c4u4Z14+vgMq24lEINTVCxH/BqZx+GL92rNf7CoBL5oTP5UhNsl75yyg==",
|
|
48
|
+
"license": "Apache-2.0",
|
|
49
|
+
"dependencies": {
|
|
50
|
+
"jose": "^6.2.3"
|
|
51
|
+
},
|
|
52
|
+
"bin": {
|
|
53
|
+
"a2a-db": "dist/cli/a2a_db.js"
|
|
54
|
+
},
|
|
55
|
+
"engines": {
|
|
56
|
+
"node": ">=20"
|
|
57
|
+
},
|
|
58
|
+
"peerDependencies": {
|
|
59
|
+
"@bufbuild/protobuf": "^2.10.2",
|
|
60
|
+
"@grpc/grpc-js": "^1.11.0",
|
|
61
|
+
"better-sqlite3": "^12.0.0 || ^13.0.0",
|
|
62
|
+
"express": "^4.21.2 || ^5.1.0",
|
|
63
|
+
"kysely": "^0.28.17 || ^0.29.0",
|
|
64
|
+
"mysql2": "^3.0.0",
|
|
65
|
+
"pg": "^8.0.0"
|
|
66
|
+
},
|
|
67
|
+
"peerDependenciesMeta": {
|
|
68
|
+
"@bufbuild/protobuf": {
|
|
69
|
+
"optional": true
|
|
70
|
+
},
|
|
71
|
+
"@grpc/grpc-js": {
|
|
72
|
+
"optional": true
|
|
73
|
+
},
|
|
74
|
+
"better-sqlite3": {
|
|
75
|
+
"optional": true
|
|
76
|
+
},
|
|
77
|
+
"express": {
|
|
78
|
+
"optional": true
|
|
79
|
+
},
|
|
80
|
+
"kysely": {
|
|
81
|
+
"optional": true
|
|
82
|
+
},
|
|
83
|
+
"mysql2": {
|
|
84
|
+
"optional": true
|
|
85
|
+
},
|
|
86
|
+
"pg": {
|
|
87
|
+
"optional": true
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
},
|
|
43
91
|
"node_modules/@asamuzakjp/css-color": {
|
|
44
92
|
"version": "5.1.11",
|
|
45
93
|
"resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-5.1.11.tgz",
|
|
@@ -180,13 +228,13 @@
|
|
|
180
228
|
}
|
|
181
229
|
},
|
|
182
230
|
"node_modules/@babel/parser": {
|
|
183
|
-
"version": "7.29.
|
|
184
|
-
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.
|
|
185
|
-
"integrity": "sha512-
|
|
231
|
+
"version": "7.29.9",
|
|
232
|
+
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.9.tgz",
|
|
233
|
+
"integrity": "sha512-CjXrNHTnvqBVqHgdBysY3vk2T8tpJHb5/RMeHJBTyVa9xgugCB0CJTx/3oO8RV2QRQP391RWpB7D6hLjm8V9uA==",
|
|
186
234
|
"dev": true,
|
|
187
235
|
"license": "MIT",
|
|
188
236
|
"dependencies": {
|
|
189
|
-
"@babel/types": "^7.29.
|
|
237
|
+
"@babel/types": "^7.29.8"
|
|
190
238
|
},
|
|
191
239
|
"bin": {
|
|
192
240
|
"parser": "bin/babel-parser.js"
|
|
@@ -196,9 +244,9 @@
|
|
|
196
244
|
}
|
|
197
245
|
},
|
|
198
246
|
"node_modules/@babel/types": {
|
|
199
|
-
"version": "7.29.
|
|
200
|
-
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.
|
|
201
|
-
"integrity": "sha512-
|
|
247
|
+
"version": "7.29.8",
|
|
248
|
+
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz",
|
|
249
|
+
"integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==",
|
|
202
250
|
"dev": true,
|
|
203
251
|
"license": "MIT",
|
|
204
252
|
"dependencies": {
|
|
@@ -560,12 +608,12 @@
|
|
|
560
608
|
}
|
|
561
609
|
},
|
|
562
610
|
"node_modules/@modelcontextprotocol/sdk": {
|
|
563
|
-
"version": "1.
|
|
564
|
-
"resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.
|
|
565
|
-
"integrity": "sha512-
|
|
611
|
+
"version": "1.31.0",
|
|
612
|
+
"resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.31.0.tgz",
|
|
613
|
+
"integrity": "sha512-UvTMgnNlnIBO/22ob2RcVGDlcvOslQs8T59+FTGdA0L27a39fdGF/EDETNtDVK4DZGpwomlsYpRdA8UXcVL/pw==",
|
|
566
614
|
"license": "MIT",
|
|
567
615
|
"dependencies": {
|
|
568
|
-
"@hono/node-server": "^1.19.9",
|
|
616
|
+
"@hono/node-server": "^1.19.9 || ^2.0.5",
|
|
569
617
|
"ajv": "^8.17.1",
|
|
570
618
|
"ajv-formats": "^3.0.1",
|
|
571
619
|
"content-type": "^1.0.5",
|
|
@@ -1459,14 +1507,14 @@
|
|
|
1459
1507
|
}
|
|
1460
1508
|
},
|
|
1461
1509
|
"node_modules/@vue/compiler-core": {
|
|
1462
|
-
"version": "3.5.
|
|
1463
|
-
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.
|
|
1464
|
-
"integrity": "sha512-
|
|
1510
|
+
"version": "3.5.42",
|
|
1511
|
+
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.42.tgz",
|
|
1512
|
+
"integrity": "sha512-2Ye1ilMtKXxl8qZUrQ5j0CdgenFp/HFQmta6rfRyfEsTG69L6Wk+tWuNoHYHMx9E8tF2Slvdg1FuwDvAXdy1LQ==",
|
|
1465
1513
|
"dev": true,
|
|
1466
1514
|
"license": "MIT",
|
|
1467
1515
|
"dependencies": {
|
|
1468
|
-
"@babel/parser": "^7.29.
|
|
1469
|
-
"@vue/shared": "3.5.
|
|
1516
|
+
"@babel/parser": "^7.29.8",
|
|
1517
|
+
"@vue/shared": "3.5.42",
|
|
1470
1518
|
"entities": "^7.0.1",
|
|
1471
1519
|
"estree-walker": "^2.0.2",
|
|
1472
1520
|
"source-map-js": "^1.2.1"
|
|
@@ -1486,28 +1534,28 @@
|
|
|
1486
1534
|
}
|
|
1487
1535
|
},
|
|
1488
1536
|
"node_modules/@vue/compiler-dom": {
|
|
1489
|
-
"version": "3.5.
|
|
1490
|
-
"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.
|
|
1491
|
-
"integrity": "sha512-
|
|
1537
|
+
"version": "3.5.42",
|
|
1538
|
+
"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.42.tgz",
|
|
1539
|
+
"integrity": "sha512-qbhQZEFmycr+ni/qyuccS4sucNN7VAbDfbkvNxWOX2VfgFm90MNs3/UhRNKoPMEIVn0F8gdlYjLPvqxHwHeQOA==",
|
|
1492
1540
|
"dev": true,
|
|
1493
1541
|
"license": "MIT",
|
|
1494
1542
|
"dependencies": {
|
|
1495
|
-
"@vue/compiler-core": "3.5.
|
|
1496
|
-
"@vue/shared": "3.5.
|
|
1543
|
+
"@vue/compiler-core": "3.5.42",
|
|
1544
|
+
"@vue/shared": "3.5.42"
|
|
1497
1545
|
}
|
|
1498
1546
|
},
|
|
1499
1547
|
"node_modules/@vue/compiler-sfc": {
|
|
1500
|
-
"version": "3.5.
|
|
1501
|
-
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.
|
|
1502
|
-
"integrity": "sha512-
|
|
1548
|
+
"version": "3.5.42",
|
|
1549
|
+
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.42.tgz",
|
|
1550
|
+
"integrity": "sha512-fkCAFB4okcAANGMThboWnScp/gzWjU0ZSkVnjTIiplmMDq2uq0tIB3j+xVu4rhv5rvOgBySCysudmbMd6xRRqw==",
|
|
1503
1551
|
"dev": true,
|
|
1504
1552
|
"license": "MIT",
|
|
1505
1553
|
"dependencies": {
|
|
1506
|
-
"@babel/parser": "^7.29.
|
|
1507
|
-
"@vue/compiler-core": "3.5.
|
|
1508
|
-
"@vue/compiler-dom": "3.5.
|
|
1509
|
-
"@vue/compiler-ssr": "3.5.
|
|
1510
|
-
"@vue/shared": "3.5.
|
|
1554
|
+
"@babel/parser": "^7.29.8",
|
|
1555
|
+
"@vue/compiler-core": "3.5.42",
|
|
1556
|
+
"@vue/compiler-dom": "3.5.42",
|
|
1557
|
+
"@vue/compiler-ssr": "3.5.42",
|
|
1558
|
+
"@vue/shared": "3.5.42",
|
|
1511
1559
|
"estree-walker": "^2.0.2",
|
|
1512
1560
|
"magic-string": "^0.30.21",
|
|
1513
1561
|
"postcss": "^8.5.19",
|
|
@@ -1515,14 +1563,14 @@
|
|
|
1515
1563
|
}
|
|
1516
1564
|
},
|
|
1517
1565
|
"node_modules/@vue/compiler-ssr": {
|
|
1518
|
-
"version": "3.5.
|
|
1519
|
-
"resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.
|
|
1520
|
-
"integrity": "sha512-
|
|
1566
|
+
"version": "3.5.42",
|
|
1567
|
+
"resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.42.tgz",
|
|
1568
|
+
"integrity": "sha512-xmLk3wLkbizPAiLyomjgFFosf2ys9b5Ghb+oh/k2tnvipNz8OFrQOiTcWCzyK7MpBp9KkyGtfvgfLUivbmuGYA==",
|
|
1521
1569
|
"dev": true,
|
|
1522
1570
|
"license": "MIT",
|
|
1523
1571
|
"dependencies": {
|
|
1524
|
-
"@vue/compiler-dom": "3.5.
|
|
1525
|
-
"@vue/shared": "3.5.
|
|
1572
|
+
"@vue/compiler-dom": "3.5.42",
|
|
1573
|
+
"@vue/shared": "3.5.42"
|
|
1526
1574
|
}
|
|
1527
1575
|
},
|
|
1528
1576
|
"node_modules/@vue/devtools-api": {
|
|
@@ -1572,55 +1620,55 @@
|
|
|
1572
1620
|
}
|
|
1573
1621
|
},
|
|
1574
1622
|
"node_modules/@vue/reactivity": {
|
|
1575
|
-
"version": "3.5.
|
|
1576
|
-
"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.
|
|
1577
|
-
"integrity": "sha512-
|
|
1623
|
+
"version": "3.5.42",
|
|
1624
|
+
"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.42.tgz",
|
|
1625
|
+
"integrity": "sha512-TzNNfKpb7hDxbQltwAut8VDQA5YP+BuRlxntHUuRjyKwlMvmAPbs3unhCvieijifY6vFfVBwsS7wG/C7uq+bEQ==",
|
|
1578
1626
|
"dev": true,
|
|
1579
1627
|
"license": "MIT",
|
|
1580
1628
|
"dependencies": {
|
|
1581
|
-
"@vue/shared": "3.5.
|
|
1629
|
+
"@vue/shared": "3.5.42"
|
|
1582
1630
|
}
|
|
1583
1631
|
},
|
|
1584
1632
|
"node_modules/@vue/runtime-core": {
|
|
1585
|
-
"version": "3.5.
|
|
1586
|
-
"resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.
|
|
1587
|
-
"integrity": "sha512-
|
|
1633
|
+
"version": "3.5.42",
|
|
1634
|
+
"resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.42.tgz",
|
|
1635
|
+
"integrity": "sha512-9uACtuHs7vJGkm5Bp3xu4xRDLFTIYy5DgxpToVjqGIAhAEKwQfsaLvKINhM6nFVp6bZPRFGdDqd1g52MqKsotA==",
|
|
1588
1636
|
"dev": true,
|
|
1589
1637
|
"license": "MIT",
|
|
1590
1638
|
"dependencies": {
|
|
1591
|
-
"@vue/reactivity": "3.5.
|
|
1592
|
-
"@vue/shared": "3.5.
|
|
1639
|
+
"@vue/reactivity": "3.5.42",
|
|
1640
|
+
"@vue/shared": "3.5.42"
|
|
1593
1641
|
}
|
|
1594
1642
|
},
|
|
1595
1643
|
"node_modules/@vue/runtime-dom": {
|
|
1596
|
-
"version": "3.5.
|
|
1597
|
-
"resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.
|
|
1598
|
-
"integrity": "sha512-
|
|
1644
|
+
"version": "3.5.42",
|
|
1645
|
+
"resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.42.tgz",
|
|
1646
|
+
"integrity": "sha512-rsCmhiWLaRxGltLwhlCWyYkFn7WAbKRh0q17eZ1A6Dq6eqc2ACQ61IIryxz0LrsvCzHSilLA9JHovVwM8CNE2g==",
|
|
1599
1647
|
"dev": true,
|
|
1600
1648
|
"license": "MIT",
|
|
1601
1649
|
"dependencies": {
|
|
1602
|
-
"@vue/reactivity": "3.5.
|
|
1603
|
-
"@vue/runtime-core": "3.5.
|
|
1604
|
-
"@vue/shared": "3.5.
|
|
1650
|
+
"@vue/reactivity": "3.5.42",
|
|
1651
|
+
"@vue/runtime-core": "3.5.42",
|
|
1652
|
+
"@vue/shared": "3.5.42",
|
|
1605
1653
|
"csstype": "^3.2.3"
|
|
1606
1654
|
}
|
|
1607
1655
|
},
|
|
1608
1656
|
"node_modules/@vue/server-renderer": {
|
|
1609
|
-
"version": "3.5.
|
|
1610
|
-
"resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.
|
|
1611
|
-
"integrity": "sha512-
|
|
1657
|
+
"version": "3.5.42",
|
|
1658
|
+
"resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.42.tgz",
|
|
1659
|
+
"integrity": "sha512-2++5dUyYS4gvo7xQXSECUDhB7TS0aOl5SeVfC5qSq1Jgfhjvegw1zqhwTIR3imZ+QYPJQw9gfcFvXGAjGZ7ajQ==",
|
|
1612
1660
|
"dev": true,
|
|
1613
1661
|
"license": "MIT",
|
|
1614
1662
|
"dependencies": {
|
|
1615
|
-
"@vue/compiler-ssr": "3.5.
|
|
1616
|
-
"@vue/runtime-dom": "3.5.
|
|
1617
|
-
"@vue/shared": "3.5.
|
|
1663
|
+
"@vue/compiler-ssr": "3.5.42",
|
|
1664
|
+
"@vue/runtime-dom": "3.5.42",
|
|
1665
|
+
"@vue/shared": "3.5.42"
|
|
1618
1666
|
}
|
|
1619
1667
|
},
|
|
1620
1668
|
"node_modules/@vue/shared": {
|
|
1621
|
-
"version": "3.5.
|
|
1622
|
-
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.
|
|
1623
|
-
"integrity": "sha512-
|
|
1669
|
+
"version": "3.5.42",
|
|
1670
|
+
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.42.tgz",
|
|
1671
|
+
"integrity": "sha512-2rPxex1jQf4jvl9MOHl6YaXCPcrNqz/FstMOEh3QWY+/OME9nQTvl9WYeCwhW7AFjaR0SnngZGlp/wkR6rkI6g==",
|
|
1624
1672
|
"dev": true,
|
|
1625
1673
|
"license": "MIT"
|
|
1626
1674
|
},
|
|
@@ -4366,9 +4414,9 @@
|
|
|
4366
4414
|
"license": "ISC"
|
|
4367
4415
|
},
|
|
4368
4416
|
"node_modules/proxy-addr": {
|
|
4369
|
-
"version": "2.0.
|
|
4370
|
-
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.
|
|
4371
|
-
"integrity": "sha512-
|
|
4417
|
+
"version": "2.0.8",
|
|
4418
|
+
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.8.tgz",
|
|
4419
|
+
"integrity": "sha512-5nnx0yGyVUcY6t9RnWcARWtwT9F1D8O9rt08htPvnd49W1IgZtmLkhu9WfMzQj1cFxjHIO6connUNVW5k7AVyQ==",
|
|
4372
4420
|
"license": "MIT",
|
|
4373
4421
|
"dependencies": {
|
|
4374
4422
|
"forwarded": "0.2.0",
|
|
@@ -4376,6 +4424,10 @@
|
|
|
4376
4424
|
},
|
|
4377
4425
|
"engines": {
|
|
4378
4426
|
"node": ">= 0.10"
|
|
4427
|
+
},
|
|
4428
|
+
"funding": {
|
|
4429
|
+
"type": "opencollective",
|
|
4430
|
+
"url": "https://opencollective.com/express"
|
|
4379
4431
|
}
|
|
4380
4432
|
},
|
|
4381
4433
|
"node_modules/punycode": {
|
|
@@ -4662,9 +4714,9 @@
|
|
|
4662
4714
|
}
|
|
4663
4715
|
},
|
|
4664
4716
|
"node_modules/shell-quote": {
|
|
4665
|
-
"version": "1.
|
|
4666
|
-
"resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.
|
|
4667
|
-
"integrity": "sha512-
|
|
4717
|
+
"version": "1.11.0",
|
|
4718
|
+
"resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.11.0.tgz",
|
|
4719
|
+
"integrity": "sha512-JdxDPD0DBTyu08pq0kPC0xSNet/qsU07qT6IsX1AS8oO2ICNRY4ldNa8OAI6PuwAH8tG3lxEhbqmyp4Dw4036g==",
|
|
4668
4720
|
"dev": true,
|
|
4669
4721
|
"license": "MIT",
|
|
4670
4722
|
"engines": {
|
|
@@ -4767,9 +4819,9 @@
|
|
|
4767
4819
|
}
|
|
4768
4820
|
},
|
|
4769
4821
|
"node_modules/source-map-js": {
|
|
4770
|
-
"version": "1.2.
|
|
4771
|
-
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.
|
|
4772
|
-
"integrity": "sha512-
|
|
4822
|
+
"version": "1.2.2",
|
|
4823
|
+
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.2.tgz",
|
|
4824
|
+
"integrity": "sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==",
|
|
4773
4825
|
"dev": true,
|
|
4774
4826
|
"license": "BSD-3-Clause",
|
|
4775
4827
|
"engines": {
|
|
@@ -5359,17 +5411,17 @@
|
|
|
5359
5411
|
"license": "MIT"
|
|
5360
5412
|
},
|
|
5361
5413
|
"node_modules/vue": {
|
|
5362
|
-
"version": "3.5.
|
|
5363
|
-
"resolved": "https://registry.npmjs.org/vue/-/vue-3.5.
|
|
5364
|
-
"integrity": "sha512
|
|
5414
|
+
"version": "3.5.42",
|
|
5415
|
+
"resolved": "https://registry.npmjs.org/vue/-/vue-3.5.42.tgz",
|
|
5416
|
+
"integrity": "sha512-4RyHQTbQvOPs3MfvUO1Sg0YRrKNnA0mAVtvpd12Tg1fKDN7OHBUl1IqSn8zGJjK9nI3NkNp8cgTpVrSZC5TTcA==",
|
|
5365
5417
|
"dev": true,
|
|
5366
5418
|
"license": "MIT",
|
|
5367
5419
|
"dependencies": {
|
|
5368
|
-
"@vue/compiler-dom": "3.5.
|
|
5369
|
-
"@vue/compiler-sfc": "3.5.
|
|
5370
|
-
"@vue/runtime-dom": "3.5.
|
|
5371
|
-
"@vue/server-renderer": "3.5.
|
|
5372
|
-
"@vue/shared": "3.5.
|
|
5420
|
+
"@vue/compiler-dom": "3.5.42",
|
|
5421
|
+
"@vue/compiler-sfc": "3.5.42",
|
|
5422
|
+
"@vue/runtime-dom": "3.5.42",
|
|
5423
|
+
"@vue/server-renderer": "3.5.42",
|
|
5424
|
+
"@vue/shared": "3.5.42"
|
|
5373
5425
|
},
|
|
5374
5426
|
"peerDependencies": {
|
|
5375
5427
|
"typescript": "*"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fuli-context",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0-beta.1",
|
|
4
4
|
"description": "Local-first collaboration relationship graph for AI agents.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
@@ -14,6 +14,9 @@
|
|
|
14
14
|
"docs/agent-conversations-and-collaboration.md",
|
|
15
15
|
"docs/employee-agents.md",
|
|
16
16
|
"docs/agent-interface-architecture.md",
|
|
17
|
+
"docs/roundtable-beta-testing.md",
|
|
18
|
+
"docs/roundtable-beta-validation.md",
|
|
19
|
+
"docs/roundtable-research.md",
|
|
17
20
|
"examples/external-knowledge/markdown-folder.mjs",
|
|
18
21
|
"graph-provider/Dockerfile",
|
|
19
22
|
"graph-provider/pyproject.toml",
|
|
@@ -65,7 +68,7 @@
|
|
|
65
68
|
"type": "git",
|
|
66
69
|
"url": "git+https://github.com/JevonsCode/fuli.git"
|
|
67
70
|
},
|
|
68
|
-
"homepage": "https://github.
|
|
71
|
+
"homepage": "https://jevonscode.github.io/fuli/",
|
|
69
72
|
"bugs": {
|
|
70
73
|
"url": "https://github.com/JevonsCode/fuli/issues"
|
|
71
74
|
},
|
|
@@ -74,8 +77,9 @@
|
|
|
74
77
|
},
|
|
75
78
|
"license": "Apache-2.0",
|
|
76
79
|
"dependencies": {
|
|
80
|
+
"@a2a-js/sdk": "1.3.0",
|
|
77
81
|
"@hono/node-server": "2.0.12",
|
|
78
|
-
"@modelcontextprotocol/sdk": "^1.
|
|
82
|
+
"@modelcontextprotocol/sdk": "^1.31.0",
|
|
79
83
|
"zod": "^4.4.3"
|
|
80
84
|
},
|
|
81
85
|
"devDependencies": {
|
|
@@ -92,7 +96,7 @@
|
|
|
92
96
|
"typescript": "~6.0.0",
|
|
93
97
|
"vite": "^8.1.5",
|
|
94
98
|
"vitest": "^4.1.10",
|
|
95
|
-
"vue": "^3.5.
|
|
99
|
+
"vue": "^3.5.42",
|
|
96
100
|
"vue-i18n": "^11.4.8",
|
|
97
101
|
"vue-router": "^5.2.0",
|
|
98
102
|
"vue-tsc": "^3.3.8"
|
|
@@ -52,6 +52,10 @@ current working directory. It resolves the exact active project without requirin
|
|
|
52
52
|
copy an ID, searches that child project first, and then includes only inheritable knowledge from
|
|
53
53
|
authorized parents or shared-source projects. Use `search_knowledge_graph` for personal-global
|
|
54
54
|
context, explicitly named extra projects, subscribed public projects, or advanced scoped queries.
|
|
55
|
+
An already resolved temporary project is an active private scope for this task. Pass its exact
|
|
56
|
+
returned `personalProjectId` alongside the directory; without a directory, use
|
|
57
|
+
`search_knowledge_graph` with that exact project and personal space. Do not re-resolve it from
|
|
58
|
+
a repository name, and never omit its `personalProjectId` or move its facts to personal-global.
|
|
55
59
|
Use `search_connected_knowledge` for a project-bound third-party source or explicitly selected
|
|
56
60
|
public project. Keep its source sets separate and obey the project's conflict policy;
|
|
57
61
|
`agent_decide` affects only the current response and never mutates or confirms a source.
|
|
@@ -104,7 +108,7 @@ URL, route, deployment, document, file, or where a durable artifact is located.
|
|
|
104
108
|
Personal retrieval always includes the bounded personal-global profile. For a local personal
|
|
105
109
|
project, pass its exact `personalProjectId`; if the user explicitly names another personal
|
|
106
110
|
project, resolve it with `list_personal_projects` and add only that exact ID through
|
|
107
|
-
`contextPersonalProjectIds`. Without an active local project, search only the personal-global
|
|
111
|
+
`contextPersonalProjectIds`. Without an active local or resolved temporary project, search only the personal-global
|
|
108
112
|
profile. For public context, pass only the active or explicitly named subscribed public project
|
|
109
113
|
IDs; never search every personal project, every subscription, or the whole graph by default.
|
|
110
114
|
Use the current repository, the user's wording, and `list_knowledge_spaces` to resolve scope.
|
|
@@ -228,11 +232,15 @@ responsible for decisions, integration, and final verification. Do not split a s
|
|
|
228
232
|
coupled task merely to create more workers.
|
|
229
233
|
|
|
230
234
|
For an eligible task, call `coordinate_project_agent_task` once with the exact current
|
|
231
|
-
`projectPath
|
|
235
|
+
`projectPath` when available, one stable idempotency key, an explicit complexity hint when known, and focused
|
|
232
236
|
context queries. Enable its parallel plan only when there are at least two conflict-free
|
|
233
237
|
workstreams with independent verification; state each workstream boundary. The Provider chooses
|
|
234
238
|
the lead and collaborators from active project assignments, preferring Agents with relevant
|
|
235
239
|
project history. Explicit user-selected Agents and locked policies remain higher priority.
|
|
240
|
+
When no registered project matches, coordination may return an isolated temporary project;
|
|
241
|
+
keep its exact returned ID for this task. Ambiguous candidates still require a choice. Temporary
|
|
242
|
+
scope creation is not Agent recruitment approval or proof of execution; follow the returned
|
|
243
|
+
recruitment/authorization state and worker plan.
|
|
236
244
|
|
|
237
245
|
Treat the returned durable Agent identity and a host worker as different things. A durable Agent
|
|
238
246
|
keeps its project assignment, preferences, task history, and Agent-scoped graph memory while idle;
|
|
@@ -271,11 +279,13 @@ before the remaining workers have reported their tools, session evidence, and ex
|
|
|
271
279
|
|
|
272
280
|
When a FULI task or task view returns a non-empty Provider `executionSummary`, append a compact
|
|
273
281
|
Markdown table with one row per actual worker. Include the worker label and occupation emoji,
|
|
274
|
-
actual executor/tool
|
|
275
|
-
session (`
|
|
282
|
+
actual executor/tool and `workerRuntime.application`, work summary, terminal `workerStatus`/status,
|
|
283
|
+
worker session (`workerRuntime.sessionId`, or a worker session link only when supplied), and Token usage.
|
|
284
|
+
Label `sourceApplication` and `sourceSessionId` separately as the reporting host. They do not
|
|
285
|
+
identify an external worker; do not substitute them for missing worker evidence.
|
|
276
286
|
Use only the source-labelled cumulative `tokenUsage` reported for that worker. If it is absent,
|
|
277
287
|
show `not reported`; never estimate it or copy a conversation-wide total into a worker row. If no
|
|
278
|
-
session link exists, show `
|
|
288
|
+
worker session link exists, show `workerRuntime.sessionId` or `not reported`; never invent a link. This applies only
|
|
279
289
|
to Provider-reported actual workers. When empty `executionSummary` is returned, omit rows; an absent
|
|
280
290
|
`executionSummary` also omits rows. Configured, allowed, or available clients/executors are not evidence
|
|
281
291
|
of actual use. Keep this Agent-agnostic; client-specific details and work-kind routing remain at
|
|
@@ -380,6 +390,11 @@ their child projects.
|
|
|
380
390
|
|
|
381
391
|
## Resolve Or Create The Local Project
|
|
382
392
|
|
|
393
|
+
Do not run this registration flow for an already resolved temporary project. Keep its isolated
|
|
394
|
+
scope and retained audit history; creating or migrating to a registered project requires a
|
|
395
|
+
separate explicit request. Disposable output uses `retain_nothing` with a truthful work log;
|
|
396
|
+
any reusable project candidates remain in the returned temporary scope, subject to capture policy.
|
|
397
|
+
|
|
383
398
|
Before the first project-scoped capture in a repository:
|
|
384
399
|
|
|
385
400
|
1. Call `list_knowledge_spaces`, then `list_personal_projects` for the active personal space.
|
|
@@ -39,6 +39,10 @@ For read-only questions, use the narrowest list/get/search tool and return sourc
|
|
|
39
39
|
|
|
40
40
|
When the user addresses HR or Bole to ask about organization or find someone, resolve the existing dedicated HR identity and read `list_project_agents` plus `get_project_agent_coordination_policy` for the exact personal space and relevant project. Use recorded roles, assignments and team membership; do not invent an organization or recruit a replacement HR. Match names, responsibilities and capabilities, but never guess between ambiguous or duplicate names. Link each resolved name to its personal page at `/agents/{encodedPersonalSpaceId}/{encodedAgentId}`. Answering in the HR role does not mean a worker has started; report actual execution separately.
|
|
41
41
|
|
|
42
|
+
## Before starting collaborators
|
|
43
|
+
|
|
44
|
+
Read each returned worker's `context.agent.profile.allowedClients` and `executorPolicy`, together with the task's effective executor policy. Intersect the restrictions before starting either a native or external worker; the lead's selected executor does not authorize every collaborator. A locked allow-list applies even when the current host has an idle worker. If the intended platform is outside any effective lock, select an eligible Agent/executor or report the constraint before launch. Never relax the lock, relabel the worker, or invent model evidence to satisfy reporting. FULI context recovery and a ready worker plan are not execution authorization by themselves.
|
|
45
|
+
|
|
42
46
|
## Handling conflicts and failures
|
|
43
47
|
|
|
44
48
|
- On revision or timestamp conflict, re-read, explain what changed, and recompute the intended patch. Do not blindly retry stale input.
|
|
@@ -49,3 +53,7 @@ When the user addresses HR or Bole to ask about organization or find someone, re
|
|
|
49
53
|
## Completion response
|
|
50
54
|
|
|
51
55
|
State what changed, the exact project or item scope, the verification result, and any remaining human-only action. Do not claim success from a configured capability or submitted request alone.
|
|
56
|
+
|
|
57
|
+
Include the task's named durable owner and profile link from `agent_receipt` or the successful checkpoint's `conversation.receipt`. Include Jefa or other peers only with an actual `collaboration_receipt`, naming the tool work they performed; board tools do not imply a separate model worker ran. Keep this receipt brief and distinguish work completion, memory checkpoint and visible-transcript coverage. Do not report saved memory when capture failed or is disabled.
|
|
58
|
+
|
|
59
|
+
For cross-client continuation, copy the supplied continuation prompt into the same project's connected client. A leading `@Name` matches exact directory names; `@{agentId}` is the stable form (the generated prompt percent-encodes unusual IDs). Duplicate names require an exact ID in the current request; an ambiguous explicit mention must not fall back to the prior session owner or memory. This is FULI task-entry matching, not registration in a client's native @ menu. Obtain a fresh task token before `resume_agent_conversation`; never copy an old token between clients. If no qualified owner exists, route staffing through HR before implementation; Jefa remains a management peer. Preserve confirmed taste/personality/preferences and Agent character/expectations in delegated context.
|
|
@@ -761,7 +761,7 @@ export const GRAPH_TOOL_DEFINITIONS = [
|
|
|
761
761
|
{
|
|
762
762
|
name: 'coordinate_project_agent_task',
|
|
763
763
|
title: 'WRITE · Prepare a host-executed Agent team',
|
|
764
|
-
description: 'Resolve the exact local project, let the Provider coordinator route one durable task
|
|
764
|
+
description: 'Resolve the exact local project, or create an isolated temporary task scope when no project matches, then let the Provider coordinator route one durable task and assemble an isolated context bundle for every selected lead/collaborator. Ambiguous matches require exact selection. Pass the current taskContextToken so temporary scope and a newly recruited lead bind to the owned lifecycle; otherwise provide a stable sourceSessionId and idempotencyKey for retries. Temporary projects retain audit history, never become implicit directory bindings, and default to audited task-only recruitment under the existing HR policy; explicit durable recruitment requests remain explicit. When recruiting, HR should set recruitmentProfile.character from the role responsibilities and preserve user expectations; configured traits must never be presented as proven growth. Fuli persists identity, staffing, and memory scope; the host must start real workers, report their concrete evidence, and finish their lifecycle. A routing recommendation never proves that a worker started.',
|
|
765
765
|
inputSchema: projectAgentTaskCoordinateInput
|
|
766
766
|
},
|
|
767
767
|
{
|