evolcore 0.0.25 → 0.0.27
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/CHANGELOG.md +632 -565
- package/LICENSE +21 -21
- package/README.md +455 -455
- package/bin/codex-managed-acl.ps1 +203 -160
- package/bin/codex-managed-hook.mjs +208 -208
- package/bin/ec-safe-output.js +327 -327
- package/bin/ec.js +40 -29
- package/bin/install-codex-managed-hooks.mjs +582 -555
- package/dist/agents/baseagent-availability.js +68 -0
- package/dist/agents/baseagent.js +96 -46
- package/dist/agents/claude-runner.js +172 -33
- package/dist/agents/codex/app-server-client.js +76 -31
- package/dist/agents/codex/catalog.js +1 -1
- package/dist/agents/codex/diagnostics.js +34 -1
- package/dist/agents/codex-runner.js +434 -446
- package/dist/agents/ecagent-runner.js +174 -34
- package/dist/agents/gemini-runner.js +8 -7
- package/dist/agents/runner-types.js +75 -19
- package/dist/aun/aid/agentmd.js +151 -36
- package/dist/aun/aid/client.js +1 -1
- package/dist/aun/aid/control-aid.js +180 -1
- package/dist/aun/aid/identity.js +4 -4
- package/dist/aun/aid/index.js +1 -1
- package/dist/aun/aid/store.js +17 -13
- package/dist/aun/group/history.js +303 -0
- package/dist/aun/group/identity.js +43 -0
- package/dist/aun/group/index.js +5 -0
- package/dist/aun/{msg/group.js → group/operations.js} +162 -39
- package/dist/aun/{menu-client.js → menu/client.js} +85 -6
- package/dist/aun/menu/index.js +2 -0
- package/dist/aun/menu/transport.js +49 -0
- package/dist/aun/msg/index.js +2 -1
- package/dist/aun/msg/managed-operation.js +85 -19
- package/dist/aun/msg/mention-schema.js +51 -0
- package/dist/aun/msg/p2p.js +19 -9
- package/dist/aun/msg/upload.js +43 -80
- package/dist/aun/outbox.js +29 -7
- package/dist/aun/rpc/client.js +1 -0
- package/dist/aun/storage/client.js +39 -50
- package/dist/channels/aun.js +842 -318
- package/dist/channels/daemon.js +10 -6
- package/dist/cli/agent-command.js +212 -89
- package/dist/cli/agent-create.js +626 -11
- package/dist/cli/agent.js +125 -13
- package/dist/cli/aun-commands.js +487 -337
- package/dist/cli/bench.js +20 -20
- package/dist/cli/config.js +55 -33
- package/dist/cli/contact.js +72 -15
- package/dist/cli/ctl-command.js +24 -24
- package/dist/cli/daemon-commands.js +140 -63
- package/dist/cli/diag.js +31 -0
- package/dist/cli/fs-command.js +70 -70
- package/dist/cli/handoff-command.js +46 -14
- package/dist/cli/index.js +91 -79
- package/dist/cli/init.js +34 -1
- package/dist/cli/link-rules.js +21 -21
- package/dist/cli/managed-command-guard.js +5 -1
- package/dist/cli/menu-client.js +51 -32
- package/dist/cli/model.js +3 -3
- package/dist/cli/net-check.js +22 -22
- package/dist/cli/queue-command.js +31 -31
- package/dist/cli/response.js +32 -32
- package/dist/cli/restart-monitor.js +103 -42
- package/dist/cli/stats.js +51 -51
- package/dist/cli/task-command.js +59 -0
- package/dist/cli/task-context.js +97 -49
- package/dist/cli/trigger-command.js +74 -64
- package/dist/config/builtin-roles.js +11 -0
- package/dist/config/config-field-policy.js +11 -0
- package/dist/config/config-manager.js +32 -4
- package/dist/config/config-operation-service.js +160 -0
- package/dist/config/contact-book-store.js +1 -1
- package/dist/config/contact-book.js +1 -1
- package/dist/config/contact-operation-service.js +97 -8
- package/dist/config/peer-role-resolver.js +1 -1
- package/dist/config/resolved-config-op.js +30 -7
- package/dist/config-store.js +1 -1
- package/dist/core/agent-application-service.js +7 -1
- package/dist/core/audit/event-key.js +17 -2
- package/dist/core/audit/log-integrity.js +34 -8
- package/dist/core/auth/agent-delegation.js +48 -14
- package/dist/core/auth/auth-gateway.js +2 -0
- package/dist/core/auth/authorization-audit.js +53 -49
- package/dist/core/auth/operation-authorizer.js +90 -7
- package/dist/core/auth/operation-catalog.js +145 -4
- package/dist/core/auth/remote-access-store.js +155 -10
- package/dist/core/bootstrap-messages.js +66 -7
- package/dist/core/bootstrap-service.js +111 -20
- package/dist/core/command/agent-control.js +88 -7
- package/dist/core/command/agent-storage-menu.js +443 -0
- package/dist/core/command/cli-intent-parser.js +19 -0
- package/dist/core/command/command-handler.js +159 -65
- package/dist/core/command/data-root-resolver.js +273 -0
- package/dist/core/command/diag-service.js +118 -0
- package/dist/core/command/group-menu.js +7 -2
- package/dist/core/command/menu-catalog.js +46 -7
- package/dist/core/command/menu-handler.js +392 -100
- package/dist/core/command/menu-protocol.js +45 -6
- package/dist/core/command/menu-token-store.js +41 -8
- package/dist/core/command/role-menu.js +2 -2
- package/dist/core/command/slash-gate.js +34 -4
- package/dist/core/command/slash-handler.js +123 -43
- package/dist/core/event-catalog.js +4 -0
- package/dist/core/evolagent-registry.js +28 -2
- package/dist/core/group/invite-service.js +924 -0
- package/dist/core/handoff/runtime.js +205 -27
- package/dist/core/handoff/store.js +193 -4
- package/dist/core/interaction-router.js +22 -8
- package/dist/core/message/im-renderer.js +146 -34
- package/dist/core/message/message-bridge.js +163 -20
- package/dist/core/message/message-log.js +5 -3
- package/dist/core/message/message-queue.js +99 -41
- package/dist/core/message/message-utils.js +1 -0
- package/dist/core/message/response-engine.js +755 -144
- package/dist/core/model/catalog-service.js +79 -49
- package/dist/core/model/context-window-suffix.js +33 -0
- package/dist/core/model/model-catalog.js +1 -1
- package/dist/core/model/model-permission.js +12 -3
- package/dist/core/permission/approval-gateway.js +36 -3
- package/dist/core/permission/ec-command-parser.js +112 -41
- package/dist/core/permission/protected-paths.js +134 -16
- package/dist/core/permission/sandbox-runtime.js +108 -17
- package/dist/core/permission/tool-error-code.js +15 -0
- package/dist/core/permission/tool-policy.js +9 -8
- package/dist/core/relation/peer-identity.js +57 -6
- package/dist/core/relation/shared-data.js +106 -0
- package/dist/core/role/runtime-policy.js +64 -0
- package/dist/core/runtime-lock.js +10 -26
- package/dist/core/session/runner-task-history.js +170 -0
- package/dist/core/session/session-manager.js +34 -6
- package/dist/core/session/session-mapper.js +41 -0
- package/dist/core/session/session-turn-coordinator.js +37 -7
- package/dist/core/session/session-turns.js +48 -7
- package/dist/core/task/task-recovery-service.js +176 -0
- package/dist/core/task/task-resume-operation.js +32 -0
- package/dist/eck/group-rules-sync.js +5 -3
- package/dist/eck/kit-renderer.js +1 -0
- package/dist/index.js +588 -217
- package/dist/ipc.js +193 -15
- package/dist/paths.js +17 -4
- package/dist/product.js +2 -0
- package/dist/response-system/engines/v1/proactive-flow.js +59 -2
- package/dist/stats/billing.js +41 -15
- package/dist/stats/db.js +159 -159
- package/dist/stats/eck-vars.js +9 -9
- package/dist/stats/price-resolver.js +28 -10
- package/dist/stats/query.js +139 -139
- package/dist/stats/role-budget.js +6 -6
- package/dist/stats/writer.js +51 -51
- package/dist/trigger/event-source.js +19 -0
- package/dist/trigger/feedback.js +233 -40
- package/dist/trigger/parser.js +55 -5
- package/dist/trigger/patch.js +9 -0
- package/dist/trigger/scheduler.js +30 -4
- package/dist/trigger/validation.js +20 -3
- package/dist/utils/cross-platform.js +30 -1
- package/dist/utils/ecweb-utils.js +1 -0
- package/dist/utils/error-dict.json +160 -160
- package/dist/utils/error-utils.js +61 -2
- package/dist/utils/evolcore-version.js +129 -0
- package/dist/utils/logger.js +26 -14
- package/dist/utils/macos-autostart.js +22 -22
- package/dist/utils/model-prices.jsonl +23 -23
- package/dist/utils/npm-ops.js +176 -35
- package/dist/utils/tool-summary.js +59 -3
- package/dist/utils/welcome.js +196 -23
- package/ecagent/LICENSE +21 -21
- package/ecagent/NOTICE +11 -11
- package/ecagent/README.md +61 -61
- package/ecagent/dist/harness/agent-harness.js +3 -0
- package/ecagent/dist/harness/compaction/branch-summarization.js +30 -30
- package/ecagent/dist/harness/compaction/compaction.js +83 -83
- package/ecagent/dist/harness/messages.js +7 -7
- package/ecagent/dist/harness/session/jsonl-storage.js +21 -2
- package/kits/docs/GUIDE.md +20 -20
- package/kits/docs/INDEX.md +60 -66
- package/kits/docs/aun/CHEATSHEET.md +19 -19
- package/kits/docs/aun/SYNC_PROTOCOL.md +15 -15
- package/kits/docs/channels/aun.md +69 -56
- package/kits/docs/channels/feishu.md +56 -56
- package/kits/docs/context-assembly.md +379 -367
- package/kits/docs/eck_templates/GUIDE.template.md +22 -22
- package/kits/docs/eck_templates/INDEX.template.md +28 -28
- package/kits/docs/eck_templates/path-registry.template.md +33 -33
- package/kits/docs/eck_templates/runtime.template.md +19 -19
- package/kits/docs/evolcore/INDEX.md +76 -71
- package/kits/docs/evolcore/agent-create.md +202 -165
- package/kits/docs/evolcore/agent.md +99 -67
- package/kits/docs/evolcore/aid.md +68 -60
- package/kits/docs/evolcore/codex-windows-sandbox.md +146 -146
- package/kits/docs/evolcore/config.md +241 -195
- package/kits/docs/evolcore/contact.md +75 -68
- package/kits/docs/evolcore/ctl.md +46 -46
- package/kits/docs/evolcore/event.md +216 -216
- package/kits/docs/evolcore/fs-architecture.md +1215 -1215
- package/kits/docs/evolcore/fs.md +110 -110
- package/kits/docs/evolcore/group-collaboration.md +244 -244
- package/kits/docs/evolcore/group-fs.md +17 -17
- package/kits/docs/evolcore/group-rules.md +251 -251
- package/kits/docs/evolcore/group.md +267 -152
- package/kits/docs/evolcore/menu-client.md +58 -34
- package/kits/docs/evolcore/model.md +50 -50
- package/kits/docs/evolcore/msg.md +169 -165
- package/kits/docs/evolcore/response.md +75 -75
- package/kits/docs/evolcore/rpc.md +37 -37
- package/kits/docs/evolcore/self-summary.md +29 -29
- package/kits/docs/evolcore/stats.md +83 -83
- package/kits/docs/evolcore/storage.md +53 -50
- package/kits/docs/evolcore/task.md +14 -0
- package/kits/docs/evolcore/trigger.md +623 -575
- package/kits/docs/identity/AID_PROFILE_SPEC.md +26 -26
- package/kits/docs/identity/PATH_OPS.md +16 -16
- package/kits/docs/identity/ROLE_DETAIL.md +25 -25
- package/kits/docs/identity/identity-tools.md +26 -26
- package/kits/docs/path-registry.md +62 -62
- package/kits/docs/prompt-loading-architecture.md +269 -269
- package/kits/docs/venues/aun-group.md +45 -45
- package/kits/docs/venues/aun-private.md +10 -10
- package/kits/docs/venues/client-desktop.md +10 -10
- package/kits/docs/venues/client-mobile.md +10 -10
- package/kits/docs/venues/feishu-group.md +13 -13
- package/kits/docs/venues/feishu-private.md +9 -9
- package/kits/docs/venues/group.md +42 -25
- package/kits/docs/venues/private.md +10 -10
- package/kits/eck_manifest.auxiliary.json +43 -43
- package/kits/eck_manifest.json +217 -190
- package/kits/eck_message_manifest.json +74 -74
- package/kits/migrations/README-role-config-v4.md +32 -32
- package/kits/migrations/migrate-contact-book-v2.mjs +748 -748
- package/kits/migrations/migrate-role-config-v4.mjs +614 -614
- package/kits/migrations/migrate-role-config-v5.mjs +365 -365
- package/kits/migrations/rename-config-file.mjs +99 -99
- package/kits/rules/01-overview.md +166 -162
- package/kits/rules/02-navigation.md +96 -96
- package/kits/rules/03-identity.md +36 -36
- package/kits/rules/04-relation.md +76 -75
- package/kits/rules/05-venue.md +60 -60
- package/kits/rules/06-channel.md +65 -63
- package/kits/schemas/_meta.json +53 -53
- package/kits/schemas/agent-config.schema.1.json +177 -177
- package/kits/schemas/agent-config.schema.10.json +395 -395
- package/kits/schemas/agent-config.schema.11.json +421 -421
- package/kits/schemas/agent-config.schema.12.json +451 -427
- package/kits/schemas/agent-config.schema.2.json +239 -239
- package/kits/schemas/agent-config.schema.3.json +119 -119
- package/kits/schemas/agent-config.schema.4.json +208 -208
- package/kits/schemas/agent-config.schema.5.json +326 -326
- package/kits/schemas/agent-config.schema.6.json +322 -322
- package/kits/schemas/agent-config.schema.7.json +303 -303
- package/kits/schemas/agent-config.schema.8.json +304 -304
- package/kits/schemas/agent-config.schema.9.json +364 -364
- package/kits/schemas/contact-book.schema.1.json +36 -36
- package/kits/schemas/contact-book.schema.2.json +43 -43
- package/kits/schemas/contact-book.schema.3.json +67 -67
- package/kits/schemas/daemon.schema.1.json +91 -91
- package/kits/schemas/daemon.schema.2.json +101 -101
- package/kits/schemas/daemon.schema.3.json +123 -123
- package/kits/schemas/daemon.schema.4.json +136 -136
- package/kits/schemas/daemon.schema.5.json +135 -135
- package/kits/schemas/daemon.schema.6.json +131 -131
- package/kits/schemas/defaults.schema.1.json +81 -81
- package/kits/schemas/defaults.schema.2.json +85 -85
- package/kits/schemas/defaults.schema.3.json +73 -73
- package/kits/schemas/defaults.schema.4.json +107 -107
- package/kits/schemas/defaults.schema.5.json +119 -119
- package/kits/schemas/menu-exec-schema-commands.md +208 -208
- package/kits/schemas/migrations/README.md +30 -30
- package/kits/schemas/relation-config.schema.1.json +158 -158
- package/kits/schemas/relation-config.schema.2.json +73 -73
- package/kits/schemas/relation-config.schema.3.json +50 -50
- package/kits/schemas/relation-config.schema.4.json +47 -47
- package/kits/schemas/relation-config.schema.5.json +47 -47
- package/kits/schemas/relation-config.schema.6.json +46 -46
- package/kits/schemas/relation-config.schema.7.json +59 -59
- package/kits/schemas/relation-config.schema.8.json +103 -103
- package/kits/schemas/role-config.schema.1.json +215 -201
- package/kits/schemas/role-registry.schema.1.json +35 -35
- package/kits/schemas/single-session.schema.1.json +31 -31
- package/kits/schemas/single-session.schema.2.json +57 -57
- package/kits/schemas/single-session.schema.3.json +32 -32
- package/kits/templates/bootstrap-welcome.md +17 -17
- package/kits/templates/message-fragments/handoff-context-to-target.md +9 -9
- package/kits/templates/message-fragments/handoff-request-to-target.md +19 -19
- package/kits/templates/message-fragments/handoff-response-to-origin.md +9 -9
- package/kits/templates/message-fragments/inject-default.md +2 -2
- package/kits/templates/message-fragments/item.md +2 -2
- package/kits/templates/roles/admin.json +92 -92
- package/kits/templates/roles/member.json +101 -96
- package/kits/templates/roles/owner.json +9 -9
- package/kits/templates/roles/visitor.json +90 -85
- package/kits/templates/system-fragments/baseagent.md +14 -14
- package/kits/templates/system-fragments/bootstrap.md +53 -34
- package/kits/templates/system-fragments/channel.md +28 -64
- package/kits/templates/system-fragments/commands.md +36 -28
- package/kits/templates/system-fragments/group-unread-history.md +7 -0
- package/kits/templates/system-fragments/identity.md +13 -13
- package/kits/templates/system-fragments/relation.md +19 -19
- package/kits/templates/system-fragments/reply.md +56 -0
- package/kits/templates/system-fragments/session.md +59 -59
- package/kits/templates/system-fragments/venue.md +31 -31
- package/package.json +104 -98
- package/dist/aun/group-identity.js +0 -9
- /package/dist/aun/{group-fs-download.js → group/fs-download.js} +0 -0
- /package/dist/aun/{msg/group-index.js → group/index-rpc.js} +0 -0
package/ecagent/LICENSE
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2025 Mario Zechner
|
|
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.
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Mario Zechner
|
|
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/ecagent/NOTICE
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
This distribution contains modified packaging of @earendil-works/pi-agent-core.
|
|
2
|
-
|
|
3
|
-
Upstream project: https://github.com/earendil-works/pi
|
|
4
|
-
Upstream version: 0.80.7
|
|
5
|
-
Upstream commit: 818d67457cdd6b60bce6b121d16b23141c252dd8
|
|
6
|
-
|
|
7
|
-
Modification: TypeScript sources from @earendil-works/pi-agent-core and the
|
|
8
|
-
provider-free protocol subset of @earendil-works/pi-ai are maintained together
|
|
9
|
-
in this package. Provider SDK implementations and dependencies are excluded.
|
|
10
|
-
Callers supply a custom model stream function or use the included pi-messages
|
|
11
|
-
protocol runtime.
|
|
1
|
+
This distribution contains modified packaging of @earendil-works/pi-agent-core.
|
|
2
|
+
|
|
3
|
+
Upstream project: https://github.com/earendil-works/pi
|
|
4
|
+
Upstream version: 0.80.7
|
|
5
|
+
Upstream commit: 818d67457cdd6b60bce6b121d16b23141c252dd8
|
|
6
|
+
|
|
7
|
+
Modification: TypeScript sources from @earendil-works/pi-agent-core and the
|
|
8
|
+
provider-free protocol subset of @earendil-works/pi-ai are maintained together
|
|
9
|
+
in this package. Provider SDK implementations and dependencies are excluded.
|
|
10
|
+
Callers supply a custom model stream function or use the included pi-messages
|
|
11
|
+
protocol runtime.
|
package/ecagent/README.md
CHANGED
|
@@ -1,61 +1,61 @@
|
|
|
1
|
-
# ecagent
|
|
2
|
-
|
|
3
|
-
`ecagent` is an unofficial lightweight distribution of
|
|
4
|
-
[`@earendil-works/pi-agent-core`](https://github.com/earendil-works/pi). It
|
|
5
|
-
includes the Pi agent loop, tools, sessions, compaction, skills, and execution
|
|
6
|
-
environment abstractions together with an embedded provider-free model runtime.
|
|
7
|
-
The published package includes both the TypeScript source in `src/` and the
|
|
8
|
-
compiled ESM output in `dist/`.
|
|
9
|
-
|
|
10
|
-
## Install
|
|
11
|
-
|
|
12
|
-
```bash
|
|
13
|
-
npm install ecagent
|
|
14
|
-
|
|
15
|
-
# Or install it globally for a shared Node.js runtime
|
|
16
|
-
npm install --global ecagent
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
Supply a custom model stream function. No model provider SDK is installed by
|
|
20
|
-
default:
|
|
21
|
-
|
|
22
|
-
```typescript
|
|
23
|
-
import { Agent } from "ecagent";
|
|
24
|
-
|
|
25
|
-
const agent = new Agent({
|
|
26
|
-
initialState: {
|
|
27
|
-
model,
|
|
28
|
-
systemPrompt: "You are a coding agent.",
|
|
29
|
-
},
|
|
30
|
-
streamFn: evolcoreModelStream,
|
|
31
|
-
});
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
The `streamFn` must implement the Pi stream contract exported by
|
|
35
|
-
`ecagent/runtime`:
|
|
36
|
-
|
|
37
|
-
```typescript
|
|
38
|
-
import { AssistantMessageEventStream } from "ecagent/runtime";
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
EvolCore uses this boundary to connect its own credentials, gateway, streaming,
|
|
42
|
-
and abort handling.
|
|
43
|
-
|
|
44
|
-
## Build from source
|
|
45
|
-
|
|
46
|
-
```bash
|
|
47
|
-
npm install
|
|
48
|
-
npm run build
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
The build runs TypeScript directly over the checked-in source. It does not
|
|
52
|
-
download precompiled upstream artifacts.
|
|
53
|
-
|
|
54
|
-
## Upstream
|
|
55
|
-
|
|
56
|
-
- Package: `@earendil-works/pi-agent-core@0.80.7`
|
|
57
|
-
- Runtime: `@earendil-works/pi-ai@0.80.7`
|
|
58
|
-
- Commit: `818d67457cdd6b60bce6b121d16b23141c252dd8`
|
|
59
|
-
- License: MIT
|
|
60
|
-
|
|
61
|
-
This package is not affiliated with or endorsed by the Pi maintainers.
|
|
1
|
+
# ecagent
|
|
2
|
+
|
|
3
|
+
`ecagent` is an unofficial lightweight distribution of
|
|
4
|
+
[`@earendil-works/pi-agent-core`](https://github.com/earendil-works/pi). It
|
|
5
|
+
includes the Pi agent loop, tools, sessions, compaction, skills, and execution
|
|
6
|
+
environment abstractions together with an embedded provider-free model runtime.
|
|
7
|
+
The published package includes both the TypeScript source in `src/` and the
|
|
8
|
+
compiled ESM output in `dist/`.
|
|
9
|
+
|
|
10
|
+
## Install
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
npm install ecagent
|
|
14
|
+
|
|
15
|
+
# Or install it globally for a shared Node.js runtime
|
|
16
|
+
npm install --global ecagent
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Supply a custom model stream function. No model provider SDK is installed by
|
|
20
|
+
default:
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
import { Agent } from "ecagent";
|
|
24
|
+
|
|
25
|
+
const agent = new Agent({
|
|
26
|
+
initialState: {
|
|
27
|
+
model,
|
|
28
|
+
systemPrompt: "You are a coding agent.",
|
|
29
|
+
},
|
|
30
|
+
streamFn: evolcoreModelStream,
|
|
31
|
+
});
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
The `streamFn` must implement the Pi stream contract exported by
|
|
35
|
+
`ecagent/runtime`:
|
|
36
|
+
|
|
37
|
+
```typescript
|
|
38
|
+
import { AssistantMessageEventStream } from "ecagent/runtime";
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
EvolCore uses this boundary to connect its own credentials, gateway, streaming,
|
|
42
|
+
and abort handling.
|
|
43
|
+
|
|
44
|
+
## Build from source
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
npm install
|
|
48
|
+
npm run build
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
The build runs TypeScript directly over the checked-in source. It does not
|
|
52
|
+
download precompiled upstream artifacts.
|
|
53
|
+
|
|
54
|
+
## Upstream
|
|
55
|
+
|
|
56
|
+
- Package: `@earendil-works/pi-agent-core@0.80.7`
|
|
57
|
+
- Runtime: `@earendil-works/pi-ai@0.80.7`
|
|
58
|
+
- Commit: `818d67457cdd6b60bce6b121d16b23141c252dd8`
|
|
59
|
+
- License: MIT
|
|
60
|
+
|
|
61
|
+
This package is not affiliated with or endorsed by the Pi maintainers.
|
|
@@ -412,6 +412,9 @@ export class AgentHarness {
|
|
|
412
412
|
}
|
|
413
413
|
async handleAgentEvent(event, signal) {
|
|
414
414
|
if (event.type === "message_end") {
|
|
415
|
+
// Persist the same multimodal message that was sent to the provider.
|
|
416
|
+
// Provider rollouts (Claude/Codex) retain image bytes in their own
|
|
417
|
+
// session files, so ecagent must do the same for resumable context.
|
|
415
418
|
await this.session.appendMessage(event.message);
|
|
416
419
|
await this.emitAny(event, signal);
|
|
417
420
|
return;
|
|
@@ -90,37 +90,37 @@ export function prepareBranchEntries(entries, tokenBudget = 0) {
|
|
|
90
90
|
}
|
|
91
91
|
return { messages, fileOps, totalTokens };
|
|
92
92
|
}
|
|
93
|
-
const BRANCH_SUMMARY_PREAMBLE = `The user explored a different conversation branch before returning here.
|
|
94
|
-
Summary of that exploration:
|
|
95
|
-
|
|
93
|
+
const BRANCH_SUMMARY_PREAMBLE = `The user explored a different conversation branch before returning here.
|
|
94
|
+
Summary of that exploration:
|
|
95
|
+
|
|
96
96
|
`;
|
|
97
|
-
const BRANCH_SUMMARY_PROMPT = `Create a structured summary of this conversation branch for context when returning later.
|
|
98
|
-
|
|
99
|
-
Use this EXACT format:
|
|
100
|
-
|
|
101
|
-
## Goal
|
|
102
|
-
[What was the user trying to accomplish in this branch?]
|
|
103
|
-
|
|
104
|
-
## Constraints & Preferences
|
|
105
|
-
- [Any constraints, preferences, or requirements mentioned]
|
|
106
|
-
- [Or "(none)" if none were mentioned]
|
|
107
|
-
|
|
108
|
-
## Progress
|
|
109
|
-
### Done
|
|
110
|
-
- [x] [Completed tasks/changes]
|
|
111
|
-
|
|
112
|
-
### In Progress
|
|
113
|
-
- [ ] [Work that was started but not finished]
|
|
114
|
-
|
|
115
|
-
### Blocked
|
|
116
|
-
- [Issues preventing progress, if any]
|
|
117
|
-
|
|
118
|
-
## Key Decisions
|
|
119
|
-
- **[Decision]**: [Brief rationale]
|
|
120
|
-
|
|
121
|
-
## Next Steps
|
|
122
|
-
1. [What should happen next to continue this work]
|
|
123
|
-
|
|
97
|
+
const BRANCH_SUMMARY_PROMPT = `Create a structured summary of this conversation branch for context when returning later.
|
|
98
|
+
|
|
99
|
+
Use this EXACT format:
|
|
100
|
+
|
|
101
|
+
## Goal
|
|
102
|
+
[What was the user trying to accomplish in this branch?]
|
|
103
|
+
|
|
104
|
+
## Constraints & Preferences
|
|
105
|
+
- [Any constraints, preferences, or requirements mentioned]
|
|
106
|
+
- [Or "(none)" if none were mentioned]
|
|
107
|
+
|
|
108
|
+
## Progress
|
|
109
|
+
### Done
|
|
110
|
+
- [x] [Completed tasks/changes]
|
|
111
|
+
|
|
112
|
+
### In Progress
|
|
113
|
+
- [ ] [Work that was started but not finished]
|
|
114
|
+
|
|
115
|
+
### Blocked
|
|
116
|
+
- [Issues preventing progress, if any]
|
|
117
|
+
|
|
118
|
+
## Key Decisions
|
|
119
|
+
- **[Decision]**: [Brief rationale]
|
|
120
|
+
|
|
121
|
+
## Next Steps
|
|
122
|
+
1. [What should happen next to continue this work]
|
|
123
|
+
|
|
124
124
|
Keep each section concise. Preserve exact file paths, function names, and error messages.`;
|
|
125
125
|
/** Generate a summary for abandoned branch entries. */
|
|
126
126
|
export async function generateBranchSummary(entries, options) {
|
|
@@ -281,78 +281,78 @@ export function findCutPoint(entries, startIndex, endIndex, keepRecentTokens) {
|
|
|
281
281
|
isSplitTurn: !isUserMessage && turnStartIndex !== -1,
|
|
282
282
|
};
|
|
283
283
|
}
|
|
284
|
-
export const SUMMARIZATION_SYSTEM_PROMPT = `You are a context summarization assistant. Your task is to read a conversation between a user and an AI assistant, then produce a structured summary following the exact format specified.
|
|
285
|
-
|
|
284
|
+
export const SUMMARIZATION_SYSTEM_PROMPT = `You are a context summarization assistant. Your task is to read a conversation between a user and an AI assistant, then produce a structured summary following the exact format specified.
|
|
285
|
+
|
|
286
286
|
Do NOT continue the conversation. Do NOT respond to any questions in the conversation. ONLY output the structured summary.`;
|
|
287
|
-
const SUMMARIZATION_PROMPT = `The messages above are a conversation to summarize. Create a structured context checkpoint summary that another LLM will use to continue the work.
|
|
288
|
-
|
|
289
|
-
Use this EXACT format:
|
|
290
|
-
|
|
291
|
-
## Goal
|
|
292
|
-
[What is the user trying to accomplish? Can be multiple items if the session covers different tasks.]
|
|
293
|
-
|
|
294
|
-
## Constraints & Preferences
|
|
295
|
-
- [Any constraints, preferences, or requirements mentioned by user]
|
|
296
|
-
- [Or "(none)" if none were mentioned]
|
|
297
|
-
|
|
298
|
-
## Progress
|
|
299
|
-
### Done
|
|
300
|
-
- [x] [Completed tasks/changes]
|
|
301
|
-
|
|
302
|
-
### In Progress
|
|
303
|
-
- [ ] [Current work]
|
|
304
|
-
|
|
305
|
-
### Blocked
|
|
306
|
-
- [Issues preventing progress, if any]
|
|
307
|
-
|
|
308
|
-
## Key Decisions
|
|
309
|
-
- **[Decision]**: [Brief rationale]
|
|
310
|
-
|
|
311
|
-
## Next Steps
|
|
312
|
-
1. [Ordered list of what should happen next]
|
|
313
|
-
|
|
314
|
-
## Critical Context
|
|
315
|
-
- [Any data, examples, or references needed to continue]
|
|
316
|
-
- [Or "(none)" if not applicable]
|
|
317
|
-
|
|
287
|
+
const SUMMARIZATION_PROMPT = `The messages above are a conversation to summarize. Create a structured context checkpoint summary that another LLM will use to continue the work.
|
|
288
|
+
|
|
289
|
+
Use this EXACT format:
|
|
290
|
+
|
|
291
|
+
## Goal
|
|
292
|
+
[What is the user trying to accomplish? Can be multiple items if the session covers different tasks.]
|
|
293
|
+
|
|
294
|
+
## Constraints & Preferences
|
|
295
|
+
- [Any constraints, preferences, or requirements mentioned by user]
|
|
296
|
+
- [Or "(none)" if none were mentioned]
|
|
297
|
+
|
|
298
|
+
## Progress
|
|
299
|
+
### Done
|
|
300
|
+
- [x] [Completed tasks/changes]
|
|
301
|
+
|
|
302
|
+
### In Progress
|
|
303
|
+
- [ ] [Current work]
|
|
304
|
+
|
|
305
|
+
### Blocked
|
|
306
|
+
- [Issues preventing progress, if any]
|
|
307
|
+
|
|
308
|
+
## Key Decisions
|
|
309
|
+
- **[Decision]**: [Brief rationale]
|
|
310
|
+
|
|
311
|
+
## Next Steps
|
|
312
|
+
1. [Ordered list of what should happen next]
|
|
313
|
+
|
|
314
|
+
## Critical Context
|
|
315
|
+
- [Any data, examples, or references needed to continue]
|
|
316
|
+
- [Or "(none)" if not applicable]
|
|
317
|
+
|
|
318
318
|
Keep each section concise. Preserve exact file paths, function names, and error messages.`;
|
|
319
|
-
const UPDATE_SUMMARIZATION_PROMPT = `The messages above are NEW conversation messages to incorporate into the existing summary provided in <previous-summary> tags.
|
|
320
|
-
|
|
321
|
-
Update the existing structured summary with new information. RULES:
|
|
322
|
-
- PRESERVE all existing information from the previous summary
|
|
323
|
-
- ADD new progress, decisions, and context from the new messages
|
|
324
|
-
- UPDATE the Progress section: move items from "In Progress" to "Done" when completed
|
|
325
|
-
- UPDATE "Next Steps" based on what was accomplished
|
|
326
|
-
- PRESERVE exact file paths, function names, and error messages
|
|
327
|
-
- If something is no longer relevant, you may remove it
|
|
328
|
-
|
|
329
|
-
Use this EXACT format:
|
|
330
|
-
|
|
331
|
-
## Goal
|
|
332
|
-
[Preserve existing goals, add new ones if the task expanded]
|
|
333
|
-
|
|
334
|
-
## Constraints & Preferences
|
|
335
|
-
- [Preserve existing, add new ones discovered]
|
|
336
|
-
|
|
337
|
-
## Progress
|
|
338
|
-
### Done
|
|
339
|
-
- [x] [Include previously done items AND newly completed items]
|
|
340
|
-
|
|
341
|
-
### In Progress
|
|
342
|
-
- [ ] [Current work - update based on progress]
|
|
343
|
-
|
|
344
|
-
### Blocked
|
|
345
|
-
- [Current blockers - remove if resolved]
|
|
346
|
-
|
|
347
|
-
## Key Decisions
|
|
348
|
-
- **[Decision]**: [Brief rationale] (preserve all previous, add new)
|
|
349
|
-
|
|
350
|
-
## Next Steps
|
|
351
|
-
1. [Update based on current state]
|
|
352
|
-
|
|
353
|
-
## Critical Context
|
|
354
|
-
- [Preserve important context, add new if needed]
|
|
355
|
-
|
|
319
|
+
const UPDATE_SUMMARIZATION_PROMPT = `The messages above are NEW conversation messages to incorporate into the existing summary provided in <previous-summary> tags.
|
|
320
|
+
|
|
321
|
+
Update the existing structured summary with new information. RULES:
|
|
322
|
+
- PRESERVE all existing information from the previous summary
|
|
323
|
+
- ADD new progress, decisions, and context from the new messages
|
|
324
|
+
- UPDATE the Progress section: move items from "In Progress" to "Done" when completed
|
|
325
|
+
- UPDATE "Next Steps" based on what was accomplished
|
|
326
|
+
- PRESERVE exact file paths, function names, and error messages
|
|
327
|
+
- If something is no longer relevant, you may remove it
|
|
328
|
+
|
|
329
|
+
Use this EXACT format:
|
|
330
|
+
|
|
331
|
+
## Goal
|
|
332
|
+
[Preserve existing goals, add new ones if the task expanded]
|
|
333
|
+
|
|
334
|
+
## Constraints & Preferences
|
|
335
|
+
- [Preserve existing, add new ones discovered]
|
|
336
|
+
|
|
337
|
+
## Progress
|
|
338
|
+
### Done
|
|
339
|
+
- [x] [Include previously done items AND newly completed items]
|
|
340
|
+
|
|
341
|
+
### In Progress
|
|
342
|
+
- [ ] [Current work - update based on progress]
|
|
343
|
+
|
|
344
|
+
### Blocked
|
|
345
|
+
- [Current blockers - remove if resolved]
|
|
346
|
+
|
|
347
|
+
## Key Decisions
|
|
348
|
+
- **[Decision]**: [Brief rationale] (preserve all previous, add new)
|
|
349
|
+
|
|
350
|
+
## Next Steps
|
|
351
|
+
1. [Update based on current state]
|
|
352
|
+
|
|
353
|
+
## Critical Context
|
|
354
|
+
- [Preserve important context, add new if needed]
|
|
355
|
+
|
|
356
356
|
Keep each section concise. Preserve exact file paths, function names, and error messages.`;
|
|
357
357
|
/** Generate or update a conversation summary for compaction. */
|
|
358
358
|
export async function generateSummary(currentMessages, models, model, reserveTokens, signal, customInstructions, previousSummary, thinkingLevel) {
|
|
@@ -451,19 +451,19 @@ export function prepareCompaction(pathEntries, settings) {
|
|
|
451
451
|
settings,
|
|
452
452
|
});
|
|
453
453
|
}
|
|
454
|
-
const TURN_PREFIX_SUMMARIZATION_PROMPT = `This is the PREFIX of a turn that was too large to keep. The SUFFIX (recent work) is retained.
|
|
455
|
-
|
|
456
|
-
Summarize the prefix to provide context for the retained suffix:
|
|
457
|
-
|
|
458
|
-
## Original Request
|
|
459
|
-
[What did the user ask for in this turn?]
|
|
460
|
-
|
|
461
|
-
## Early Progress
|
|
462
|
-
- [Key decisions and work done in the prefix]
|
|
463
|
-
|
|
464
|
-
## Context for Suffix
|
|
465
|
-
- [Information needed to understand the retained recent work]
|
|
466
|
-
|
|
454
|
+
const TURN_PREFIX_SUMMARIZATION_PROMPT = `This is the PREFIX of a turn that was too large to keep. The SUFFIX (recent work) is retained.
|
|
455
|
+
|
|
456
|
+
Summarize the prefix to provide context for the retained suffix:
|
|
457
|
+
|
|
458
|
+
## Original Request
|
|
459
|
+
[What did the user ask for in this turn?]
|
|
460
|
+
|
|
461
|
+
## Early Progress
|
|
462
|
+
- [Key decisions and work done in the prefix]
|
|
463
|
+
|
|
464
|
+
## Context for Suffix
|
|
465
|
+
- [Information needed to understand the retained recent work]
|
|
466
|
+
|
|
467
467
|
Be concise. Focus on what's needed to understand the kept suffix.`;
|
|
468
468
|
export { serializeConversation } from "./utils.js";
|
|
469
469
|
/** Generate compaction summary data from prepared session history. */
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
export const COMPACTION_SUMMARY_PREFIX = `The conversation history before this point was compacted into the following summary:
|
|
2
|
-
|
|
3
|
-
<summary>
|
|
1
|
+
export const COMPACTION_SUMMARY_PREFIX = `The conversation history before this point was compacted into the following summary:
|
|
2
|
+
|
|
3
|
+
<summary>
|
|
4
4
|
`;
|
|
5
|
-
export const COMPACTION_SUMMARY_SUFFIX = `
|
|
5
|
+
export const COMPACTION_SUMMARY_SUFFIX = `
|
|
6
6
|
</summary>`;
|
|
7
|
-
export const BRANCH_SUMMARY_PREFIX = `The following is a summary of a branch that this conversation came back from:
|
|
8
|
-
|
|
9
|
-
<summary>
|
|
7
|
+
export const BRANCH_SUMMARY_PREFIX = `The following is a summary of a branch that this conversation came back from:
|
|
8
|
+
|
|
9
|
+
<summary>
|
|
10
10
|
`;
|
|
11
11
|
export const BRANCH_SUMMARY_SUFFIX = `</summary>`;
|
|
12
12
|
export function bashExecutionToText(msg) {
|
|
@@ -1,6 +1,25 @@
|
|
|
1
1
|
import { SessionError, toError } from "../types.js";
|
|
2
2
|
import { getFileSystemResultOrThrow } from "./repo-utils.js";
|
|
3
3
|
import { uuidv7 } from "./uuid.js";
|
|
4
|
+
// Multiple harness instances can briefly reference the same session during a
|
|
5
|
+
// replacement turn. Node's appendFile does not guarantee that large writes
|
|
6
|
+
// from separate calls stay contiguous, so serialize appends per physical file.
|
|
7
|
+
const appendQueues = new Map();
|
|
8
|
+
async function appendSerialized(fs, filePath, content) {
|
|
9
|
+
const previous = appendQueues.get(filePath) ?? Promise.resolve();
|
|
10
|
+
let release;
|
|
11
|
+
const current = new Promise((resolve) => { release = resolve; });
|
|
12
|
+
appendQueues.set(filePath, current);
|
|
13
|
+
try {
|
|
14
|
+
await previous.catch(() => undefined);
|
|
15
|
+
getFileSystemResultOrThrow(await fs.appendFile(filePath, content), `Failed to append session entry ${filePath}`);
|
|
16
|
+
}
|
|
17
|
+
finally {
|
|
18
|
+
release();
|
|
19
|
+
if (appendQueues.get(filePath) === current)
|
|
20
|
+
appendQueues.delete(filePath);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
4
23
|
function updateLabelCache(labelsById, entry) {
|
|
5
24
|
if (entry.type !== "label")
|
|
6
25
|
return;
|
|
@@ -185,7 +204,7 @@ export class JsonlSessionStorage {
|
|
|
185
204
|
timestamp: new Date().toISOString(),
|
|
186
205
|
targetId: leafId,
|
|
187
206
|
};
|
|
188
|
-
|
|
207
|
+
await appendSerialized(this.fs, this.filePath, `${JSON.stringify(entry)}\n`);
|
|
189
208
|
this.entries.push(entry);
|
|
190
209
|
this.byId.set(entry.id, entry);
|
|
191
210
|
this.currentLeafId = leafId;
|
|
@@ -194,7 +213,7 @@ export class JsonlSessionStorage {
|
|
|
194
213
|
return generateEntryId(this.byId);
|
|
195
214
|
}
|
|
196
215
|
async appendEntry(entry) {
|
|
197
|
-
|
|
216
|
+
await appendSerialized(this.fs, this.filePath, `${JSON.stringify(entry)}\n`);
|
|
198
217
|
this.entries.push(entry);
|
|
199
218
|
this.byId.set(entry.id, entry);
|
|
200
219
|
updateLabelCache(this.labelsById, entry);
|
package/kits/docs/GUIDE.md
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
# 文档查阅指南
|
|
2
|
-
|
|
3
|
-
## 查阅流程
|
|
4
|
-
|
|
5
|
-
1. 先看 `$KITS_RULES`(自动加载的 6 个规则文件 01-06)了解机制骨架
|
|
6
|
-
2. 需要详细信息时,按 `INDEX.md` 找到对应文档路径
|
|
7
|
-
3. Read 对应文档
|
|
8
|
-
|
|
9
|
-
## 路径解析
|
|
10
|
-
|
|
11
|
-
文档中用 `$名称` 引用路径。解析步骤:
|
|
12
|
-
1. 查 `$KITS_RULES/02-navigation.md` 的路径体系速查表
|
|
13
|
-
2. 如需完整定义,Read `$KITS_DOCS/path-registry.md`
|
|
14
|
-
3. 如需运行时实际值,Read `$ECK/path-registry.md`
|
|
15
|
-
|
|
16
|
-
## 不要做的事
|
|
17
|
-
|
|
18
|
-
- 不要一次性加载所有文档——按需逐个 Read
|
|
19
|
-
- 不要猜测路径——查注册表
|
|
20
|
-
- 不要在当前会话输出对外消息——用 CLI
|
|
1
|
+
# 文档查阅指南
|
|
2
|
+
|
|
3
|
+
## 查阅流程
|
|
4
|
+
|
|
5
|
+
1. 先看 `$KITS_RULES`(自动加载的 6 个规则文件 01-06)了解机制骨架
|
|
6
|
+
2. 需要详细信息时,按 `INDEX.md` 找到对应文档路径
|
|
7
|
+
3. Read 对应文档
|
|
8
|
+
|
|
9
|
+
## 路径解析
|
|
10
|
+
|
|
11
|
+
文档中用 `$名称` 引用路径。解析步骤:
|
|
12
|
+
1. 查 `$KITS_RULES/02-navigation.md` 的路径体系速查表
|
|
13
|
+
2. 如需完整定义,Read `$KITS_DOCS/path-registry.md`
|
|
14
|
+
3. 如需运行时实际值,Read `$ECK/path-registry.md`
|
|
15
|
+
|
|
16
|
+
## 不要做的事
|
|
17
|
+
|
|
18
|
+
- 不要一次性加载所有文档——按需逐个 Read
|
|
19
|
+
- 不要猜测路径——查注册表
|
|
20
|
+
- 不要在当前会话输出对外消息——用 CLI
|