@felan-ai/daemon 0.0.0-stage → 0.0.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.
- package/LICENSE +21 -0
- package/NOTICE +69 -0
- package/README.md +61 -2
- package/dist/client.d.ts +5 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +4 -0
- package/dist/client.js.map +1 -0
- package/dist/daemon/admission.d.ts +39 -0
- package/dist/daemon/admission.d.ts.map +1 -0
- package/dist/daemon/admission.js +175 -0
- package/dist/daemon/admission.js.map +1 -0
- package/dist/daemon/agent-logs.d.ts +11 -0
- package/dist/daemon/agent-logs.d.ts.map +1 -0
- package/dist/daemon/agent-logs.js +31 -0
- package/dist/daemon/agent-logs.js.map +1 -0
- package/dist/daemon/bootstrap.d.ts +7 -0
- package/dist/daemon/bootstrap.d.ts.map +1 -0
- package/dist/daemon/bootstrap.js +4 -0
- package/dist/daemon/bootstrap.js.map +1 -0
- package/dist/daemon/broker.d.ts +94 -0
- package/dist/daemon/broker.d.ts.map +1 -0
- package/dist/daemon/broker.js +374 -0
- package/dist/daemon/broker.js.map +1 -0
- package/dist/daemon/commands.d.ts +47 -0
- package/dist/daemon/commands.d.ts.map +1 -0
- package/dist/daemon/commands.js +639 -0
- package/dist/daemon/commands.js.map +1 -0
- package/dist/daemon/control-recovery.d.ts +9 -0
- package/dist/daemon/control-recovery.d.ts.map +1 -0
- package/dist/daemon/control-recovery.js +68 -0
- package/dist/daemon/control-recovery.js.map +1 -0
- package/dist/daemon/control-state.d.ts +1915 -0
- package/dist/daemon/control-state.d.ts.map +1 -0
- package/dist/daemon/control-state.js +154 -0
- package/dist/daemon/control-state.js.map +1 -0
- package/dist/daemon/control-store.d.ts +113 -0
- package/dist/daemon/control-store.d.ts.map +1 -0
- package/dist/daemon/control-store.js +901 -0
- package/dist/daemon/control-store.js.map +1 -0
- package/dist/daemon/execution-policy.d.ts +15 -0
- package/dist/daemon/execution-policy.d.ts.map +1 -0
- package/dist/daemon/execution-policy.js +42 -0
- package/dist/daemon/execution-policy.js.map +1 -0
- package/dist/daemon/execution-services.d.ts +5 -0
- package/dist/daemon/execution-services.d.ts.map +1 -0
- package/dist/daemon/execution-services.js +73 -0
- package/dist/daemon/execution-services.js.map +1 -0
- package/dist/daemon/executions.d.ts +134 -0
- package/dist/daemon/executions.d.ts.map +1 -0
- package/dist/daemon/executions.js +486 -0
- package/dist/daemon/executions.js.map +1 -0
- package/dist/daemon/extension-ui.d.ts +24 -0
- package/dist/daemon/extension-ui.d.ts.map +1 -0
- package/dist/daemon/extension-ui.js +161 -0
- package/dist/daemon/extension-ui.js.map +1 -0
- package/dist/daemon/fanout.d.ts +40 -0
- package/dist/daemon/fanout.d.ts.map +1 -0
- package/dist/daemon/fanout.js +304 -0
- package/dist/daemon/fanout.js.map +1 -0
- package/dist/daemon/headless-json.d.ts +3 -0
- package/dist/daemon/headless-json.d.ts.map +1 -0
- package/dist/daemon/headless-json.js +20 -0
- package/dist/daemon/headless-json.js.map +1 -0
- package/dist/daemon/host-config.d.ts +61 -0
- package/dist/daemon/host-config.d.ts.map +1 -0
- package/dist/daemon/host-config.js +167 -0
- package/dist/daemon/host-config.js.map +1 -0
- package/dist/daemon/host-services.d.ts +61 -0
- package/dist/daemon/host-services.d.ts.map +1 -0
- package/dist/daemon/host-services.js +2 -0
- package/dist/daemon/host-services.js.map +1 -0
- package/dist/daemon/ipc.d.ts +14 -0
- package/dist/daemon/ipc.d.ts.map +1 -0
- package/dist/daemon/ipc.js +233 -0
- package/dist/daemon/ipc.js.map +1 -0
- package/dist/daemon/legacy-sessions.d.ts +48 -0
- package/dist/daemon/legacy-sessions.d.ts.map +1 -0
- package/dist/daemon/legacy-sessions.js +328 -0
- package/dist/daemon/legacy-sessions.js.map +1 -0
- package/dist/daemon/lifecycle.d.ts +44 -0
- package/dist/daemon/lifecycle.d.ts.map +1 -0
- package/dist/daemon/lifecycle.js +164 -0
- package/dist/daemon/lifecycle.js.map +1 -0
- package/dist/daemon/main.d.ts +3 -0
- package/dist/daemon/main.d.ts.map +1 -0
- package/dist/daemon/main.js +83 -0
- package/dist/daemon/main.js.map +1 -0
- package/dist/daemon/message-display.d.ts +4 -0
- package/dist/daemon/message-display.d.ts.map +1 -0
- package/dist/daemon/message-display.js +20 -0
- package/dist/daemon/message-display.js.map +1 -0
- package/dist/daemon/native-ownership.d.ts +13 -0
- package/dist/daemon/native-ownership.d.ts.map +1 -0
- package/dist/daemon/native-ownership.js +173 -0
- package/dist/daemon/native-ownership.js.map +1 -0
- package/dist/daemon/operational-log.d.ts +23 -0
- package/dist/daemon/operational-log.d.ts.map +1 -0
- package/dist/daemon/operational-log.js +79 -0
- package/dist/daemon/operational-log.js.map +1 -0
- package/dist/daemon/ownership.d.ts +35 -0
- package/dist/daemon/ownership.d.ts.map +1 -0
- package/dist/daemon/ownership.js +395 -0
- package/dist/daemon/ownership.js.map +1 -0
- package/dist/daemon/persistence.d.ts +110 -0
- package/dist/daemon/persistence.d.ts.map +1 -0
- package/dist/daemon/persistence.js +540 -0
- package/dist/daemon/persistence.js.map +1 -0
- package/dist/daemon/process-adapter.d.ts +23 -0
- package/dist/daemon/process-adapter.d.ts.map +1 -0
- package/dist/daemon/process-adapter.js +2 -0
- package/dist/daemon/process-adapter.js.map +1 -0
- package/dist/daemon/processes.d.ts +102 -0
- package/dist/daemon/processes.d.ts.map +1 -0
- package/dist/daemon/processes.js +691 -0
- package/dist/daemon/processes.js.map +1 -0
- package/dist/daemon/profile-storage.d.ts +16 -0
- package/dist/daemon/profile-storage.d.ts.map +1 -0
- package/dist/daemon/profile-storage.js +148 -0
- package/dist/daemon/profile-storage.js.map +1 -0
- package/dist/daemon/projection.d.ts +110 -0
- package/dist/daemon/projection.d.ts.map +1 -0
- package/dist/daemon/projection.js +661 -0
- package/dist/daemon/projection.js.map +1 -0
- package/dist/daemon/provider-loader.d.ts +28 -0
- package/dist/daemon/provider-loader.d.ts.map +1 -0
- package/dist/daemon/provider-loader.js +376 -0
- package/dist/daemon/provider-loader.js.map +1 -0
- package/dist/daemon/provider.d.ts +92 -0
- package/dist/daemon/provider.d.ts.map +1 -0
- package/dist/daemon/provider.js +31 -0
- package/dist/daemon/provider.js.map +1 -0
- package/dist/daemon/registry.d.ts +209 -0
- package/dist/daemon/registry.d.ts.map +1 -0
- package/dist/daemon/registry.js +1591 -0
- package/dist/daemon/registry.js.map +1 -0
- package/dist/daemon/runtime-dependencies.d.ts +5 -0
- package/dist/daemon/runtime-dependencies.d.ts.map +1 -0
- package/dist/daemon/runtime-dependencies.js +31 -0
- package/dist/daemon/runtime-dependencies.js.map +1 -0
- package/dist/daemon/server.d.ts +110 -0
- package/dist/daemon/server.d.ts.map +1 -0
- package/dist/daemon/server.js +556 -0
- package/dist/daemon/server.js.map +1 -0
- package/dist/daemon/service.d.ts +38 -0
- package/dist/daemon/service.d.ts.map +1 -0
- package/dist/daemon/service.js +275 -0
- package/dist/daemon/service.js.map +1 -0
- package/dist/daemon/session-cursor.d.ts +3 -0
- package/dist/daemon/session-cursor.d.ts.map +1 -0
- package/dist/daemon/session-cursor.js +4 -0
- package/dist/daemon/session-cursor.js.map +1 -0
- package/dist/daemon/session-execution.d.ts +88 -0
- package/dist/daemon/session-execution.d.ts.map +1 -0
- package/dist/daemon/session-execution.js +2 -0
- package/dist/daemon/session-execution.js.map +1 -0
- package/dist/daemon/session-executions.d.ts +5 -0
- package/dist/daemon/session-executions.d.ts.map +1 -0
- package/dist/daemon/session-executions.js +146 -0
- package/dist/daemon/session-executions.js.map +1 -0
- package/dist/daemon/session-files.d.ts +28 -0
- package/dist/daemon/session-files.d.ts.map +1 -0
- package/dist/daemon/session-files.js +189 -0
- package/dist/daemon/session-files.js.map +1 -0
- package/dist/daemon/session-lifecycle-contracts.d.ts +104 -0
- package/dist/daemon/session-lifecycle-contracts.d.ts.map +1 -0
- package/dist/daemon/session-lifecycle-contracts.js +2 -0
- package/dist/daemon/session-lifecycle-contracts.js.map +1 -0
- package/dist/daemon/session-lifecycle.d.ts +26 -0
- package/dist/daemon/session-lifecycle.d.ts.map +1 -0
- package/dist/daemon/session-lifecycle.js +246 -0
- package/dist/daemon/session-lifecycle.js.map +1 -0
- package/dist/daemon/session-runtime.d.ts +64 -0
- package/dist/daemon/session-runtime.d.ts.map +1 -0
- package/dist/daemon/session-runtime.js +3 -0
- package/dist/daemon/session-runtime.js.map +1 -0
- package/dist/daemon/session-services.d.ts +6 -0
- package/dist/daemon/session-services.d.ts.map +1 -0
- package/dist/daemon/session-services.js +144 -0
- package/dist/daemon/session-services.js.map +1 -0
- package/dist/daemon/shutdown-error.d.ts +12 -0
- package/dist/daemon/shutdown-error.d.ts.map +1 -0
- package/dist/daemon/shutdown-error.js +51 -0
- package/dist/daemon/shutdown-error.js.map +1 -0
- package/dist/daemon/supervisor.d.ts +28 -0
- package/dist/daemon/supervisor.d.ts.map +1 -0
- package/dist/daemon/supervisor.js +159 -0
- package/dist/daemon/supervisor.js.map +1 -0
- package/dist/daemon/target.d.ts +55 -0
- package/dist/daemon/target.d.ts.map +1 -0
- package/dist/daemon/target.js +191 -0
- package/dist/daemon/target.js.map +1 -0
- package/dist/daemon/tree.d.ts +7 -0
- package/dist/daemon/tree.d.ts.map +1 -0
- package/dist/daemon/tree.js +126 -0
- package/dist/daemon/tree.js.map +1 -0
- package/dist/daemon/ui-vocabulary.d.ts +29 -0
- package/dist/daemon/ui-vocabulary.d.ts.map +1 -0
- package/dist/daemon/ui-vocabulary.js +323 -0
- package/dist/daemon/ui-vocabulary.js.map +1 -0
- package/dist/daemon/worker.d.ts +5 -0
- package/dist/daemon/worker.d.ts.map +1 -0
- package/dist/daemon/worker.js +49 -0
- package/dist/daemon/worker.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/lock.d.ts +27 -0
- package/dist/lock.d.ts.map +1 -0
- package/dist/lock.js +432 -0
- package/dist/lock.js.map +1 -0
- package/dist/logger.d.ts +9 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +56 -0
- package/dist/logger.js.map +1 -0
- package/dist/remote/backoff.d.ts +17 -0
- package/dist/remote/backoff.d.ts.map +1 -0
- package/dist/remote/backoff.js +18 -0
- package/dist/remote/backoff.js.map +1 -0
- package/dist/remote/batch.d.ts +3 -0
- package/dist/remote/batch.d.ts.map +1 -0
- package/dist/remote/batch.js +27 -0
- package/dist/remote/batch.js.map +1 -0
- package/dist/remote/command-journal.d.ts +30 -0
- package/dist/remote/command-journal.d.ts.map +1 -0
- package/dist/remote/command-journal.js +72 -0
- package/dist/remote/command-journal.js.map +1 -0
- package/dist/remote/commands.d.ts +48 -0
- package/dist/remote/commands.d.ts.map +1 -0
- package/dist/remote/commands.js +145 -0
- package/dist/remote/commands.js.map +1 -0
- package/dist/remote/connector.d.ts +135 -0
- package/dist/remote/connector.d.ts.map +1 -0
- package/dist/remote/connector.js +1069 -0
- package/dist/remote/connector.js.map +1 -0
- package/dist/remote/content.d.ts +17 -0
- package/dist/remote/content.d.ts.map +1 -0
- package/dist/remote/content.js +116 -0
- package/dist/remote/content.js.map +1 -0
- package/dist/remote/outbox.d.ts +52 -0
- package/dist/remote/outbox.d.ts.map +1 -0
- package/dist/remote/outbox.js +321 -0
- package/dist/remote/outbox.js.map +1 -0
- package/dist/remote/platform.d.ts +53 -0
- package/dist/remote/platform.d.ts.map +1 -0
- package/dist/remote/platform.js +231 -0
- package/dist/remote/platform.js.map +1 -0
- package/dist/remote/realtime.d.ts +45 -0
- package/dist/remote/realtime.d.ts.map +1 -0
- package/dist/remote/realtime.js +265 -0
- package/dist/remote/realtime.js.map +1 -0
- package/dist/remote/sharing.d.ts +16 -0
- package/dist/remote/sharing.d.ts.map +1 -0
- package/dist/remote/sharing.js +24 -0
- package/dist/remote/sharing.js.map +1 -0
- package/dist/remote/state.d.ts +52 -0
- package/dist/remote/state.d.ts.map +1 -0
- package/dist/remote/state.js +156 -0
- package/dist/remote/state.js.map +1 -0
- package/dist/remote/text.d.ts +11 -0
- package/dist/remote/text.d.ts.map +1 -0
- package/dist/remote/text.js +188 -0
- package/dist/remote/text.js.map +1 -0
- package/dist/remote/token.d.ts +39 -0
- package/dist/remote/token.d.ts.map +1 -0
- package/dist/remote/token.js +238 -0
- package/dist/remote/token.js.map +1 -0
- package/dist/runtime-factory.d.ts +12 -0
- package/dist/runtime-factory.d.ts.map +1 -0
- package/dist/runtime-factory.js +12 -0
- package/dist/runtime-factory.js.map +1 -0
- package/dist/session-history.d.ts +29 -0
- package/dist/session-history.d.ts.map +1 -0
- package/dist/session-history.js +374 -0
- package/dist/session-history.js.map +1 -0
- package/dist/setup/dependencies.d.ts +15 -0
- package/dist/setup/dependencies.d.ts.map +1 -0
- package/dist/setup/dependencies.js +2 -0
- package/dist/setup/dependencies.js.map +1 -0
- package/dist/setup/open.d.ts +8 -0
- package/dist/setup/open.d.ts.map +1 -0
- package/dist/setup/open.js +16 -0
- package/dist/setup/open.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +4 -0
- package/dist/version.js.map +1 -0
- package/package.json +66 -4
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Felan contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/NOTICE
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
@felan-ai/daemon
|
|
2
|
+
|
|
3
|
+
The remote connector uses @supabase/supabase-js 2.97.0 from
|
|
4
|
+
https://github.com/supabase/supabase-js under the MIT License.
|
|
5
|
+
Its dependencies retain their upstream licensing terms.
|
|
6
|
+
|
|
7
|
+
The local daemon ownership adapter uses Koffi 3.3.2 from
|
|
8
|
+
https://github.com/Koromix/koffi under the MIT License.
|
|
9
|
+
Copyright (c) 2026 Niels Martignène <niels.martignene@protonmail.com>.
|
|
10
|
+
Koffi and its platform prebuild packages retain their upstream license files.
|
|
11
|
+
|
|
12
|
+
Copyright (c) 2026 Felan contributors
|
|
13
|
+
|
|
14
|
+
This package composes the MIT-licensed @felan-ai/agent-core and Felan extension
|
|
15
|
+
packages listed in package.json. Their package-level LICENSE and NOTICE files
|
|
16
|
+
contain the applicable attribution and source provenance.
|
|
17
|
+
|
|
18
|
+
The optional Codebase Memory integration uses @felan-ai/ext-codebase-memory,
|
|
19
|
+
which adapts pi-cbm 1.2.1 and integrates with codebase-memory-mcp 0.11.0. The
|
|
20
|
+
native executable is installed only after explicit confirmation and is not
|
|
21
|
+
bundled in this npm package. Its package-level LICENSE and NOTICE contain the
|
|
22
|
+
immutable source revisions and terms.
|
|
23
|
+
|
|
24
|
+
The local-first memory integration is original MIT-licensed Felan code from
|
|
25
|
+
@felan-ai/ext-memory. Its package-level LICENSE and NOTICE contain the
|
|
26
|
+
applicable attribution.
|
|
27
|
+
|
|
28
|
+
The session compaction integration uses original Felan code from
|
|
29
|
+
@felan-ai/ext-session-compaction. Its design references reviewed releases of
|
|
30
|
+
pi-smart-compact and pi-vcc; no upstream source is bundled. Its package-level
|
|
31
|
+
LICENSE and NOTICE contain the applicable attribution.
|
|
32
|
+
|
|
33
|
+
The classifier integration uses original Felan Pi-backed bridge code from
|
|
34
|
+
@felan-ai/agent-core. The host may inject it into local runtimes.
|
|
35
|
+
The model tools integration uses original MIT-licensed Felan code from
|
|
36
|
+
@felan-ai/ext-model-tools. Its package-level LICENSE and NOTICE contain the
|
|
37
|
+
applicable attribution.
|
|
38
|
+
|
|
39
|
+
The Fusion integration uses original MIT-licensed Felan code from
|
|
40
|
+
@felan-ai/ext-fusion. It is design-informed by disler/fusion-harness at the
|
|
41
|
+
reviewed revision recorded in the extension's NOTICE; no upstream source or
|
|
42
|
+
prompt text is copied. Its package-level LICENSE and NOTICE contain details.
|
|
43
|
+
|
|
44
|
+
The daemon and its temporarily mixed presenter adapters use @earendil-works/pi-coding-agent and
|
|
45
|
+
@earendil-works/pi-tui from https://github.com/earendil-works/pi,
|
|
46
|
+
licensed under the MIT License.
|
|
47
|
+
Copyright (c) 2025 Mario Zechner.
|
|
48
|
+
It also uses @earendil-works/pi-server from the same project under the
|
|
49
|
+
MIT License.
|
|
50
|
+
|
|
51
|
+
The local powerline subscription host adapts provider request behavior from
|
|
52
|
+
packages/pi-powerline in https://github.com/mslavov/pi-extensions at commit
|
|
53
|
+
7e72e509fe45a5a87c4c2e176cb711de994a8c1d. Copyright (c) 2026 Milko Slavov.
|
|
54
|
+
That source credits the MIT-licensed packages/sub-core from
|
|
55
|
+
https://github.com/marckrenn/pi-sub for subscription provider and usage logic.
|
|
56
|
+
Copyright (c) 2026 Marc Krenn.
|
|
57
|
+
|
|
58
|
+
The local subagent navigator adapts the MIT-licensed agent navigator and
|
|
59
|
+
transcript components from packages/pi-subagents in
|
|
60
|
+
https://github.com/mslavov/pi-extensions at commit
|
|
61
|
+
7e72e509fe45a5a87c4c2e176cb711de994a8c1d. Copyright (c) 2026 tintinweb.
|
|
62
|
+
Modifications copyright (c) 2026 Milko Slavov.
|
|
63
|
+
|
|
64
|
+
The local MCP OAuth host uses @napi-rs/keyring 1.3.0 from
|
|
65
|
+
https://github.com/Brooooooklyn/keyring-node, licensed under the MIT License.
|
|
66
|
+
Copyright (c) 2020 N-API for Rust.
|
|
67
|
+
|
|
68
|
+
It uses open 11.0.0 from https://github.com/sindresorhus/open, licensed under
|
|
69
|
+
the MIT License. Copyright (c) Sindre Sorhus.
|
package/README.md
CHANGED
|
@@ -1,3 +1,62 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Felan session daemon
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
`@felan-ai/daemon` owns the session server, admission, registry, canonical
|
|
4
|
+
persistence and execution lifetime. It has no dependency on the Felan client
|
|
5
|
+
or extension implementations. `@felan-ai/felan` supplies local providers,
|
|
6
|
+
default configuration and clients, and installs the exact daemon version.
|
|
7
|
+
|
|
8
|
+
Importing this package does not start a daemon. A managing package launches the
|
|
9
|
+
installed entrypoint with trusted configuration. Provider modules resolve from
|
|
10
|
+
that installation, never from the working directory or project content.
|
|
11
|
+
|
|
12
|
+
## Contracts and configuration
|
|
13
|
+
|
|
14
|
+
- `.` exports `DAEMON_VERSION` and the configured `SESSION_RUNTIME_SERVICE`.
|
|
15
|
+
- `./version` exports `DAEMON_VERSION` without loading session runtime contracts.
|
|
16
|
+
- `./host-config` exposes host configuration schemas, loading and trusted
|
|
17
|
+
provider resolution for managing packages.
|
|
18
|
+
- `./session-runtime` describes session composition and host operations for
|
|
19
|
+
configuration, preferences, setup and root preparation. Providers supply
|
|
20
|
+
these operations and credential storage; the daemon retains admission and
|
|
21
|
+
shutdown ownership.
|
|
22
|
+
- `./provider` describes trusted provider definitions, restricted execution
|
|
23
|
+
ports, process adapters and shared storage/locking helpers.
|
|
24
|
+
- `./client` exposes authenticated local transport, target resolution and
|
|
25
|
+
managed daemon launch. `./daemon-bootstrap` supports managing entrypoints.
|
|
26
|
+
- Internal subpaths, including registry, stores, persistence and the runtime
|
|
27
|
+
UI translator, are not exported.
|
|
28
|
+
|
|
29
|
+
Local settings parsing, keychain credentials, model defaults, HTTP bootstrap,
|
|
30
|
+
system prompt loading, folder trust and authentication workers belong to
|
|
31
|
+
`@felan-ai/felan` providers, not the daemon package.
|
|
32
|
+
|
|
33
|
+
The old `./daemon-profile` export is removed. Daemon 0.1.0 and protocol 0.2.0
|
|
34
|
+
are coordinated with Agent Core 0.13.0.
|
|
35
|
+
They are not published by local verification. New npm packages still require
|
|
36
|
+
the manual 0.0.0 bootstrap and trusted-publisher setup in the
|
|
37
|
+
[release procedure](../../docs/releasing.md).
|
|
38
|
+
|
|
39
|
+
`host.json` selects providers, extensions and policy. Precedence is an explicit
|
|
40
|
+
absolute path, the agent-directory file, then a packaged default supplied by
|
|
41
|
+
the manager. The generic daemon has no implicit local provider configuration.
|
|
42
|
+
Provider changes require restart. Session configuration and storage identities
|
|
43
|
+
are checked on restore; changed or missing identities require explicit reload.
|
|
44
|
+
Control state uses version 1. Invalid or unsupported data fails closed and is
|
|
45
|
+
preserved for recovery; there is no automatic migration, reset or replay.
|
|
46
|
+
|
|
47
|
+
Stdio transports and their persistent readers are session infrastructure, not
|
|
48
|
+
active work. Their consumers report in-flight requests through the runtime
|
|
49
|
+
lifetime service. Idle transports do not prevent reload or eviction; the daemon
|
|
50
|
+
still terminates them and joins their readers before releasing the session.
|
|
51
|
+
Shell jobs and interactive terminals continue to block eviction while running.
|
|
52
|
+
|
|
53
|
+
## Presentation and verification
|
|
54
|
+
|
|
55
|
+
Clients render the shared UI vocabulary. Optional renderer hints do not grant
|
|
56
|
+
authority. Capabilities and trusted transport facts determine eligibility;
|
|
57
|
+
client-kind labels do not. Host setup applies policy before local-console
|
|
58
|
+
approval, and strict ACP execution policy remains independent of presentation.
|
|
59
|
+
|
|
60
|
+
The pinned Pi SDK transitively includes `pi-tui`; this package is not claimed
|
|
61
|
+
to be terminal-free. Run tests through `scripts/test-isolated.sh`, which gives
|
|
62
|
+
each run a fresh HOME, agent directory and TMPDIR.
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { connectLocalIpc } from './daemon/ipc.js';
|
|
2
|
+
export { spawnDetachedDaemon } from './daemon/supervisor.js';
|
|
3
|
+
export { assertTargetIdentity, protocolTarget, resolveDaemonTarget } from './daemon/target.js';
|
|
4
|
+
export type { DaemonTarget, ResolvedDaemonTarget } from './daemon/target.js';
|
|
5
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC/F,YAAY,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/client.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { type ClientEnvelope, type Response } from '@felan-ai/session-protocol';
|
|
2
|
+
import type { DaemonControlStore } from './control-store.js';
|
|
3
|
+
export interface AdmissionOptions {
|
|
4
|
+
maxPending?: number;
|
|
5
|
+
maxBytes?: number;
|
|
6
|
+
committed?(revisions: Readonly<Record<string, number>>): void;
|
|
7
|
+
dispatched?(revisions: Readonly<Record<string, number>>): void;
|
|
8
|
+
}
|
|
9
|
+
export interface AdmittedCommand {
|
|
10
|
+
readonly request: ClientEnvelope;
|
|
11
|
+
assertDispatch(): void;
|
|
12
|
+
dispatch<T>(effect: () => T): T;
|
|
13
|
+
}
|
|
14
|
+
export interface AdmissionOutcome {
|
|
15
|
+
response: Response | Promise<Response>;
|
|
16
|
+
}
|
|
17
|
+
export type AdmissionHandler = (command: AdmittedCommand) => AdmissionOutcome | Promise<AdmissionOutcome>;
|
|
18
|
+
export declare const SAFETY_BYTES: number;
|
|
19
|
+
export declare class OrderedAdmission {
|
|
20
|
+
private readonly store;
|
|
21
|
+
private readonly options;
|
|
22
|
+
private readonly pending;
|
|
23
|
+
private readonly lanes;
|
|
24
|
+
private bytes;
|
|
25
|
+
private duplicateWaiters;
|
|
26
|
+
private readonly maxPending;
|
|
27
|
+
private readonly maxBytes;
|
|
28
|
+
constructor(store: DaemonControlStore, options?: AdmissionOptions);
|
|
29
|
+
submit(value: unknown, principal: string, handler?: AdmissionHandler): Promise<Response>;
|
|
30
|
+
private record;
|
|
31
|
+
private retained;
|
|
32
|
+
private savedResponse;
|
|
33
|
+
private prepare;
|
|
34
|
+
private finish;
|
|
35
|
+
private failedResponse;
|
|
36
|
+
}
|
|
37
|
+
/** Wire-safe text of an error; diagnostics are single-line, bounded by the protocol and never quote credentials or parsed file content. */
|
|
38
|
+
export declare function diagnosticMessage(error: unknown): string;
|
|
39
|
+
//# sourceMappingURL=admission.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admission.d.ts","sourceRoot":"","sources":["../../src/daemon/admission.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EAAE,KAAK,QAAQ,EACnC,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAG7D,MAAM,WAAW,gBAAgB;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC;IAC9D,UAAU,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC;CAChE;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,cAAc,IAAI,IAAI,CAAC;IAEvB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;CACjC;AAGD,MAAM,WAAW,gBAAgB;IAAG,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;CAAE;AAC5E,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,eAAe,KAAK,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAI1G,eAAO,MAAM,YAAY,QAAY,CAAC;AAEtC,qBAAa,gBAAgB;IAQf,OAAO,CAAC,QAAQ,CAAC,KAAK;IAAsB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAPhF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwC;IAChE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoC;IAC1D,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEL,KAAK,EAAE,kBAAkB,EAAmB,OAAO,GAAE,gBAAqB;IAUjG,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC;IA0C9F,OAAO,CAAC,MAAM;IAMd,OAAO,CAAC,QAAQ;IAMhB,OAAO,CAAC,aAAa;YAMP,OAAO;YA0BP,MAAM;IAiBpB,OAAO,CAAC,cAAc;CASvB;AAED,2IAA2I;AAC3I,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAMxD"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { ERROR_CODES, IdSchema, LIMITS, OPERATION_CATALOG, ProtocolValidationError, parseClientEnvelope, parseSchema, parseServerEnvelope, } from '@felan-ai/session-protocol';
|
|
2
|
+
import { ControlStoreError } from './control-state.js';
|
|
3
|
+
import { redact } from '../logger.js';
|
|
4
|
+
const safetyOperations = new Set(['cancel', 'executions.cancel', 'interaction.answer', 'processes.stop', 'host.stop', 'host.restart', 'close']);
|
|
5
|
+
// Backpressure headroom kept free for cancellation, answers and other safety operations.
|
|
6
|
+
export const SAFETY_BYTES = 64 * 1024;
|
|
7
|
+
export class OrderedAdmission {
|
|
8
|
+
store;
|
|
9
|
+
options;
|
|
10
|
+
pending = new Map();
|
|
11
|
+
lanes = new Map();
|
|
12
|
+
bytes = 0;
|
|
13
|
+
duplicateWaiters = 0;
|
|
14
|
+
maxPending;
|
|
15
|
+
maxBytes;
|
|
16
|
+
constructor(store, options = {}) {
|
|
17
|
+
this.store = store;
|
|
18
|
+
this.options = options;
|
|
19
|
+
this.maxPending = options.maxPending ?? LIMITS.inflightRequests;
|
|
20
|
+
this.maxBytes = options.maxBytes ?? LIMITS.unsentBytes;
|
|
21
|
+
if (!Number.isSafeInteger(this.maxPending) || this.maxPending < 2 || this.maxPending > LIMITS.inflightRequests
|
|
22
|
+
|| !Number.isSafeInteger(this.maxBytes) || this.maxBytes <= SAFETY_BYTES || this.maxBytes > LIMITS.unsentBytes) {
|
|
23
|
+
throw new Error('Admission limits must preserve bounded safety capacity.');
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
// The caller supplies an already authorized, stable transport principal, not an attachment ID.
|
|
27
|
+
async submit(value, principal, handler) {
|
|
28
|
+
this.store.owner.assertCurrent();
|
|
29
|
+
principal = parseSchema(IdSchema, principal);
|
|
30
|
+
const request = parseClientEnvelope(value);
|
|
31
|
+
if (OPERATION_CATALOG[request.op].storage !== 'durable') {
|
|
32
|
+
throw new ProtocolValidationError('invalid_request', 'Only durable commands enter ordered admission.');
|
|
33
|
+
}
|
|
34
|
+
const bytes = Buffer.byteLength(JSON.stringify(request)) + Buffer.byteLength(principal);
|
|
35
|
+
const safety = safetyOperations.has(request.op);
|
|
36
|
+
const byteLimit = this.maxBytes - (safety ? 0 : SAFETY_BYTES);
|
|
37
|
+
const previous = this.store.request(request.id);
|
|
38
|
+
if (previous) {
|
|
39
|
+
const record = this.store.admit(request, principal).value;
|
|
40
|
+
const pending = this.pending.get(request.id);
|
|
41
|
+
if (!pending)
|
|
42
|
+
return this.retained(record);
|
|
43
|
+
if (this.duplicateWaiters >= this.maxPending || this.bytes + bytes > byteLimit) {
|
|
44
|
+
throw new ControlStoreError('request_capacity', 'Too many retries are awaiting their original outcome.');
|
|
45
|
+
}
|
|
46
|
+
this.duplicateWaiters++;
|
|
47
|
+
this.bytes += bytes;
|
|
48
|
+
try {
|
|
49
|
+
return structuredClone(await pending);
|
|
50
|
+
}
|
|
51
|
+
finally {
|
|
52
|
+
this.duplicateWaiters--;
|
|
53
|
+
this.bytes -= bytes;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
if (this.pending.size >= this.maxPending - (safety ? 0 : 1)
|
|
57
|
+
|| this.bytes + bytes > byteLimit) {
|
|
58
|
+
throw new ControlStoreError('request_capacity', 'Admission capacity reached; retry after pending work settles.');
|
|
59
|
+
}
|
|
60
|
+
const admitted = this.store.admit(request, principal);
|
|
61
|
+
this.options.committed?.(admitted.revisions);
|
|
62
|
+
const lane = request.session ?? '';
|
|
63
|
+
const prepared = (this.lanes.get(lane) ?? Promise.resolve()).then(() => this.prepare(request, handler));
|
|
64
|
+
const tail = prepared.then(() => { }, () => { });
|
|
65
|
+
this.lanes.set(lane, tail);
|
|
66
|
+
void tail.then(() => { if (this.lanes.get(lane) === tail)
|
|
67
|
+
this.lanes.delete(lane); });
|
|
68
|
+
const result = prepared.then(outcome => this.finish(request, outcome)).finally(() => {
|
|
69
|
+
this.pending.delete(request.id);
|
|
70
|
+
this.bytes -= bytes;
|
|
71
|
+
});
|
|
72
|
+
this.pending.set(request.id, result);
|
|
73
|
+
this.bytes += bytes;
|
|
74
|
+
return structuredClone(await result);
|
|
75
|
+
}
|
|
76
|
+
record(id) {
|
|
77
|
+
const record = this.store.request(id);
|
|
78
|
+
if (!record)
|
|
79
|
+
throw new ControlStoreError('storage_failure', 'Admitted request identity is missing.');
|
|
80
|
+
return record;
|
|
81
|
+
}
|
|
82
|
+
retained(record) {
|
|
83
|
+
if (record.phase === 'terminal')
|
|
84
|
+
return this.savedResponse(record);
|
|
85
|
+
return this.store.finishRequest(record.id, record.phase === 'dispatch_intent' ? indeterminate(record.id)
|
|
86
|
+
: failure(record.id, 'unavailable', 'The daemon stopped before this request was dispatched.')).value;
|
|
87
|
+
}
|
|
88
|
+
savedResponse(record) {
|
|
89
|
+
const response = parseServerEnvelope(record.response, record.op);
|
|
90
|
+
if (!('re' in response) || response.re !== record.id)
|
|
91
|
+
throw new ControlStoreError('storage_failure', 'Stored outcome identity is invalid.');
|
|
92
|
+
return response;
|
|
93
|
+
}
|
|
94
|
+
async prepare(request, handler) {
|
|
95
|
+
let dispatchAllowed = true;
|
|
96
|
+
const assertDispatch = () => {
|
|
97
|
+
if (!dispatchAllowed)
|
|
98
|
+
throw new Error('Dispatch must start before admission completes.');
|
|
99
|
+
const record = this.store.request(request.id);
|
|
100
|
+
if (record?.phase !== 'intent')
|
|
101
|
+
throw new ControlStoreError('already_resolved', 'Request is no longer undispatched.');
|
|
102
|
+
};
|
|
103
|
+
try {
|
|
104
|
+
const current = this.record(request.id);
|
|
105
|
+
if (current.phase !== 'intent')
|
|
106
|
+
return { response: this.retained(current) };
|
|
107
|
+
assertDispatch();
|
|
108
|
+
if (!handler)
|
|
109
|
+
return { response: failure(request.id, 'unavailable', 'No handler is available for this operation.') };
|
|
110
|
+
const outcome = await handler({ request: structuredClone(request), assertDispatch, dispatch: effect => {
|
|
111
|
+
assertDispatch();
|
|
112
|
+
const commit = this.store.markDispatched(request.id);
|
|
113
|
+
(this.options.dispatched ?? this.options.committed)?.(commit.revisions);
|
|
114
|
+
this.store.owner.assertCurrent();
|
|
115
|
+
return effect();
|
|
116
|
+
} });
|
|
117
|
+
this.store.owner.assertCurrent();
|
|
118
|
+
return outcome;
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
return { response: this.failedResponse(request.id, error) };
|
|
122
|
+
}
|
|
123
|
+
finally {
|
|
124
|
+
dispatchAllowed = false;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
async finish(request, outcome) {
|
|
128
|
+
let response;
|
|
129
|
+
try {
|
|
130
|
+
const parsed = parseServerEnvelope(await outcome.response, request.op);
|
|
131
|
+
if (!('re' in parsed) || parsed.re !== request.id) {
|
|
132
|
+
throw new ProtocolValidationError('invalid_request', 'Outcome must identify its admitted request.');
|
|
133
|
+
}
|
|
134
|
+
response = parsed;
|
|
135
|
+
if (response.outcome === 'accepted' && this.record(request.id).phase === 'intent') {
|
|
136
|
+
throw new ProtocolValidationError('invalid_request', 'Acceptance requires committed dispatch intent.');
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
response = this.failedResponse(request.id, error);
|
|
141
|
+
}
|
|
142
|
+
const current = this.record(request.id);
|
|
143
|
+
if (current.phase === 'terminal')
|
|
144
|
+
return this.savedResponse(current);
|
|
145
|
+
return this.store.finishRequest(request.id, response).value;
|
|
146
|
+
}
|
|
147
|
+
failedResponse(id, error) {
|
|
148
|
+
const record = this.record(id);
|
|
149
|
+
if (record.phase === 'terminal')
|
|
150
|
+
return this.savedResponse(record);
|
|
151
|
+
if (record.phase === 'dispatch_intent')
|
|
152
|
+
return indeterminate(id);
|
|
153
|
+
const candidate = error !== null && typeof error === 'object' ? Object.getOwnPropertyDescriptor(error, 'code')?.value : undefined;
|
|
154
|
+
const code = error instanceof ProtocolValidationError || error instanceof ControlStoreError ? error.code
|
|
155
|
+
: typeof candidate === 'string' && (candidate === 'host_blocked' || ERROR_CODES.includes(candidate)) ? candidate : 'unavailable';
|
|
156
|
+
return failure(id, code, diagnosticMessage(error));
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
/** Wire-safe text of an error; diagnostics are single-line, bounded by the protocol and never quote credentials or parsed file content. */
|
|
160
|
+
export function diagnosticMessage(error) {
|
|
161
|
+
const message = error instanceof SyntaxError ? 'A file or response contains invalid JSON.' : error instanceof Error ? redact(error.message) : '';
|
|
162
|
+
const flat = message.replace(/[\u0000-\u001f\u007f-\u009f]+/gu, ' ').trim();
|
|
163
|
+
if (!flat)
|
|
164
|
+
return 'Operation could not be completed.';
|
|
165
|
+
const bytes = Buffer.from(flat);
|
|
166
|
+
return bytes.length <= 4096 ? flat : `${bytes.subarray(0, 4090).toString('utf8').replace(/\uFFFD+$/u, '')}…`;
|
|
167
|
+
}
|
|
168
|
+
function failure(id, code, message) {
|
|
169
|
+
return { v: 1, re: id, outcome: 'rejected', error: { code, message, retryable: false } };
|
|
170
|
+
}
|
|
171
|
+
function indeterminate(id) {
|
|
172
|
+
return { v: 1, re: id, outcome: 'indeterminate',
|
|
173
|
+
error: { code: 'indeterminate', message: 'The operation started but its outcome is unknown. Inspect the current session before retrying.', retryable: false } };
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=admission.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admission.js","sourceRoot":"","sources":["../../src/daemon/admission.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,WAAW,EAAE,mBAAmB,GAEjI,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAuB,MAAM,oBAAoB,CAAC;AAE5E,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAoBtC,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,WAAW,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC;AAChJ,yFAAyF;AACzF,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,GAAG,IAAI,CAAC;AAEtC,MAAM,OAAO,gBAAgB;IAQE;IAA4C;IAPxD,OAAO,GAAG,IAAI,GAAG,EAA6B,CAAC;IAC/C,KAAK,GAAG,IAAI,GAAG,EAAyB,CAAC;IAClD,KAAK,GAAG,CAAC,CAAC;IACV,gBAAgB,GAAG,CAAC,CAAC;IACZ,UAAU,CAAS;IACnB,QAAQ,CAAS;IAElC,YAA6B,KAAyB,EAAmB,UAA4B,EAAE;QAA1E,UAAK,GAAL,KAAK,CAAoB;QAAmB,YAAO,GAAP,OAAO,CAAuB;QACrG,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,MAAM,CAAC,gBAAgB,CAAC;QAChE,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC,WAAW,CAAC;QACvD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,gBAAgB;eACzG,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,IAAI,YAAY,IAAI,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;YACjH,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;IAED,+FAA+F;IAC/F,KAAK,CAAC,MAAM,CAAC,KAAc,EAAE,SAAiB,EAAE,OAA0B;QACxE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;QACjC,SAAS,GAAG,WAAW,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,iBAAiB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YACxD,MAAM,IAAI,uBAAuB,CAAC,iBAAiB,EAAE,gDAAgD,CAAC,CAAC;QACzG,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QACxF,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAChD,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAChD,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,KAAK,CAAC;YAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC7C,IAAI,CAAC,OAAO;gBAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC3C,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,GAAG,KAAK,GAAG,SAAS,EAAE,CAAC;gBAC/E,MAAM,IAAI,iBAAiB,CAAC,kBAAkB,EAAE,uDAAuD,CAAC,CAAC;YAC3G,CAAC;YACD,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC;YAC7C,IAAI,CAAC;gBAAC,OAAO,eAAe,CAAC,MAAM,OAAO,CAAC,CAAC;YAAC,CAAC;oBACtC,CAAC;gBAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC;YAAC,CAAC;QAC3D,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;eACtD,IAAI,CAAC,KAAK,GAAG,KAAK,GAAG,SAAS,EAAE,CAAC;YACpC,MAAM,IAAI,iBAAiB,CAAC,kBAAkB,EAAE,+DAA+D,CAAC,CAAC;QACnH,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACtD,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC7C,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QACxG,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC/C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC3B,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI;YAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEtF,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;YAClF,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC;QACvD,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC;QAC1D,OAAO,eAAe,CAAC,MAAM,MAAM,CAAC,CAAC;IACvC,CAAC;IAEO,MAAM,CAAC,EAAU;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,iBAAiB,CAAC,iBAAiB,EAAE,uCAAuC,CAAC,CAAC;QACrG,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,QAAQ,CAAC,MAAsB;QACrC,IAAI,MAAM,CAAC,KAAK,KAAK,UAAU;YAAE,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QACnE,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,KAAK,iBAAiB,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;YACtG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,aAAa,EAAE,wDAAwD,CAAC,CAAC,CAAC,KAAK,CAAC;IACzG,CAAC;IAEO,aAAa,CAAC,MAAsB;QAC1C,MAAM,QAAQ,GAAG,mBAAmB,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,EAA0B,CAAa,CAAC;QACrG,IAAI,CAAC,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,QAAQ,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE;YAAE,MAAM,IAAI,iBAAiB,CAAC,iBAAiB,EAAE,qCAAqC,CAAC,CAAC;QAC5I,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,OAAuB,EAAE,OAA0B;QACvE,IAAI,eAAe,GAAG,IAAI,CAAC;QAC3B,MAAM,cAAc,GAAG,GAAG,EAAE;YAC1B,IAAI,CAAC,eAAe;gBAAE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;YACzF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC9C,IAAI,MAAM,EAAE,KAAK,KAAK,QAAQ;gBAAE,MAAM,IAAI,iBAAiB,CAAC,kBAAkB,EAAE,oCAAoC,CAAC,CAAC;QACxH,CAAC,CAAC;QACF,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACxC,IAAI,OAAO,CAAC,KAAK,KAAK,QAAQ;gBAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5E,cAAc,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO;gBAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,aAAa,EAAE,6CAA6C,CAAC,EAAE,CAAC;YACrH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,EAAE,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE;oBACpG,cAAc,EAAE,CAAC;oBACjB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;oBACrD,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;oBACxE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;oBACjC,OAAO,MAAM,EAAE,CAAC;gBAClB,CAAC,EAAE,CAAC,CAAC;YACL,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;YACjC,OAAO,OAAO,CAAC;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC;QAC9D,CAAC;gBAAS,CAAC;YAAC,eAAe,GAAG,KAAK,CAAC;QAAC,CAAC;IACxC,CAAC;IAEO,KAAK,CAAC,MAAM,CAAC,OAAuB,EAAE,OAAyB;QACrE,IAAI,QAAkB,CAAC;QACvB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,mBAAmB,CAAC,MAAM,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;YACvE,IAAI,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,MAAM,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,EAAE,CAAC;gBAClD,MAAM,IAAI,uBAAuB,CAAC,iBAAiB,EAAE,6CAA6C,CAAC,CAAC;YACtG,CAAC;YACD,QAAQ,GAAG,MAAM,CAAC;YAClB,IAAI,QAAQ,CAAC,OAAO,KAAK,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAClF,MAAM,IAAI,uBAAuB,CAAC,iBAAiB,EAAE,gDAAgD,CAAC,CAAC;YACzG,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAAC,CAAC;QACtE,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACxC,IAAI,OAAO,CAAC,KAAK,KAAK,UAAU;YAAE,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACrE,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC;IAC9D,CAAC;IAEO,cAAc,CAAC,EAAU,EAAE,KAAc;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC/B,IAAI,MAAM,CAAC,KAAK,KAAK,UAAU;YAAE,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QACnE,IAAI,MAAM,CAAC,KAAK,KAAK,iBAAiB;YAAE,OAAO,aAAa,CAAC,EAAE,CAAC,CAAC;QACjE,MAAM,SAAS,GAAY,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3I,MAAM,IAAI,GAAG,KAAK,YAAY,uBAAuB,IAAI,KAAK,YAAY,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI;YACtG,CAAC,CAAC,OAAO,SAAS,KAAK,QAAQ,IAAI,CAAC,SAAS,KAAK,cAAc,IAAK,WAAiC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC;QAC1J,OAAO,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;IACrD,CAAC;CACF;AAED,2IAA2I;AAC3I,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,MAAM,OAAO,GAAG,KAAK,YAAY,WAAW,CAAC,CAAC,CAAC,2CAA2C,CAAC,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACjJ,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,iCAAiC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5E,IAAI,CAAC,IAAI;QAAE,OAAO,mCAAmC,CAAC;IACtD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,OAAO,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,GAAG,CAAC;AAC/G,CAAC;AAED,SAAS,OAAO,CAAC,EAAU,EAAE,IAAY,EAAE,OAAe;IACxD,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC;AAC3F,CAAC;AAED,SAAS,aAAa,CAAC,EAAU;IAC/B,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,eAAe;QAC7C,KAAK,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,gGAAgG,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC;AACpK,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type Logger } from '@felan-ai/agent-core';
|
|
2
|
+
import type { DaemonOwnership } from './ownership.js';
|
|
3
|
+
export declare class DaemonAgentLogs {
|
|
4
|
+
private readonly owner;
|
|
5
|
+
private readonly pending;
|
|
6
|
+
private closed;
|
|
7
|
+
constructor(owner: DaemonOwnership);
|
|
8
|
+
create(directory: string): Logger;
|
|
9
|
+
close(): Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=agent-logs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-logs.d.ts","sourceRoot":"","sources":["../../src/daemon/agent-logs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAErF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,qBAAa,eAAe;IAGd,OAAO,CAAC,QAAQ,CAAC,KAAK;IAFlC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;IACpD,OAAO,CAAC,MAAM,CAAS;gBACM,KAAK,EAAE,eAAe;IAEnD,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAa3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAC7B"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { createLogger, createSilentLogger } from '@felan-ai/agent-core';
|
|
2
|
+
import { appendLocalLogLine, resolveLocalLoggerLevel } from '../logger.js';
|
|
3
|
+
export class DaemonAgentLogs {
|
|
4
|
+
owner;
|
|
5
|
+
pending = new Set();
|
|
6
|
+
closed = false;
|
|
7
|
+
constructor(owner) {
|
|
8
|
+
this.owner = owner;
|
|
9
|
+
}
|
|
10
|
+
create(directory) {
|
|
11
|
+
const root = this.owner.assertOwnsPath(directory);
|
|
12
|
+
const level = resolveLocalLoggerLevel();
|
|
13
|
+
if (level === 'off')
|
|
14
|
+
return createSilentLogger();
|
|
15
|
+
return createLogger({ level, destination: { write: record => {
|
|
16
|
+
if (this.closed)
|
|
17
|
+
return;
|
|
18
|
+
try {
|
|
19
|
+
this.owner.assertCurrent();
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
const write = appendLocalLogLine(root, record);
|
|
25
|
+
this.pending.add(write);
|
|
26
|
+
void write.finally(() => this.pending.delete(write));
|
|
27
|
+
} } });
|
|
28
|
+
}
|
|
29
|
+
async close() { this.closed = true; await Promise.all(this.pending); }
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=agent-logs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-logs.js","sourceRoot":"","sources":["../../src/daemon/agent-logs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAe,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAG3E,MAAM,OAAO,eAAe;IAGG;IAFZ,OAAO,GAAG,IAAI,GAAG,EAAiB,CAAC;IAC5C,MAAM,GAAG,KAAK,CAAC;IACvB,YAA6B,KAAsB;QAAtB,UAAK,GAAL,KAAK,CAAiB;IAAG,CAAC;IAEvD,MAAM,CAAC,SAAiB;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,uBAAuB,EAAE,CAAC;QACxC,IAAI,KAAK,KAAK,KAAK;YAAE,OAAO,kBAAkB,EAAE,CAAC;QACjD,OAAO,YAAY,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE;oBAC1D,IAAI,IAAI,CAAC,MAAM;wBAAE,OAAO;oBACxB,IAAI,CAAC;wBAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;oBAAC,CAAC;oBAAC,MAAM,CAAC;wBAAC,OAAO;oBAAC,CAAC;oBACrD,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;oBAC/C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;oBACxB,KAAK,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBACvD,CAAC,EAAE,EAAE,CAAC,CAAC;IACT,CAAC;IAED,KAAK,CAAC,KAAK,KAAoB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;CACtF"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { runDaemonProcess } from './main.js';
|
|
2
|
+
export type { HostManager } from './host-config.js';
|
|
3
|
+
export { HostConfigSchema, loadHostConfig, resolveHostComposition, validPackageSpecifier } from './host-config.js';
|
|
4
|
+
export type { HostComposition, HostCompositionInfo, HostConfig, HostConfigSource, LoadedHostConfig, ResolvedHostProvider } from './host-config.js';
|
|
5
|
+
export { createConfiguredProviders } from './provider-loader.js';
|
|
6
|
+
export type { LoadedProviders } from './provider-loader.js';
|
|
7
|
+
//# sourceMappingURL=bootstrap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/daemon/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACnH,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,UAAU,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACnJ,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACjE,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/daemon/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7C,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAEnH,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import type { CreateAgentCoreSessionOptions } from '@felan-ai/agent-core';
|
|
2
|
+
import { type Interaction, type InteractionAnswer, type InteractionAuthority, type OperationParams } from '@felan-ai/session-protocol';
|
|
3
|
+
import type { AdmittedCommand, AdmissionOutcome } from './admission.js';
|
|
4
|
+
import type { DaemonControlStore } from './control-store.js';
|
|
5
|
+
import type { SessionRegistry } from './registry.js';
|
|
6
|
+
type ClientKind = OperationParams<'hello'>['kind'];
|
|
7
|
+
type Request = Interaction['request'];
|
|
8
|
+
type Scope = Interaction['scope'];
|
|
9
|
+
type Cancellation = Extract<Interaction, {
|
|
10
|
+
state: 'cancelled' | 'expired';
|
|
11
|
+
}>['result'];
|
|
12
|
+
export interface BrokerClient {
|
|
13
|
+
principal: string;
|
|
14
|
+
kind: ClientKind;
|
|
15
|
+
attachment: string;
|
|
16
|
+
sessions: readonly string[];
|
|
17
|
+
interactionKinds: OperationParams<'hello'>['interactionKinds'];
|
|
18
|
+
}
|
|
19
|
+
export interface BrokerRequestOptions {
|
|
20
|
+
signal?: AbortSignal;
|
|
21
|
+
timeout?: number;
|
|
22
|
+
deferrable?: boolean;
|
|
23
|
+
transient?: boolean;
|
|
24
|
+
authority?: InteractionAuthority;
|
|
25
|
+
}
|
|
26
|
+
export type BrokerOutcome = {
|
|
27
|
+
state: 'answered';
|
|
28
|
+
answer: InteractionAnswer;
|
|
29
|
+
} | {
|
|
30
|
+
state: 'cancelled';
|
|
31
|
+
reason: Cancellation['reason'];
|
|
32
|
+
} | {
|
|
33
|
+
state: 'deferred';
|
|
34
|
+
interactionId: string;
|
|
35
|
+
};
|
|
36
|
+
export interface BrokerOptions {
|
|
37
|
+
store: DaemonControlStore;
|
|
38
|
+
ownerPrincipal?: string;
|
|
39
|
+
publish(interaction: Interaction, revisions: Readonly<Record<string, number>>): void;
|
|
40
|
+
resume?(session: string, answer: InteractionAnswer, continuationId: string, dispatch: () => void): Promise<void>;
|
|
41
|
+
committed?(revisions: Readonly<Record<string, number>>): void;
|
|
42
|
+
now?: () => number;
|
|
43
|
+
onError?(error: unknown): void;
|
|
44
|
+
}
|
|
45
|
+
export declare class InteractionBroker {
|
|
46
|
+
private readonly options;
|
|
47
|
+
private readonly clients;
|
|
48
|
+
private readonly clientListeners;
|
|
49
|
+
private readonly waiters;
|
|
50
|
+
private readonly transient;
|
|
51
|
+
private readonly continuations;
|
|
52
|
+
private readonly continuationLanes;
|
|
53
|
+
private readonly now;
|
|
54
|
+
private readonly ownerPrincipal;
|
|
55
|
+
private timer;
|
|
56
|
+
private draining;
|
|
57
|
+
private failure;
|
|
58
|
+
constructor(options: BrokerOptions);
|
|
59
|
+
get interactionKinds(): OperationParams<'hello'>['interactionKinds'];
|
|
60
|
+
canPresent(request: Request, scope: Scope, options?: Pick<BrokerRequestOptions, 'authority'>): boolean;
|
|
61
|
+
canReceive(attachment: string, interaction: Interaction): boolean;
|
|
62
|
+
subscribeClients(listener: () => void): () => void;
|
|
63
|
+
private clientsChanged;
|
|
64
|
+
connected(client: BrokerClient): void;
|
|
65
|
+
attached(attachment: string, session: string): void;
|
|
66
|
+
detached(attachment: string, session: string): void;
|
|
67
|
+
disconnected(attachment: string): void;
|
|
68
|
+
private cancelUnpresentableOAuth;
|
|
69
|
+
pending(): Interaction[];
|
|
70
|
+
presentationRequest(id: string, attachment: string): Interaction['request'];
|
|
71
|
+
request(request: Request, scope: Scope, options?: BrokerRequestOptions): Promise<BrokerOutcome>;
|
|
72
|
+
dispatch(command: AdmittedCommand, client: Omit<BrokerClient, 'sessions'>): AdmissionOutcome;
|
|
73
|
+
dispatchRemote(command: AdmittedCommand, requester: {
|
|
74
|
+
user: string;
|
|
75
|
+
command: string;
|
|
76
|
+
interactionKinds: OperationParams<'hello'>['interactionKinds'];
|
|
77
|
+
}): AdmissionOutcome;
|
|
78
|
+
observe(interaction: Interaction): void;
|
|
79
|
+
recover(): Promise<void>;
|
|
80
|
+
drain(): Promise<void>;
|
|
81
|
+
cancel(id: string, reason: Exclude<Cancellation['reason'], 'user'>): void;
|
|
82
|
+
approvalExtension(registry: SessionRegistry): NonNullable<CreateAgentCoreSessionOptions['inlineExtensions']>[number];
|
|
83
|
+
private find;
|
|
84
|
+
private eligible;
|
|
85
|
+
private publish;
|
|
86
|
+
private startContinuation;
|
|
87
|
+
private expire;
|
|
88
|
+
private scheduleExpiry;
|
|
89
|
+
private safely;
|
|
90
|
+
private assertUsable;
|
|
91
|
+
}
|
|
92
|
+
export declare function createRegistryInteractionBroker(registry: SessionRegistry, options?: Pick<BrokerOptions, 'ownerPrincipal'>): InteractionBroker;
|
|
93
|
+
export {};
|
|
94
|
+
//# sourceMappingURL=broker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"broker.d.ts","sourceRoot":"","sources":["../../src/daemon/broker.ts"],"names":[],"mappings":"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"}
|