fuli-context 0.7.10-beta.0 → 0.8.0

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.
Files changed (174) hide show
  1. package/README.md +5 -2
  2. package/README.zh-CN.md +5 -3
  3. package/dist/web/assets/{AboutPage-BvXH4hsO.js → AboutPage-BjMmpwJB.js} +1 -1
  4. package/dist/web/assets/AboutPage-vYIBifKw.css +1 -0
  5. package/dist/web/assets/AgentHand-BfLYPGjg.js +1 -0
  6. package/dist/web/assets/AgentHand-D9sQu2vc.css +1 -0
  7. package/dist/web/assets/ConnectionsPage-BKGxFDos.js +1 -0
  8. package/dist/web/assets/EmployeeRecruitDialog-B59X3rOi.css +1 -0
  9. package/dist/web/assets/EmployeeRecruitDialog-D-W043v4.js +1 -0
  10. package/dist/web/assets/EmployeeWorkbenchPage-Cz7y-IFD.css +1 -0
  11. package/dist/web/assets/EmployeeWorkbenchPage-HHQPxdqI.js +3 -0
  12. package/dist/web/assets/GrowthLoading-B_Hh0CRS.css +1 -0
  13. package/dist/web/assets/GrowthLoading-WXCj8b0r.js +1 -0
  14. package/dist/web/assets/KnowledgeEditDialog-Bkie08ZA.js +1 -0
  15. package/dist/web/assets/KnowledgeEditDialog-D9NuRHvp.css +1 -0
  16. package/dist/web/assets/KnowledgeInspector-Cez-Z_95.js +1 -0
  17. package/dist/web/assets/KnowledgeOrganizerPage-BYmTPA_8.js +1 -0
  18. package/dist/web/assets/KnowledgeOrganizerPage-h2iKvQpO.css +1 -0
  19. package/dist/web/assets/KnowledgePage-Ck7tIBDn.js +1 -0
  20. package/dist/web/assets/KnowledgeWorkspace-DKij2_B4.js +4 -0
  21. package/dist/web/assets/KnowledgeWorkspace-sb8OJ97I.css +1 -0
  22. package/dist/web/assets/NotFoundPage-HGV-q-bh.js +1 -0
  23. package/dist/web/assets/{OverviewPage-D4vLhIFD.js → OverviewPage-DE29_F_Y.js} +1 -1
  24. package/dist/web/assets/PersonalProfilePage-B95DFc7x.js +1 -0
  25. package/dist/web/assets/PersonalProfilePage-L8T5xMEC.css +1 -0
  26. package/dist/web/assets/PersonalProjectsPage-Bt7tFF5Z.js +1 -0
  27. package/dist/web/assets/ProjectAgentsPage-BioDR9OW.css +1 -0
  28. package/dist/web/assets/ProjectAgentsPage-CiiPNe_G.js +12 -0
  29. package/dist/web/assets/ProjectScopePicker-BvaGTMFx.css +1 -0
  30. package/dist/web/assets/ProjectScopePicker-Cu5PdxF6.js +1 -0
  31. package/dist/web/assets/PublicProjectsPage-BY4B3_t3.js +1 -0
  32. package/dist/web/assets/ReviewPage-C9vCesNu.js +1 -0
  33. package/dist/web/assets/{SearchableSelect-DY-TWC2i.js → SearchableSelect-214TvfYg.js} +1 -1
  34. package/dist/web/assets/SettingsPage-Brl-SL33.css +1 -0
  35. package/dist/web/assets/SettingsPage-D9TnzcFc.js +1 -0
  36. package/dist/web/assets/SharedJefaReportPage-CdSGI_OE.js +1 -0
  37. package/dist/web/assets/SharedJefaReportPage-DXbj_JhO.css +1 -0
  38. package/dist/web/assets/WritingTastePage-Bzg6AvnB.css +1 -0
  39. package/dist/web/assets/WritingTastePage-CUE1dU8f.js +1 -0
  40. package/dist/web/assets/bole-avatar-CVIr-bU_.webp +0 -0
  41. package/dist/web/assets/client-Bl4oiW3E.js +1 -0
  42. package/dist/web/assets/console-BAIVNC-N.js +1 -0
  43. package/dist/web/assets/conversation-launcher-settings-DpRI_Jp2.js +1 -0
  44. package/dist/web/assets/employee-dialog-Bh5ccIbK.css +1 -0
  45. package/dist/web/assets/{i18n-C7r_00q2.js → i18n-CVFADb_M.js} +3 -3
  46. package/dist/web/assets/{identity-COvBmUF4.js → identity-Dt0WZgqo.js} +1 -1
  47. package/dist/web/assets/index-BUMq5zNh.js +2 -0
  48. package/dist/web/assets/index-C0ci8dnU.css +1 -0
  49. package/dist/web/assets/{model-CL1JILt4.js → model-B8sOxih0.js} +1 -1
  50. package/dist/web/assets/personal-profile-graph-aAqex7ty.js +1 -0
  51. package/dist/web/assets/shared-report-BQD6l_cS.js +1 -0
  52. package/dist/web/assets/shared-report-ezeb8dW4.css +1 -0
  53. package/dist/web/assets/{useApi-CROJJdhE-DERnOR_k.js → useApi-CROJJdhE-CuJ16v2S.js} +1 -1
  54. package/dist/web/assets/useModalDialog-Ddv2XJQi.js +1 -0
  55. package/dist/web/assets/{vue-router-DJ6C6-8v.js → vue-router-C8KuEZ6a.js} +1 -1
  56. package/dist/web/index.html +14 -8
  57. package/docs/agent-interface-architecture.md +97 -0
  58. package/docs/employee-agents.md +58 -2
  59. package/docs/project-agent-memory.md +69 -449
  60. package/graph-provider/fuli_graph/app.py +2 -0
  61. package/graph-provider/fuli_graph/collaboration_context.py +2 -1
  62. package/graph-provider/fuli_graph/graph_models.py +5 -3
  63. package/graph-provider/fuli_graph/graph_query.py +4 -0
  64. package/graph-provider/fuli_graph/knowledge_search.py +2 -1
  65. package/graph-provider/fuli_graph/preference_conflicts.py +4 -1
  66. package/graph-provider/fuli_graph/project_agent_access.py +2 -0
  67. package/graph-provider/fuli_graph/project_agent_attention_models.py +64 -0
  68. package/graph-provider/fuli_graph/project_agent_attention_routes.py +38 -0
  69. package/graph-provider/fuli_graph/project_agent_coordination_models.py +23 -1
  70. package/graph-provider/fuli_graph/project_agent_memory_models.py +11 -0
  71. package/graph-provider/fuli_graph/project_agent_models.py +2 -0
  72. package/graph-provider/fuli_graph/project_agent_names.py +33 -0
  73. package/graph-provider/fuli_graph/project_agent_routes.py +12 -0
  74. package/graph-provider/fuli_graph/project_agent_team_growth.py +56 -0
  75. package/graph-provider/fuli_graph/project_agent_work_log.py +34 -0
  76. package/graph-provider/fuli_graph/runtime.py +49 -20
  77. package/graph-provider/fuli_graph/store.py +2 -0
  78. package/graph-provider/fuli_graph/store_knowledge.py +4 -2
  79. package/graph-provider/fuli_graph/store_project_agent_attention.py +138 -0
  80. package/graph-provider/fuli_graph/store_project_agent_coordination_policy.py +56 -2
  81. package/graph-provider/fuli_graph/store_project_agent_executor_learning.py +8 -0
  82. package/graph-provider/fuli_graph/store_project_agent_memory.py +43 -13
  83. package/graph-provider/fuli_graph/store_project_agent_task_activity.py +1 -1
  84. package/graph-provider/fuli_graph/store_project_agent_task_recruitment.py +6 -1
  85. package/graph-provider/fuli_graph/store_project_agent_task_staffing.py +21 -3
  86. package/graph-provider/fuli_graph/store_project_agent_tasks.py +4 -0
  87. package/graph-provider/fuli_graph/store_project_agents.py +109 -0
  88. package/graph-provider/fuli_graph/store_task_contexts.py +12 -2
  89. package/graph-provider/fuli_graph/system_hr_identity.py +218 -0
  90. package/graph-provider/fuli_graph/task_context_adoption.py +65 -0
  91. package/graph-provider/fuli_graph/task_context_models.py +23 -1
  92. package/graph-provider/fuli_graph/task_context_routes.py +5 -1
  93. package/graph-provider/pyproject.toml +1 -1
  94. package/npm-shrinkwrap.json +52 -60
  95. package/package.json +2 -2
  96. package/skills/operating-fuli/SKILL.md +47 -0
  97. package/skills/operating-fuli/agents/openai.yaml +4 -0
  98. package/skills/operating-fuli/references/workflow-recipes.md +33 -0
  99. package/src/agent-tools/agent-attention-definitions.js +33 -0
  100. package/src/agent-tools/graph-definitions.js +22 -7
  101. package/src/agent-tools/graph-handlers.js +41 -0
  102. package/src/agent-tools/interface-catalog.js +101 -0
  103. package/src/agent-tools/interface-definitions.js +184 -0
  104. package/src/agent-tools/project-agent-definitions.js +2 -0
  105. package/src/agents/codex/lifecycle-hook.js +1 -0
  106. package/src/cli/local-runtime-command.js +2 -1
  107. package/src/cli/setup-command.js +1 -1
  108. package/src/employees/catalog/bole.json +19 -0
  109. package/src/employees/install-package.js +3 -0
  110. package/src/employees/manifest.js +4 -0
  111. package/src/employees/package-registry.js +2 -0
  112. package/src/employees/recruitment.js +3 -0
  113. package/src/employees/service.js +10 -0
  114. package/src/external-knowledge/registry.js +24 -0
  115. package/src/external-knowledge/service.js +34 -1
  116. package/src/graphiti/agent-attention.js +26 -0
  117. package/src/graphiti/agent-knowledge-workflows.js +14 -4
  118. package/src/graphiti/project-agent-control-plane.js +30 -0
  119. package/src/graphiti/project-agent-mapping.js +18 -1
  120. package/src/graphiti/project-agent-memory.js +10 -2
  121. package/src/graphiti/project-agent-task-entry.js +4 -1
  122. package/src/graphiti/project-agent-team-context.js +21 -0
  123. package/src/graphiti/project-agent-workflows.js +18 -0
  124. package/src/graphiti/provider-client.js +20 -1
  125. package/src/graphiti/workspace-provider-client.js +9 -1
  126. package/src/graphiti/writing-taste-profile-workflow.js +62 -9
  127. package/src/graphiti/writing-taste-profile.js +43 -16
  128. package/src/http/agent-attention-api-router.js +28 -0
  129. package/src/http/error-mapping.js +3 -0
  130. package/src/http/graph-api-router.js +11 -0
  131. package/src/local-runtime/lifecycle.js +8 -2
  132. package/src/mcp/create-mcp-server.js +15 -4
  133. package/src/mcp/instructions.js +3 -3
  134. package/src/mcp/provider-task-context-registry.js +11 -1
  135. package/src/mcp/task-context-registry.js +2 -1
  136. package/src/mcp/tool-annotations.js +31 -0
  137. package/src/mcp/tool-result.js +11 -7
  138. package/src/setup/agent-installation-status.js +2 -1
  139. package/src/setup/agents.js +4 -0
  140. package/src/setup/graph-runtime.js +4 -0
  141. package/src/setup/paths.js +2 -1
  142. package/src/setup/setup.js +4 -2
  143. package/src/setup/uninstall.js +4 -2
  144. package/src/system/resource-monitor.js +11 -1
  145. package/src/system/runtime-settings.js +7 -0
  146. package/dist/web/assets/AboutPage-DXh7Fwxt.css +0 -1
  147. package/dist/web/assets/ConnectionsPage-WVc6Srbd.js +0 -1
  148. package/dist/web/assets/EmployeeRecruitDialog-CnA7rOnB.css +0 -1
  149. package/dist/web/assets/EmployeeRecruitDialog-Dal5wy8a.js +0 -1
  150. package/dist/web/assets/EmployeeWorkbenchPage-BDJvrpcn.css +0 -1
  151. package/dist/web/assets/EmployeeWorkbenchPage-CW5pu_Yb.js +0 -1
  152. package/dist/web/assets/KnowledgeEditDialog-BBvm74ln.js +0 -1
  153. package/dist/web/assets/KnowledgeEditDialog-iv-dgUeD.css +0 -1
  154. package/dist/web/assets/KnowledgeInspector-CE9ADmtT.js +0 -1
  155. package/dist/web/assets/KnowledgeOrganizerPage-BRtizGUS.js +0 -1
  156. package/dist/web/assets/KnowledgeOrganizerPage-Cx1w1jb2.css +0 -1
  157. package/dist/web/assets/KnowledgePage-D5clXGCw.js +0 -1
  158. package/dist/web/assets/KnowledgeWorkspace-CKLH6cIf.js +0 -4
  159. package/dist/web/assets/PersonalProfilePage-7w8rAzkg.js +0 -1
  160. package/dist/web/assets/PersonalProfilePage-B7T09bow.css +0 -1
  161. package/dist/web/assets/PersonalProjectsPage-BY0B1t24.js +0 -1
  162. package/dist/web/assets/ProjectAgentsPage-C3vW6wmk.css +0 -1
  163. package/dist/web/assets/ProjectAgentsPage-LHPOuLWw.js +0 -11
  164. package/dist/web/assets/PublicProjectsPage-PSp6RzVZ.js +0 -1
  165. package/dist/web/assets/ReviewPage-DPP23xLF.js +0 -1
  166. package/dist/web/assets/SettingsPage-C59OPsNP.js +0 -1
  167. package/dist/web/assets/SettingsPage-CwZp2ka4.css +0 -1
  168. package/dist/web/assets/WritingTastePage-DNXhCdgn.js +0 -1
  169. package/dist/web/assets/WritingTastePage-DSgvTH6x.css +0 -1
  170. package/dist/web/assets/avatars-BfZueqlm.js +0 -1
  171. package/dist/web/assets/console-CYXvhGCR.js +0 -1
  172. package/dist/web/assets/conversation-launcher-settings-SwmUP91W.js +0 -1
  173. package/dist/web/assets/index-B-rXoqYP.js +0 -2
  174. package/dist/web/assets/index-Ch1jmkyO.css +0 -1
@@ -9,16 +9,22 @@
9
9
  />
10
10
  <link rel="icon" type="image/png" href="/assets/fuli-logo-ER1wQ8Kk.png" />
11
11
  <title>复利 · Context Graph</title>
12
- <script type="module" crossorigin src="/assets/index-B-rXoqYP.js"></script>
13
- <link rel="modulepreload" crossorigin href="/assets/i18n-C7r_00q2.js">
14
- <link rel="modulepreload" crossorigin href="/assets/console-CYXvhGCR.js">
15
- <link rel="modulepreload" crossorigin href="/assets/useApi-CROJJdhE-DERnOR_k.js">
16
- <link rel="modulepreload" crossorigin href="/assets/vue-router-DJ6C6-8v.js">
17
- <link rel="modulepreload" crossorigin href="/assets/fuli-logo-Bu9WBuQe.js">
12
+ <script type="module" crossorigin src="/assets/index-BUMq5zNh.js"></script>
13
+ <link rel="modulepreload" crossorigin href="/assets/i18n-CVFADb_M.js">
14
+ <link rel="modulepreload" crossorigin href="/assets/client-Bl4oiW3E.js">
15
+ <link rel="modulepreload" crossorigin href="/assets/console-BAIVNC-N.js">
18
16
  <link rel="modulepreload" crossorigin href="/assets/_plugin-vue_export-helper-BDNMzG2s.js">
19
- <link rel="modulepreload" crossorigin href="/assets/avatars-BfZueqlm.js">
17
+ <link rel="modulepreload" crossorigin href="/assets/GrowthLoading-WXCj8b0r.js">
18
+ <link rel="modulepreload" crossorigin href="/assets/useApi-CROJJdhE-CuJ16v2S.js">
19
+ <link rel="modulepreload" crossorigin href="/assets/vue-router-C8KuEZ6a.js">
20
+ <link rel="modulepreload" crossorigin href="/assets/fuli-logo-Bu9WBuQe.js">
21
+ <link rel="modulepreload" crossorigin href="/assets/AgentHand-BfLYPGjg.js">
22
+ <link rel="modulepreload" crossorigin href="/assets/useModalDialog-Ddv2XJQi.js">
20
23
  <link rel="modulepreload" crossorigin href="/assets/paths-CDREouhi.js">
21
- <link rel="stylesheet" crossorigin href="/assets/index-Ch1jmkyO.css">
24
+ <link rel="stylesheet" crossorigin href="/assets/GrowthLoading-B_Hh0CRS.css">
25
+ <link rel="stylesheet" crossorigin href="/assets/AgentHand-D9sQu2vc.css">
26
+ <link rel="stylesheet" crossorigin href="/assets/index-C0ci8dnU.css">
27
+ <link rel="stylesheet" crossorigin href="/assets/employee-dialog-Bh5ccIbK.css">
22
28
  </head>
23
29
  <body>
24
30
  <div id="app"></div>
@@ -0,0 +1,97 @@
1
+ # Agent interface architecture
2
+
3
+ FULI exposes product data operations through structured Agent tools so an AI Agent does not need browser automation to act on the user's behalf. The console and the Agent interface are peer clients of the same application services; neither client owns a second copy of the business rules.
4
+
5
+ ## Contract
6
+
7
+ `list_agent_interfaces` returns the versioned `agent-interface-parity-v1` catalog. Every console data mutation is classified as one of:
8
+
9
+ - `agent`: the catalog names the structured Agent tool or tools that perform the same business operation.
10
+ - `local_user_only`: the catalog records why the operation requires local human presence.
11
+
12
+ The parity catalog is executable product metadata, not just documentation. Tests verify that every `agent` entry names a registered tool and that sensitive local-only routes remain explicit. A route with multiple actions, such as ignoring or resetting routing-learning evidence, lists every matching tool.
13
+
14
+ ## Request path
15
+
16
+ ```text
17
+ Console UI ───────┐
18
+ ├─> application service ─> scoped Provider / local store
19
+ Agent tool / MCP ─┘
20
+ ```
21
+
22
+ Agent handlers delegate to existing application-service methods. They do not call the console over HTTP, render pages, write browser state, or bypass scope checks. Existing Host/Origin protection remains relevant to the console; Agent access is independently guarded by the Agent-access policy before any tool handler runs.
23
+
24
+ ## Required operating sequence
25
+
26
+ ### Agent names and human attention
27
+
28
+ Agent identity (`agentId`) and role (`profile.name`, `responsibility`) remain stable.
29
+ `profile.displayName` is the editable person-like nickname. Legacy role-style names
30
+ receive a deterministic nickname derived from their Agent ID; existing custom names
31
+ and explicit display names are preserved. These are product nicknames, not real people.
32
+ Reading a legacy profile does not rewrite its stored history.
33
+
34
+ Use `request_agent_attention` only for an explicit human action, with the exact space,
35
+ project and Agent, optional task ID, request kind, context and `requestedAction`.
36
+ The same idempotency key and payload returns the same request, including after closure;
37
+ reusing a key with another payload is a conflict. Running, waiting in a queue and
38
+ recoverable retries do not create attention requests automatically.
39
+
40
+ `list_agent_attention` supports project/Agent/status filters and pagination. Counts
41
+ cover the whole filtered set. Agents can withdraw obsolete requests with
42
+ `cancel_agent_attention`, using `expectedRevision` and a reason. Only the local-user
43
+ `POST /api/agent-attention/respond` workflow records a human reply. A reply closes the
44
+ attention item but does not itself grant permission, accept a task or run a command.
45
+ Agents read resolved replies and continue within the existing authority boundaries.
46
+ Original context, response, actor and timestamps remain in the private graph.
47
+
48
+ The console uses one shared attention store and dialog for the sidebar and personnel
49
+ views. Failed reads remain visible as errors, not a false empty state. Replies use
50
+ revision checks and preserve the user's draft on failure. Public reports never query
51
+ or expose this private attention queue.
52
+
53
+ An Agent should:
54
+
55
+ 1. call `list_agent_interfaces`;
56
+ 2. resolve exact space, project, item and version identifiers with read tools;
57
+ 3. inspect the selected tool's current schema;
58
+ 4. read current state before a write;
59
+ 5. execute the narrowest scoped mutation with available compare-and-swap or idempotency fields;
60
+ 6. verify through a structured read.
61
+
62
+ The bundled `operating-fuli` Skill teaches this sequence and is installed by `fuli setup` for supported Agents. Browser automation is permitted only as optional visual verification after a structured operation, never as a data-mutation fallback.
63
+
64
+ ## Human-only boundaries
65
+
66
+ The following operations intentionally remain local-user-only:
67
+
68
+ - enabling or disabling Agent access;
69
+ - device-level runtime settings;
70
+ - completing a preference conflict as a human decision;
71
+ - confirming preference visibility scope;
72
+ - batch confirmation of knowledge.
73
+ - Jefa task completion that records explicit human acceptance (other task updates remain available through the employee tools).
74
+
75
+ These are trust boundaries, not missing interfaces. An Agent may explain where the user can perform the action, but must not substitute direct HTTP, storage, shell, or browser scripting.
76
+
77
+ ## External knowledge
78
+
79
+ Connector discovery, binding creation, readiness checks, target updates, scoped synchronization, live retrieval, conflict policy and deletion have dedicated tools. Connector secrets are referenced by environment-variable name; tool results and catalog listings must not expose secret values.
80
+
81
+ Moving a connection between projects updates the binding targets. Deleting and recreating a binding is not the default because it breaks audit continuity and can discard connector state.
82
+
83
+ Target updates require the Agent's last-read `targetsVersion`. Registry mutations take a cross-process SQLite reservation, so sync/check/delete cannot overwrite a concurrent scope update. Busy or stale writes fail with a controlled conflict and must be re-read, not blindly retried. The legacy HTTP contract still accepts callers without a version for compatibility; current console and Agent clients supply one.
84
+
85
+ ## Adding a feature
86
+
87
+ When a console feature adds a data mutation:
88
+
89
+ 1. implement the business operation in an application service;
90
+ 2. have the console route call that service;
91
+ 3. add or reuse a typed Agent definition and a handler that calls the same service;
92
+ 4. annotate read/write, destructive and open-world behavior for MCP clients;
93
+ 5. add the route-to-tool mapping to `src/agent-tools/interface-catalog.js`, or document a narrowly justified `local_user_only` boundary;
94
+ 6. add contract tests covering dispatch, scope, error behavior and the parity mapping;
95
+ 7. update the `operating-fuli` workflow reference if the operation needs a non-obvious sequence.
96
+
97
+ A missing Agent interface must remain visible as a parity defect. Do not silently ship a browser-only write path.
@@ -1,6 +1,6 @@
1
1
  # Specialist Agents
2
2
 
3
- An employee template is a reusable role with an optional FULI-hosted workbench. Recruitment reuses the existing durable Project Agent identity and assignment model. The first built-in template is **Jefa, project manager**; adding another employee does not require a host-side special case.
3
+ An employee template is a reusable role with an optional FULI-hosted or native workbench. Recruitment reuses the existing durable Project Agent identity and assignment model. The built-in specialists are **Jefa**, the project manager, and **Bole**, the fixed system HR Agent. Bole is created with every personal space, cannot be archived or replaced by another `hr` identity, and does not require a separate runtime package.
4
4
 
5
5
  ## User flow
6
6
 
@@ -16,7 +16,7 @@ The directory's **Filter projects** control supports multi-selection and inversi
16
16
 
17
17
  Repeat recruitment is idempotent. Customized profile preferences and executor/model policies are preserved. One employee identity can have multiple project assignments. Reactivating an inactive identity is an explicit action; a conflicting unrelated identity is never overwritten. Recruitment does not start an executor or constitute model usage.
18
18
 
19
- The catalog shows whether a workbench package is actually installed. Identity-only templates need no runtime and remain valid employees without a sidebar workbench.
19
+ The catalog shows whether a workbench package is actually installed. Identity-only templates need no runtime and remain valid employees without a sidebar workbench. A trusted built-in template may declare `workbench: { "kind": "native", "view": "people" }`; Bole uses this native panel to summarize Agent distribution, current tasks, and timestamped recruitment reasons from the same Project Agent APIs used elsewhere in the console.
20
20
 
21
21
  ## Local installation
22
22
 
@@ -71,8 +71,12 @@ Context includes `personalSpaceId`, `project`, `agentId`, and `basePath`; HTTP a
71
71
 
72
72
  Optional manifest fields `defaultProjectScope: "all" | "selected"` and `taskEntry: { "boardTool": "read_board", "titleTool": "prepare_session_title" }` declare defaults and task-entry participation without a template-specific host branch. Context also carries the trusted `management` policy and native `session` identity when available. Task-entry board tools must declare `board.read`; the host returns bounded data and guidance, not an automatically started worker. A failed employee runtime degrades manager context without breaking collaboration preferences.
73
73
 
74
+ The optional built-in-only native workbench declaration is `workbench: { "kind": "native", "view": "people" }`. It renders host-owned read models and does not load third-party code. Installable employee packages continue to use the runtime contract above.
75
+
74
76
  The reserved identity is `employee.<template-id>`, recognized by the generic `fuli.employee:<template-id>` capability. Preserve this marker when customizing employee profiles. The actual role, history, memory and project assignments remain in FULI's existing Agent model.
75
77
 
78
+ `employee.bole` is additionally reserved as the only system HR identity. Its Provider type is `hr`; other identities cannot claim that type. Recruitment history records the coordinating and HR Agent IDs, time, reason, proposed identity and final recruited identity, which powers Bole's people panel without inventing activity.
79
+
76
80
  ## HTTP and MCP
77
81
 
78
82
  The host serves `/api/employee-templates`, recruitment/workspace/tool endpoints below it, and `/employee-workspaces/<template-id>/<project-id>/…`. Existing Host/Origin, JSON-body and LAN authorization checks apply. All workbench requests require an active matching identity and authorized responsibility policy, including assets and Agent discovery. Selected mode additionally requires an active assignment; all mode includes future active projects but enforces explicit exclusions and ended assignments before reaching the runtime.
@@ -87,6 +91,42 @@ Jefa supplies eight workbench tools for board/task reading, task creation, optim
87
91
 
88
92
  ## Verification and release boundary
89
93
 
94
+ Jefa uses one native `EmployeeTaskBoard` for every project scope. `/employees/jefa` and
95
+ `?project=all` show the current managed projects; legacy `__all__` is normalized. A single
96
+ project query or repeated `project` query parameters filter the same board, without changing
97
+ assignments. Task details and creation use the existing `get_task`, `create_tasks`, and
98
+ version-checked `update_tasks` interfaces. Explicit human confirmation of `done` continues
99
+ through the existing human HTTP endpoint. Other employee packages retain their generic iframe
100
+ workspaces; Jefa no longer switches to the package board when a card is opened.
101
+
102
+ The external-report action beside Jefa's identity has an independent project selection,
103
+ including all, one, several, and inverted selection. Generating a link explicitly enables
104
+ sharing for selected projects through `PATCH /employee-workspaces/jefa/<project>/api/projects/<project>/sharing`
105
+ with `{ publicShareEnabled: true, acceptsPublicRequests: false }`. Merely opening or filtering
106
+ the dialog performs no writes. Sharing status comes from the existing scoped snapshot API;
107
+ disabling uses the same endpoint with both flags false and invalidates that project's old slug.
108
+
109
+ One `/reports/jefa` link aggregates the selected project capabilities in its URL fragment,
110
+ keeping them out of HTTP access logs and referrer query strings. The report loads only
111
+ `GET /employee-workspaces/jefa/<project>/api/public/<slug>` and uses the same board in read-only
112
+ mode. It never loads the console shell or private board/task endpoints. The existing public
113
+ projection controls visibility: private tasks, details, evidence, and unrelated projects are
114
+ not included. Partial enablement is reported without claiming a complete link, and selection
115
+ changes clear the previously generated link. “All” is the current selection, not consent to
116
+ publish future projects automatically.
117
+
118
+ Before presenting a report link, the dialog verifies the selected public projections and
119
+ shows their task count. A zero-task selection is not presented as a successful report;
120
+ existing empty links explain that no tasks have been approved for public viewing. This
121
+ never changes task privacy or substitutes private board data for a public projection.
122
+ Refreshing the preview preserves the selected projects.
123
+
124
+ These structured HTTP operations remain subject to the host's existing scope, Origin and LAN
125
+ authentication checks. The link is not a separate authorization layer for the entire console.
126
+ Loopback links work only on the same computer; this UI does not enable LAN access, tunnels,
127
+ production hosting, or new public task visibility. Do not expose the local management service
128
+ as a public multi-user report server.
129
+
90
130
  Run FULI's normal Node/web tests and typecheck. For an actual Jefa build:
91
131
 
92
132
  ```sh
@@ -97,3 +137,19 @@ node scripts/employee-package-smoke.js <built-package-directory> --serve
97
137
  The smoke fixture uses a synthetic FULI directory but the real installed employee bundle, SQLite and MCP transport. The UI mode does not query a personal provider or external model. It deletes its temporary test data on shutdown.
98
138
 
99
139
  Signing, remote catalog distribution, a runtime sandbox, database migration/uninstall UX, and production multi-user authorization remain separate release work. This feature does not authorize or publish a Feishu application.
140
+
141
+ ### Bole identity upgrades
142
+
143
+ Local startup calls the idempotent system-HR endpoint for both fresh and existing installs.
144
+ It consolidates the reserved legacy `fuli-project-hr` identity into `employee.bole` in one
145
+ transaction. Names never identify merge targets. The legacy node remains an audit alias;
146
+ assignments, recruitment references, attention and task history follow the canonical Bole.
147
+ Old profile links resolve to Bole, and the obsolete ID cannot be recreated as another role.
148
+ Working-memory heads and immutable checkpoint JSON/hashes are retained; equivalent old/new-ID
149
+ memory retries address the same checkpoint. Knowledge visibility metadata is migrated only
150
+ inside the owning space, without changing historical evidence UUIDs.
151
+
152
+ Conflicting memory heads, locked executor policies, relationship properties or overlapping
153
+ learning buckets abort the complete migration. Nothing is silently selected or overwritten.
154
+ The Neo4j acceptance tests require an explicitly disposable loopback database; they never
155
+ clear or seed an existing user's graph.