opensquid 0.5.441 → 0.5.447
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/functions/arm_scope.d.ts +27 -0
- package/dist/functions/arm_scope.d.ts.map +1 -0
- package/dist/functions/arm_scope.js +52 -0
- package/dist/functions/arm_scope.js.map +1 -0
- package/dist/functions/index.d.ts +1 -0
- package/dist/functions/index.d.ts.map +1 -1
- package/dist/functions/index.js +1 -0
- package/dist/functions/index.js.map +1 -1
- package/dist/runtime/bootstrap.d.ts.map +1 -1
- package/dist/runtime/bootstrap.js +2 -0
- package/dist/runtime/bootstrap.js.map +1 -1
- package/dist/runtime/handoff/render.d.ts +5 -4
- package/dist/runtime/handoff/render.d.ts.map +1 -1
- package/dist/runtime/handoff/render.js +7 -7
- package/dist/runtime/handoff/render.js.map +1 -1
- package/dist/runtime/hooks/active_task_mirror.js +0 -0
- package/dist/runtime/hooks/apply_patch.js +0 -0
- package/dist/runtime/hooks/dispatch.js +0 -0
- package/dist/runtime/hooks/hook_output.js +0 -0
- package/dist/runtime/hooks/memory_reconcile.js +0 -0
- package/dist/runtime/hooks/new_project_detect.js +0 -0
- package/dist/runtime/hooks/profession_resolver.js +0 -0
- package/dist/runtime/hooks/scope_intent.js +0 -0
- package/dist/runtime/hooks/session_id.js +0 -0
- package/dist/runtime/hooks/session_liveness.js +0 -0
- package/dist/runtime/hooks/stop_drive.js +0 -0
- package/dist/runtime/hooks/stop_stream.js +0 -0
- package/dist/runtime/hooks/subagent_guard.js +0 -0
- package/dist/runtime/hooks/transcript.js +0 -0
- package/dist/runtime/hooks/transcript_tasks.js +0 -0
- package/dist/runtime/ralph/orchestrator.d.ts.map +1 -1
- package/dist/runtime/ralph/orchestrator.js +2 -1
- package/dist/runtime/ralph/orchestrator.js.map +1 -1
- package/dist/setup/cli/limits_state.d.ts.map +1 -1
- package/dist/setup/cli/limits_state.js +6 -40
- package/dist/setup/cli/limits_state.js.map +1 -1
- package/dist/setup/cli/pack_walk.d.ts +32 -0
- package/dist/setup/cli/pack_walk.d.ts.map +1 -0
- package/dist/setup/cli/pack_walk.js +76 -0
- package/dist/setup/cli/pack_walk.js.map +1 -0
- package/dist/setup/cli/permissions_state.d.ts.map +1 -1
- package/dist/setup/cli/permissions_state.js +6 -37
- package/dist/setup/cli/permissions_state.js.map +1 -1
- package/dist/setup/cli/triggers_state.d.ts.map +1 -1
- package/dist/setup/cli/triggers_state.js +3 -29
- package/dist/setup/cli/triggers_state.js.map +1 -1
- package/dist/workgraph/events.d.ts.map +1 -1
- package/dist/workgraph/events.js +10 -0
- package/dist/workgraph/events.js.map +1 -1
- package/dist/workgraph/store.d.ts.map +1 -1
- package/dist/workgraph/store.js +5 -0
- package/dist/workgraph/store.js.map +1 -1
- package/dist/workgraph/types.d.ts +2 -1
- package/dist/workgraph/types.d.ts.map +1 -1
- package/docs/ARCHITECTURE.md +268 -0
- package/package.json +5 -3
- package/packs/builtin/coding-flow/skills/entry-and-handoffs/skill.yaml +13 -17
- package/dist/anti-drift/evaluator.d.ts +0 -88
- package/dist/anti-drift/evaluator.d.ts.map +0 -1
- package/dist/anti-drift/evaluator.js +0 -417
- package/dist/anti-drift/evaluator.js.map +0 -1
- package/dist/anti-drift/evaluator.test.js +0 -78
- package/dist/anti-drift/rules.d.ts +0 -80
- package/dist/anti-drift/rules.d.ts.map +0 -1
- package/dist/anti-drift/rules.js +0 -368
- package/dist/anti-drift/rules.js.map +0 -1
- package/dist/anti-drift/rules.test.js +0 -213
- package/dist/anti-drift/state.d.ts +0 -107
- package/dist/anti-drift/state.d.ts.map +0 -1
- package/dist/anti-drift/state.js +0 -177
- package/dist/anti-drift/state.js.map +0 -1
- package/dist/anti-drift/state.test.js +0 -120
- package/dist/chat/adapters/discord.d.ts +0 -41
- package/dist/chat/adapters/discord.d.ts.map +0 -1
- package/dist/chat/adapters/discord.js +0 -176
- package/dist/chat/adapters/discord.js.map +0 -1
- package/dist/chat/adapters/discord.test.js +0 -25
- package/dist/chat/adapters/slack.d.ts +0 -43
- package/dist/chat/adapters/slack.d.ts.map +0 -1
- package/dist/chat/adapters/slack.js +0 -172
- package/dist/chat/adapters/slack.js.map +0 -1
- package/dist/chat/adapters/slack.test.js +0 -30
- package/dist/chat/adapters/telegram.d.ts +0 -148
- package/dist/chat/adapters/telegram.d.ts.map +0 -1
- package/dist/chat/adapters/telegram.js +0 -498
- package/dist/chat/adapters/telegram.js.map +0 -1
- package/dist/chat/adapters/telegram.test.js +0 -94
- package/dist/chat/config.d.ts +0 -98
- package/dist/chat/config.d.ts.map +0 -1
- package/dist/chat/config.js +0 -185
- package/dist/chat/config.js.map +0 -1
- package/dist/chat/daemon/active-project.d.ts +0 -17
- package/dist/chat/daemon/active-project.d.ts.map +0 -1
- package/dist/chat/daemon/active-project.js +0 -23
- package/dist/chat/daemon/active-project.js.map +0 -1
- package/dist/chat/daemon/autospawn.d.ts +0 -40
- package/dist/chat/daemon/autospawn.d.ts.map +0 -1
- package/dist/chat/daemon/autospawn.js +0 -129
- package/dist/chat/daemon/autospawn.js.map +0 -1
- package/dist/chat/daemon/autospawn.test.js +0 -112
- package/dist/chat/daemon/cli.d.ts +0 -18
- package/dist/chat/daemon/cli.d.ts.map +0 -1
- package/dist/chat/daemon/cli.js +0 -71
- package/dist/chat/daemon/cli.js.map +0 -1
- package/dist/chat/daemon/collisions.js +0 -384
- package/dist/chat/daemon/health-check.d.ts +0 -69
- package/dist/chat/daemon/health-check.d.ts.map +0 -1
- package/dist/chat/daemon/health-check.js +0 -112
- package/dist/chat/daemon/health-check.js.map +0 -1
- package/dist/chat/daemon/inbox-read.d.ts +0 -35
- package/dist/chat/daemon/inbox-read.d.ts.map +0 -1
- package/dist/chat/daemon/inbox-read.js +0 -75
- package/dist/chat/daemon/inbox-read.js.map +0 -1
- package/dist/chat/daemon/inbox-read.test.js +0 -97
- package/dist/chat/daemon/inbox.d.ts +0 -63
- package/dist/chat/daemon/inbox.d.ts.map +0 -1
- package/dist/chat/daemon/inbox.js +0 -56
- package/dist/chat/daemon/inbox.js.map +0 -1
- package/dist/chat/daemon/inbox.test.js +0 -110
- package/dist/chat/daemon/lifecycle.d.ts +0 -71
- package/dist/chat/daemon/lifecycle.d.ts.map +0 -1
- package/dist/chat/daemon/lifecycle.js +0 -221
- package/dist/chat/daemon/lifecycle.js.map +0 -1
- package/dist/chat/daemon/lifecycle.test.js +0 -163
- package/dist/chat/daemon/protocol.d.ts +0 -107
- package/dist/chat/daemon/protocol.d.ts.map +0 -1
- package/dist/chat/daemon/protocol.js +0 -54
- package/dist/chat/daemon/protocol.js.map +0 -1
- package/dist/chat/daemon/routing.d.ts +0 -140
- package/dist/chat/daemon/routing.d.ts.map +0 -1
- package/dist/chat/daemon/routing.js +0 -198
- package/dist/chat/daemon/routing.js.map +0 -1
- package/dist/chat/daemon/routing.test.js +0 -259
- package/dist/chat/daemon/rpc-client.d.ts +0 -45
- package/dist/chat/daemon/rpc-client.d.ts.map +0 -1
- package/dist/chat/daemon/rpc-client.js +0 -133
- package/dist/chat/daemon/rpc-client.js.map +0 -1
- package/dist/chat/daemon/rpc-server.d.ts +0 -39
- package/dist/chat/daemon/rpc-server.d.ts.map +0 -1
- package/dist/chat/daemon/rpc-server.js +0 -385
- package/dist/chat/daemon/rpc-server.js.map +0 -1
- package/dist/chat/daemon/rpc.test.js +0 -177
- package/dist/chat/daemon/subscribers.js +0 -257
- package/dist/chat/daemon/worker.d.ts +0 -27
- package/dist/chat/daemon/worker.d.ts.map +0 -1
- package/dist/chat/daemon/worker.js +0 -313
- package/dist/chat/daemon/worker.js.map +0 -1
- package/dist/chat/daemon/workspace-topic.js +0 -324
- package/dist/chat/env-token.d.ts +0 -60
- package/dist/chat/env-token.d.ts.map +0 -1
- package/dist/chat/env-token.js +0 -137
- package/dist/chat/env-token.js.map +0 -1
- package/dist/chat/env-token.test.js +0 -160
- package/dist/chat/factory.d.ts +0 -30
- package/dist/chat/factory.d.ts.map +0 -1
- package/dist/chat/factory.js +0 -50
- package/dist/chat/factory.js.map +0 -1
- package/dist/chat/factory.test.js +0 -55
- package/dist/chat/gateway.d.ts +0 -176
- package/dist/chat/gateway.d.ts.map +0 -1
- package/dist/chat/gateway.js +0 -146
- package/dist/chat/gateway.js.map +0 -1
- package/dist/chat/gateway.test.js +0 -192
- package/dist/claude-md.d.ts +0 -39
- package/dist/claude-md.d.ts.map +0 -1
- package/dist/claude-md.js +0 -113
- package/dist/claude-md.js.map +0 -1
- package/dist/claude-md.test.js +0 -91
- package/dist/codex/activate.d.ts +0 -66
- package/dist/codex/activate.d.ts.map +0 -1
- package/dist/codex/activate.js +0 -329
- package/dist/codex/activate.js.map +0 -1
- package/dist/codex/activate.test.js +0 -229
- package/dist/codex/bundled-default/bundled-default.test.js +0 -161
- package/dist/codex/cli-publish.test.js +0 -133
- package/dist/codex/cli.d.ts +0 -35
- package/dist/codex/cli.d.ts.map +0 -1
- package/dist/codex/cli.js +0 -554
- package/dist/codex/cli.js.map +0 -1
- package/dist/codex/cli.test.js +0 -277
- package/dist/codex/import-skill-md.d.ts +0 -53
- package/dist/codex/import-skill-md.d.ts.map +0 -1
- package/dist/codex/import-skill-md.js +0 -236
- package/dist/codex/import-skill-md.js.map +0 -1
- package/dist/codex/import-skill-md.test.js +0 -225
- package/dist/codex/loader.d.ts +0 -27
- package/dist/codex/loader.d.ts.map +0 -1
- package/dist/codex/loader.js +0 -86
- package/dist/codex/loader.js.map +0 -1
- package/dist/codex/loader.test.js +0 -75
- package/dist/codex/parse.d.ts +0 -28
- package/dist/codex/parse.d.ts.map +0 -1
- package/dist/codex/parse.js +0 -309
- package/dist/codex/parse.js.map +0 -1
- package/dist/codex/parse.test.js +0 -241
- package/dist/codex/store.d.ts +0 -87
- package/dist/codex/store.d.ts.map +0 -1
- package/dist/codex/store.js +0 -205
- package/dist/codex/store.js.map +0 -1
- package/dist/codex/store.test.js +0 -242
- package/dist/codex/types.d.ts +0 -398
- package/dist/codex/types.d.ts.map +0 -1
- package/dist/codex/types.js +0 -21
- package/dist/codex/types.js.map +0 -1
- package/dist/config.d.ts +0 -53
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -202
- package/dist/config.js.map +0 -1
- package/dist/config.test.js +0 -117
- package/dist/engine/cli.d.ts +0 -14
- package/dist/engine/cli.d.ts.map +0 -1
- package/dist/engine/cli.js +0 -171
- package/dist/engine/cli.js.map +0 -1
- package/dist/engine/client.d.ts +0 -219
- package/dist/engine/client.d.ts.map +0 -1
- package/dist/engine/client.js +0 -312
- package/dist/engine/client.js.map +0 -1
- package/dist/engine/config.d.ts +0 -62
- package/dist/engine/config.d.ts.map +0 -1
- package/dist/engine/config.js +0 -223
- package/dist/engine/config.js.map +0 -1
- package/dist/engine/index.d.ts +0 -17
- package/dist/engine/index.d.ts.map +0 -1
- package/dist/engine/index.js +0 -16
- package/dist/engine/index.js.map +0 -1
- package/dist/engine/resolver.d.ts +0 -62
- package/dist/engine/resolver.d.ts.map +0 -1
- package/dist/engine/resolver.js +0 -103
- package/dist/engine/resolver.js.map +0 -1
- package/dist/engine/singleton.d.ts +0 -95
- package/dist/engine/singleton.d.ts.map +0 -1
- package/dist/engine/singleton.js +0 -325
- package/dist/engine/singleton.js.map +0 -1
- package/dist/engine/types.d.ts +0 -402
- package/dist/engine/types.d.ts.map +0 -1
- package/dist/engine/types.js +0 -22
- package/dist/engine/types.js.map +0 -1
- package/dist/engine-binary-resolver.js +0 -110
- package/dist/engine-binary-resolver.test.js +0 -61
- package/dist/engine-cli.js +0 -60
- package/dist/engine-client.js +0 -301
- package/dist/engine-client.test.js +0 -118
- package/dist/functions/chain_state.d.ts +0 -51
- package/dist/functions/chain_state.d.ts.map +0 -1
- package/dist/functions/chain_state.js +0 -59
- package/dist/functions/chain_state.js.map +0 -1
- package/dist/hooks/drift-catalog.d.ts +0 -68
- package/dist/hooks/drift-catalog.d.ts.map +0 -1
- package/dist/hooks/drift-catalog.js +0 -184
- package/dist/hooks/drift-catalog.js.map +0 -1
- package/dist/hooks/drift-catalog.test.js +0 -154
- package/dist/hooks/drift-patterns.d.ts +0 -110
- package/dist/hooks/drift-patterns.d.ts.map +0 -1
- package/dist/hooks/drift-patterns.js +0 -289
- package/dist/hooks/drift-patterns.js.map +0 -1
- package/dist/hooks/drift-patterns.test.js +0 -325
- package/dist/hooks/engine-vocab-gate.d.ts +0 -108
- package/dist/hooks/engine-vocab-gate.d.ts.map +0 -1
- package/dist/hooks/engine-vocab-gate.js +0 -225
- package/dist/hooks/engine-vocab-gate.js.map +0 -1
- package/dist/hooks/engine-vocab-gate.test.js +0 -170
- package/dist/hooks/heartbeat.d.ts +0 -107
- package/dist/hooks/heartbeat.d.ts.map +0 -1
- package/dist/hooks/heartbeat.js +0 -316
- package/dist/hooks/heartbeat.js.map +0 -1
- package/dist/hooks/heartbeat.test.js +0 -393
- package/dist/hooks/honesty-ledger-session-scope.test.js +0 -100
- package/dist/hooks/honesty-ledger.d.ts +0 -123
- package/dist/hooks/honesty-ledger.d.ts.map +0 -1
- package/dist/hooks/honesty-ledger.js +0 -226
- package/dist/hooks/honesty-ledger.js.map +0 -1
- package/dist/hooks/honesty-ledger.test.js +0 -466
- package/dist/hooks/inline-report-check.d.ts +0 -63
- package/dist/hooks/inline-report-check.d.ts.map +0 -1
- package/dist/hooks/inline-report-check.js +0 -88
- package/dist/hooks/inline-report-check.js.map +0 -1
- package/dist/hooks/inline-report-check.test.js +0 -96
- package/dist/hooks/pre-tool-use.d.ts +0 -62
- package/dist/hooks/pre-tool-use.d.ts.map +0 -1
- package/dist/hooks/pre-tool-use.js +0 -342
- package/dist/hooks/pre-tool-use.js.map +0 -1
- package/dist/hooks/pre-tool-use.test.js +0 -134
- package/dist/hooks/session-end.d.ts +0 -15
- package/dist/hooks/session-end.d.ts.map +0 -1
- package/dist/hooks/session-end.js +0 -60
- package/dist/hooks/session-end.js.map +0 -1
- package/dist/hooks/session-end.test.js +0 -52
- package/dist/hooks/stop.d.ts +0 -35
- package/dist/hooks/stop.d.ts.map +0 -1
- package/dist/hooks/stop.js +0 -136
- package/dist/hooks/stop.js.map +0 -1
- package/dist/hooks/transcript-active-task.test.js +0 -342
- package/dist/hooks/transcript.d.ts +0 -26
- package/dist/hooks/transcript.d.ts.map +0 -1
- package/dist/hooks/transcript.js +0 -266
- package/dist/hooks/transcript.js.map +0 -1
- package/dist/hooks/transcript.test.js +0 -103
- package/dist/hooks/user-prompt-submit.d.ts +0 -74
- package/dist/hooks/user-prompt-submit.d.ts.map +0 -1
- package/dist/hooks/user-prompt-submit.js +0 -256
- package/dist/hooks/user-prompt-submit.js.map +0 -1
- package/dist/hooks/user-prompt-submit.test.js +0 -118
- package/dist/hooks/versioning-gate.d.ts +0 -101
- package/dist/hooks/versioning-gate.d.ts.map +0 -1
- package/dist/hooks/versioning-gate.js +0 -245
- package/dist/hooks/versioning-gate.js.map +0 -1
- package/dist/hooks/versioning-gate.test.js +0 -368
- package/dist/hooks/workflow-gate.d.ts +0 -64
- package/dist/hooks/workflow-gate.d.ts.map +0 -1
- package/dist/hooks/workflow-gate.js +0 -152
- package/dist/hooks/workflow-gate.js.map +0 -1
- package/dist/hooks/workflow-gate.test.js +0 -197
- package/dist/hooks-cli.d.ts +0 -25
- package/dist/hooks-cli.d.ts.map +0 -1
- package/dist/hooks-cli.js +0 -286
- package/dist/hooks-cli.js.map +0 -1
- package/dist/hooks-cli.test.js +0 -148
- package/dist/origin.d.ts +0 -16
- package/dist/origin.d.ts.map +0 -1
- package/dist/origin.js +0 -92
- package/dist/origin.js.map +0 -1
- package/dist/packs/seed_lessons_ingest.d.ts +0 -30
- package/dist/packs/seed_lessons_ingest.d.ts.map +0 -1
- package/dist/packs/seed_lessons_ingest.js +0 -107
- package/dist/packs/seed_lessons_ingest.js.map +0 -1
- package/dist/project-cli.d.ts +0 -7
- package/dist/project-cli.d.ts.map +0 -1
- package/dist/project-cli.js +0 -145
- package/dist/project-cli.js.map +0 -1
- package/dist/project.d.ts +0 -127
- package/dist/project.d.ts.map +0 -1
- package/dist/project.js +0 -281
- package/dist/project.js.map +0 -1
- package/dist/project.test.js +0 -287
- package/dist/rag/backends/loop_engine.d.ts +0 -61
- package/dist/rag/backends/loop_engine.d.ts.map +0 -1
- package/dist/rag/backends/loop_engine.js +0 -160
- package/dist/rag/backends/loop_engine.js.map +0 -1
- package/dist/recall.d.ts +0 -82
- package/dist/recall.d.ts.map +0 -1
- package/dist/recall.js +0 -81
- package/dist/recall.js.map +0 -1
- package/dist/runtime/agent_bridge/autospawn.d.ts +0 -131
- package/dist/runtime/agent_bridge/autospawn.d.ts.map +0 -1
- package/dist/runtime/agent_bridge/autospawn.js +0 -251
- package/dist/runtime/agent_bridge/autospawn.js.map +0 -1
- package/dist/runtime/chain_state.d.ts +0 -124
- package/dist/runtime/chain_state.d.ts.map +0 -1
- package/dist/runtime/chain_state.js +0 -189
- package/dist/runtime/chain_state.js.map +0 -1
- package/dist/runtime/hooks/permission_decision.d.ts +0 -34
- package/dist/runtime/hooks/permission_decision.d.ts.map +0 -1
- package/dist/runtime/hooks/permission_decision.js +0 -39
- package/dist/runtime/hooks/permission_decision.js.map +0 -1
- package/dist/runtime/workflow_fsm.d.ts +0 -21
- package/dist/runtime/workflow_fsm.d.ts.map +0 -1
- package/dist/runtime/workflow_fsm.js +0 -25
- package/dist/runtime/workflow_fsm.js.map +0 -1
- package/dist/runtime/workflow_map.d.ts +0 -26
- package/dist/runtime/workflow_map.d.ts.map +0 -1
- package/dist/runtime/workflow_map.js +0 -38
- package/dist/runtime/workflow_map.js.map +0 -1
- package/dist/scope.d.ts +0 -48
- package/dist/scope.d.ts.map +0 -1
- package/dist/scope.js +0 -111
- package/dist/scope.js.map +0 -1
- package/dist/setup/cli/topic_create_step.d.ts +0 -84
- package/dist/setup/cli/topic_create_step.d.ts.map +0 -1
- package/dist/setup/cli/topic_create_step.js +0 -213
- package/dist/setup/cli/topic_create_step.js.map +0 -1
- package/dist/system-export.d.ts +0 -65
- package/dist/system-export.d.ts.map +0 -1
- package/dist/system-export.js +0 -194
- package/dist/system-export.js.map +0 -1
- package/dist/utterance/classifier.d.ts +0 -53
- package/dist/utterance/classifier.d.ts.map +0 -1
- package/dist/utterance/classifier.js +0 -184
- package/dist/utterance/classifier.js.map +0 -1
- package/dist/utterance/classifier.test.js +0 -147
package/dist/engine/client.d.ts
DELETED
|
@@ -1,219 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* JSON-RPC 2.0 client for the loop-engine daemon.
|
|
3
|
-
*
|
|
4
|
-
* Connects to a long-running engine process at
|
|
5
|
-
* `~/.opensquid/loop-engine.sock` via Unix domain socket. The daemon
|
|
6
|
-
* is acquired-or-spawned by `acquireOrSpawnEngine()` (singleton.ts),
|
|
7
|
-
* so multiple `EngineClient` instances across hooks + sessions share
|
|
8
|
-
* the same underlying engine process — the keystone for cross-session
|
|
9
|
-
* memory recall.
|
|
10
|
-
*
|
|
11
|
-
* Critical invariants (T.1 audit + T.4 spec):
|
|
12
|
-
*
|
|
13
|
-
* 1. **Singleton transport** — `EngineClient` no longer owns a
|
|
14
|
-
* subprocess. It holds a `net.Socket` connection to a shared
|
|
15
|
-
* daemon. Engine lifecycle lives in `singleton.ts`; closing a
|
|
16
|
-
* client only closes the connection, not the engine.
|
|
17
|
-
*
|
|
18
|
-
* 2. **LOOP_HOME pin** (T.1.D) — handled by `singleton.ts` at spawn
|
|
19
|
-
* time. Engine defaults `~/.loop`; opensquid pins to
|
|
20
|
-
* `~/.opensquid`. Stripping the pin would make existing memories
|
|
21
|
-
* + lessons silently invisible.
|
|
22
|
-
*
|
|
23
|
-
* 3. **Auto-reconnect on socket close** — if the daemon restarts
|
|
24
|
-
* (kill -9, OOM, manual `engine kill`), the next `call()` will
|
|
25
|
-
* re-acquire via the singleton. Pending calls reject so callers
|
|
26
|
-
* can retry.
|
|
27
|
-
*
|
|
28
|
-
* 4. **Error wire shape** — five engine-custom codes in
|
|
29
|
-
* `-32000..=-32004` range. `RpcError` carries `.code` + `.data`
|
|
30
|
-
* so callers branch on the structured field, not the message.
|
|
31
|
-
*
|
|
32
|
-
* 5. **Authored_by wire encoding** — INPUT accepts `'user' | 'pack'`
|
|
33
|
-
* (else maps to engine's `Llm` default); OUTPUT is
|
|
34
|
-
* `'user' | 'pack' | 'agent'` (`Llm` renders as `"agent"`).
|
|
35
|
-
*
|
|
36
|
-
* 6. **Windows fallback** — UDS is Unix-only. On Windows,
|
|
37
|
-
* `acquireOrSpawnEngine()` throws; callers wrap with a feature
|
|
38
|
-
* flag (`OPENSQUID_ENGINE_SOCKET=disable`) to fall back to the
|
|
39
|
-
* legacy per-process stdio spawn (NOT implemented here yet —
|
|
40
|
-
* tracked as T.8 follow-up).
|
|
41
|
-
*
|
|
42
|
-
* Types live in `./types.js` — this file owns the transport + class.
|
|
43
|
-
*/
|
|
44
|
-
import type { CompressParams, CompressResult, ConsolidateParams, ConsolidateResult, CreateMemoryResult, GetMemoryResult, LessonCaptureFeedbackResult, LessonCreateParams, LessonCreateResult, LessonDiscardResult, LessonListResult, LessonPromoteResult, LessonRecallResult, LessonSupersedeResult, ManifestAssembleParams, ManifestAssembleResult, MemoryDeleteResult, MemoryListResult, MemoryOrigin, MemoryScope, MemorySearchParams, MemorySearchResult, MemoryUpdateResult, RecomputeCitationsResult, ScopeFilterWire, TaskGetLedgerResult, TaskLogPhaseResult } from './types.js';
|
|
45
|
-
/**
|
|
46
|
-
* JSON-RPC error response surfaced as a JS Error subclass. `.code` +
|
|
47
|
-
* `.data` carry the engine-side fields so callers can branch without
|
|
48
|
-
* pattern-matching `.message`.
|
|
49
|
-
*/
|
|
50
|
-
export declare class RpcError extends Error {
|
|
51
|
-
readonly code: number;
|
|
52
|
-
readonly data?: unknown;
|
|
53
|
-
constructor(message: string, code: number, data?: unknown);
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Engine error codes (verified against engine/src/serve.rs:226-258).
|
|
57
|
-
*
|
|
58
|
-
* Standard JSON-RPC range (-32700 / -32600 / -32601 / -32602 / -32603)
|
|
59
|
-
* is mirrored for completeness. Engine-custom codes occupy
|
|
60
|
-
* `-32000..=-32004` and carry a structured `data` payload per T.1.E.
|
|
61
|
-
*/
|
|
62
|
-
export declare const ENGINE_ERROR: {
|
|
63
|
-
readonly PARSE: -32700;
|
|
64
|
-
readonly INVALID_REQUEST: -32600;
|
|
65
|
-
readonly METHOD_NOT_FOUND: -32601;
|
|
66
|
-
readonly INVALID_PARAMS: -32602;
|
|
67
|
-
readonly INTERNAL: -32603;
|
|
68
|
-
/** data: { reasons: string[] } — kebab-case reasons per T.1.E + T.1.F */
|
|
69
|
-
readonly PROMOTION_BLOCKED: -32000;
|
|
70
|
-
/** data: { lesson_id: string } */
|
|
71
|
-
readonly USER_LESSON_IMMUNE: -32001;
|
|
72
|
-
/** data: { id: string } */
|
|
73
|
-
readonly NOT_FOUND: -32002;
|
|
74
|
-
/** data: { memory_id: string, cited_by: number } */
|
|
75
|
-
readonly USER_MEMORY_IMMUNE: -32003;
|
|
76
|
-
/** data: { reason: string } */
|
|
77
|
-
readonly SUPERSEDE_BLOCKED: -32004;
|
|
78
|
-
};
|
|
79
|
-
/**
|
|
80
|
-
* Socket + JSON-RPC plumbing. One instance ≡ one connection to the
|
|
81
|
-
* shared engine daemon. Connection is established lazily on first
|
|
82
|
-
* `call`. Survives daemon restarts: when the socket closes, the next
|
|
83
|
-
* call re-acquires via `acquireOrSpawnEngine()`.
|
|
84
|
-
*/
|
|
85
|
-
export declare class EngineClient {
|
|
86
|
-
private socket;
|
|
87
|
-
private reader;
|
|
88
|
-
private pending;
|
|
89
|
-
private nextId;
|
|
90
|
-
private startupAck;
|
|
91
|
-
private spawnedByUs;
|
|
92
|
-
ping(): Promise<{
|
|
93
|
-
ok: true;
|
|
94
|
-
version: string;
|
|
95
|
-
}>;
|
|
96
|
-
lessonCreate(p: LessonCreateParams): Promise<LessonCreateResult>;
|
|
97
|
-
lessonRecall(p: {
|
|
98
|
-
query: string;
|
|
99
|
-
limit?: number;
|
|
100
|
-
}): Promise<LessonRecallResult>;
|
|
101
|
-
lessonPromote(p: {
|
|
102
|
-
id: string;
|
|
103
|
-
}): Promise<LessonPromoteResult>;
|
|
104
|
-
lessonDiscard(p: {
|
|
105
|
-
id: string;
|
|
106
|
-
reason?: string;
|
|
107
|
-
force?: boolean;
|
|
108
|
-
}): Promise<LessonDiscardResult>;
|
|
109
|
-
lessonList(p: {
|
|
110
|
-
statuses?: string[];
|
|
111
|
-
limit?: number;
|
|
112
|
-
offset?: number;
|
|
113
|
-
}): Promise<LessonListResult>;
|
|
114
|
-
lessonCaptureFeedback(p: {
|
|
115
|
-
id: string;
|
|
116
|
-
polarity: 'thumbs_up' | 'thumbs_down';
|
|
117
|
-
source_signal_id?: string;
|
|
118
|
-
}): Promise<LessonCaptureFeedbackResult>;
|
|
119
|
-
lessonSupersede(p: {
|
|
120
|
-
old_id: string;
|
|
121
|
-
new_id: string;
|
|
122
|
-
force?: boolean;
|
|
123
|
-
}): Promise<LessonSupersedeResult>;
|
|
124
|
-
memoryCreate(p: {
|
|
125
|
-
description: string;
|
|
126
|
-
content: string;
|
|
127
|
-
authored_by?: string;
|
|
128
|
-
scope?: MemoryScope;
|
|
129
|
-
origin?: MemoryOrigin;
|
|
130
|
-
}): Promise<CreateMemoryResult>;
|
|
131
|
-
memorySearch(p: MemorySearchParams): Promise<MemorySearchResult>;
|
|
132
|
-
memoryGet(p: {
|
|
133
|
-
id: string;
|
|
134
|
-
}): Promise<GetMemoryResult>;
|
|
135
|
-
memoryList(p: {
|
|
136
|
-
scope_filter?: ScopeFilterWire;
|
|
137
|
-
limit?: number;
|
|
138
|
-
offset?: number;
|
|
139
|
-
}): Promise<MemoryListResult>;
|
|
140
|
-
memoryUpdate(p: {
|
|
141
|
-
id: string;
|
|
142
|
-
description?: string;
|
|
143
|
-
content?: string;
|
|
144
|
-
scope?: MemoryScope;
|
|
145
|
-
}): Promise<MemoryUpdateResult>;
|
|
146
|
-
memoryDelete(p: {
|
|
147
|
-
id: string;
|
|
148
|
-
force?: boolean;
|
|
149
|
-
}): Promise<MemoryDeleteResult>;
|
|
150
|
-
/**
|
|
151
|
-
* Compress a window of memories into one gist `Mc` (CMP.1). Pure
|
|
152
|
-
* exposure of the engine's `compress()` lib fn — mints `Mc` with
|
|
153
|
-
* `derived_from = ids` + summed citation counters; does NOT delete
|
|
154
|
-
* predecessors (that is the host's verified, gated terminal step).
|
|
155
|
-
*/
|
|
156
|
-
memoryCompress(p: CompressParams): Promise<CompressResult>;
|
|
157
|
-
/**
|
|
158
|
-
* Atomic safe-compression (CMP.4). The engine compresses the window
|
|
159
|
-
* into one gist `Mc`, VERIFIES via recall-replay that `Mc` preserves
|
|
160
|
-
* each predecessor's recall, and ONLY THEN force-deletes the
|
|
161
|
-
* NON-immune predecessors — user-cited ones are kept. Any error or
|
|
162
|
-
* verify-miss → deletes NOTHING and returns `verified: false` with
|
|
163
|
-
* the minted `Mc` id (so the host keeps `Mc` alongside the originals
|
|
164
|
-
* + surfaces drift).
|
|
165
|
-
*
|
|
166
|
-
* The D2 safety contract (verify + immunity + fail-closed) is
|
|
167
|
-
* GUARANTEED inside the engine (race-free, universal substrate
|
|
168
|
-
* integrity) — the host no longer runs recall-replay or issues any
|
|
169
|
-
* `memory.delete` in the compression path.
|
|
170
|
-
*/
|
|
171
|
-
memoryConsolidate(p: ConsolidateParams): Promise<ConsolidateResult>;
|
|
172
|
-
/**
|
|
173
|
-
* Recompute every memory's `consumed_by_user_lessons` counter to
|
|
174
|
-
* ground truth (CMP.1). A host runs this after a batch of
|
|
175
|
-
* compressions / deletions to confirm citation integrity survived
|
|
176
|
-
* the `derived_from` chain.
|
|
177
|
-
*/
|
|
178
|
-
memoryRecomputeCitations(): Promise<RecomputeCitationsResult>;
|
|
179
|
-
manifestAssemble(p: ManifestAssembleParams): Promise<ManifestAssembleResult>;
|
|
180
|
-
taskLogPhase(p: {
|
|
181
|
-
task_id: string;
|
|
182
|
-
phase: string;
|
|
183
|
-
note?: string;
|
|
184
|
-
}): Promise<TaskLogPhaseResult>;
|
|
185
|
-
taskGetLedger(p: {
|
|
186
|
-
task_id: string;
|
|
187
|
-
}): Promise<TaskGetLedgerResult>;
|
|
188
|
-
/**
|
|
189
|
-
* Send a JSON-RPC request, await the response. Throws `RpcError` on
|
|
190
|
-
* engine-side errors; throws `Error` on socket close mid-call.
|
|
191
|
-
*
|
|
192
|
-
* The startup `ping` call passes through without re-entering
|
|
193
|
-
* `ensureConnected` to break the chicken-and-egg.
|
|
194
|
-
*/
|
|
195
|
-
call<T = unknown>(method: string, params: unknown): Promise<T>;
|
|
196
|
-
/**
|
|
197
|
-
* Close the connection to the engine daemon. Does NOT kill the
|
|
198
|
-
* daemon — engine lifecycle is owned by `singleton.ts` (and by
|
|
199
|
-
* T.7's `engine kill` for explicit teardown). After close(), the
|
|
200
|
-
* next `call()` will re-acquire.
|
|
201
|
-
*/
|
|
202
|
-
close(): Promise<void>;
|
|
203
|
-
/**
|
|
204
|
-
* Returns true if this client's last connection was the one that
|
|
205
|
-
* spawned the engine daemon. Useful for telemetry — production
|
|
206
|
-
* callers should not rely on this for correctness.
|
|
207
|
-
*/
|
|
208
|
-
get didSpawnEngine(): boolean;
|
|
209
|
-
private ensureConnected;
|
|
210
|
-
private onLine;
|
|
211
|
-
/**
|
|
212
|
-
* Clear connection state on close so the next call re-acquires.
|
|
213
|
-
* Mirrors the pre-T.4 behavior for subprocess exits — the daemon
|
|
214
|
-
* may restart out-of-band (kill -9, OOM, T.7 `engine kill`) and
|
|
215
|
-
* the next call should transparently respawn / reconnect.
|
|
216
|
-
*/
|
|
217
|
-
private onClose;
|
|
218
|
-
}
|
|
219
|
-
//# sourceMappingURL=client.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/engine/client.ts"],"names":[],"mappings":"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"}
|
package/dist/engine/client.js
DELETED
|
@@ -1,312 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* JSON-RPC 2.0 client for the loop-engine daemon.
|
|
3
|
-
*
|
|
4
|
-
* Connects to a long-running engine process at
|
|
5
|
-
* `~/.opensquid/loop-engine.sock` via Unix domain socket. The daemon
|
|
6
|
-
* is acquired-or-spawned by `acquireOrSpawnEngine()` (singleton.ts),
|
|
7
|
-
* so multiple `EngineClient` instances across hooks + sessions share
|
|
8
|
-
* the same underlying engine process — the keystone for cross-session
|
|
9
|
-
* memory recall.
|
|
10
|
-
*
|
|
11
|
-
* Critical invariants (T.1 audit + T.4 spec):
|
|
12
|
-
*
|
|
13
|
-
* 1. **Singleton transport** — `EngineClient` no longer owns a
|
|
14
|
-
* subprocess. It holds a `net.Socket` connection to a shared
|
|
15
|
-
* daemon. Engine lifecycle lives in `singleton.ts`; closing a
|
|
16
|
-
* client only closes the connection, not the engine.
|
|
17
|
-
*
|
|
18
|
-
* 2. **LOOP_HOME pin** (T.1.D) — handled by `singleton.ts` at spawn
|
|
19
|
-
* time. Engine defaults `~/.loop`; opensquid pins to
|
|
20
|
-
* `~/.opensquid`. Stripping the pin would make existing memories
|
|
21
|
-
* + lessons silently invisible.
|
|
22
|
-
*
|
|
23
|
-
* 3. **Auto-reconnect on socket close** — if the daemon restarts
|
|
24
|
-
* (kill -9, OOM, manual `engine kill`), the next `call()` will
|
|
25
|
-
* re-acquire via the singleton. Pending calls reject so callers
|
|
26
|
-
* can retry.
|
|
27
|
-
*
|
|
28
|
-
* 4. **Error wire shape** — five engine-custom codes in
|
|
29
|
-
* `-32000..=-32004` range. `RpcError` carries `.code` + `.data`
|
|
30
|
-
* so callers branch on the structured field, not the message.
|
|
31
|
-
*
|
|
32
|
-
* 5. **Authored_by wire encoding** — INPUT accepts `'user' | 'pack'`
|
|
33
|
-
* (else maps to engine's `Llm` default); OUTPUT is
|
|
34
|
-
* `'user' | 'pack' | 'agent'` (`Llm` renders as `"agent"`).
|
|
35
|
-
*
|
|
36
|
-
* 6. **Windows fallback** — UDS is Unix-only. On Windows,
|
|
37
|
-
* `acquireOrSpawnEngine()` throws; callers wrap with a feature
|
|
38
|
-
* flag (`OPENSQUID_ENGINE_SOCKET=disable`) to fall back to the
|
|
39
|
-
* legacy per-process stdio spawn (NOT implemented here yet —
|
|
40
|
-
* tracked as T.8 follow-up).
|
|
41
|
-
*
|
|
42
|
-
* Types live in `./types.js` — this file owns the transport + class.
|
|
43
|
-
*/
|
|
44
|
-
import { createInterface } from 'node:readline';
|
|
45
|
-
import { acquireOrSpawnEngine } from './singleton.js';
|
|
46
|
-
/**
|
|
47
|
-
* JSON-RPC error response surfaced as a JS Error subclass. `.code` +
|
|
48
|
-
* `.data` carry the engine-side fields so callers can branch without
|
|
49
|
-
* pattern-matching `.message`.
|
|
50
|
-
*/
|
|
51
|
-
export class RpcError extends Error {
|
|
52
|
-
code;
|
|
53
|
-
data;
|
|
54
|
-
constructor(message, code, data) {
|
|
55
|
-
super(message);
|
|
56
|
-
this.name = 'RpcError';
|
|
57
|
-
this.code = code;
|
|
58
|
-
this.data = data;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Engine error codes (verified against engine/src/serve.rs:226-258).
|
|
63
|
-
*
|
|
64
|
-
* Standard JSON-RPC range (-32700 / -32600 / -32601 / -32602 / -32603)
|
|
65
|
-
* is mirrored for completeness. Engine-custom codes occupy
|
|
66
|
-
* `-32000..=-32004` and carry a structured `data` payload per T.1.E.
|
|
67
|
-
*/
|
|
68
|
-
export const ENGINE_ERROR = {
|
|
69
|
-
PARSE: -32700,
|
|
70
|
-
INVALID_REQUEST: -32600,
|
|
71
|
-
METHOD_NOT_FOUND: -32601,
|
|
72
|
-
INVALID_PARAMS: -32602,
|
|
73
|
-
INTERNAL: -32603,
|
|
74
|
-
/** data: { reasons: string[] } — kebab-case reasons per T.1.E + T.1.F */
|
|
75
|
-
PROMOTION_BLOCKED: -32000,
|
|
76
|
-
/** data: { lesson_id: string } */
|
|
77
|
-
USER_LESSON_IMMUNE: -32001,
|
|
78
|
-
/** data: { id: string } */
|
|
79
|
-
NOT_FOUND: -32002,
|
|
80
|
-
/** data: { memory_id: string, cited_by: number } */
|
|
81
|
-
USER_MEMORY_IMMUNE: -32003,
|
|
82
|
-
/** data: { reason: string } */
|
|
83
|
-
SUPERSEDE_BLOCKED: -32004,
|
|
84
|
-
};
|
|
85
|
-
/**
|
|
86
|
-
* Socket + JSON-RPC plumbing. One instance ≡ one connection to the
|
|
87
|
-
* shared engine daemon. Connection is established lazily on first
|
|
88
|
-
* `call`. Survives daemon restarts: when the socket closes, the next
|
|
89
|
-
* call re-acquires via `acquireOrSpawnEngine()`.
|
|
90
|
-
*/
|
|
91
|
-
export class EngineClient {
|
|
92
|
-
socket = null;
|
|
93
|
-
reader = null;
|
|
94
|
-
pending = new Map();
|
|
95
|
-
nextId = 1;
|
|
96
|
-
startupAck = null;
|
|
97
|
-
spawnedByUs = false;
|
|
98
|
-
// --- typed wrappers per JSON-RPC method (engine serve.rs:290-310) ---
|
|
99
|
-
async ping() {
|
|
100
|
-
return this.call('ping', {});
|
|
101
|
-
}
|
|
102
|
-
async lessonCreate(p) {
|
|
103
|
-
return this.call('lesson.create', p);
|
|
104
|
-
}
|
|
105
|
-
async lessonRecall(p) {
|
|
106
|
-
return this.call('lesson.recall', p);
|
|
107
|
-
}
|
|
108
|
-
async lessonPromote(p) {
|
|
109
|
-
return this.call('lesson.promote', p);
|
|
110
|
-
}
|
|
111
|
-
async lessonDiscard(p) {
|
|
112
|
-
return this.call('lesson.discard', p);
|
|
113
|
-
}
|
|
114
|
-
async lessonList(p) {
|
|
115
|
-
return this.call('lesson.list', p);
|
|
116
|
-
}
|
|
117
|
-
async lessonCaptureFeedback(p) {
|
|
118
|
-
return this.call('lesson.capture_feedback', p);
|
|
119
|
-
}
|
|
120
|
-
async lessonSupersede(p) {
|
|
121
|
-
return this.call('lesson.supersede', p);
|
|
122
|
-
}
|
|
123
|
-
async memoryCreate(p) {
|
|
124
|
-
return this.call('memory.create', p);
|
|
125
|
-
}
|
|
126
|
-
async memorySearch(p) {
|
|
127
|
-
return this.call('memory.search', p);
|
|
128
|
-
}
|
|
129
|
-
async memoryGet(p) {
|
|
130
|
-
return this.call('memory.get', p);
|
|
131
|
-
}
|
|
132
|
-
async memoryList(p) {
|
|
133
|
-
return this.call('memory.list', p);
|
|
134
|
-
}
|
|
135
|
-
async memoryUpdate(p) {
|
|
136
|
-
return this.call('memory.update', p);
|
|
137
|
-
}
|
|
138
|
-
async memoryDelete(p) {
|
|
139
|
-
return this.call('memory.delete', p);
|
|
140
|
-
}
|
|
141
|
-
/**
|
|
142
|
-
* Compress a window of memories into one gist `Mc` (CMP.1). Pure
|
|
143
|
-
* exposure of the engine's `compress()` lib fn — mints `Mc` with
|
|
144
|
-
* `derived_from = ids` + summed citation counters; does NOT delete
|
|
145
|
-
* predecessors (that is the host's verified, gated terminal step).
|
|
146
|
-
*/
|
|
147
|
-
async memoryCompress(p) {
|
|
148
|
-
return this.call('memory.compress', p);
|
|
149
|
-
}
|
|
150
|
-
/**
|
|
151
|
-
* Atomic safe-compression (CMP.4). The engine compresses the window
|
|
152
|
-
* into one gist `Mc`, VERIFIES via recall-replay that `Mc` preserves
|
|
153
|
-
* each predecessor's recall, and ONLY THEN force-deletes the
|
|
154
|
-
* NON-immune predecessors — user-cited ones are kept. Any error or
|
|
155
|
-
* verify-miss → deletes NOTHING and returns `verified: false` with
|
|
156
|
-
* the minted `Mc` id (so the host keeps `Mc` alongside the originals
|
|
157
|
-
* + surfaces drift).
|
|
158
|
-
*
|
|
159
|
-
* The D2 safety contract (verify + immunity + fail-closed) is
|
|
160
|
-
* GUARANTEED inside the engine (race-free, universal substrate
|
|
161
|
-
* integrity) — the host no longer runs recall-replay or issues any
|
|
162
|
-
* `memory.delete` in the compression path.
|
|
163
|
-
*/
|
|
164
|
-
async memoryConsolidate(p) {
|
|
165
|
-
return this.call('memory.consolidate', p);
|
|
166
|
-
}
|
|
167
|
-
/**
|
|
168
|
-
* Recompute every memory's `consumed_by_user_lessons` counter to
|
|
169
|
-
* ground truth (CMP.1). A host runs this after a batch of
|
|
170
|
-
* compressions / deletions to confirm citation integrity survived
|
|
171
|
-
* the `derived_from` chain.
|
|
172
|
-
*/
|
|
173
|
-
async memoryRecomputeCitations() {
|
|
174
|
-
return this.call('memory.recompute_citations', {});
|
|
175
|
-
}
|
|
176
|
-
async manifestAssemble(p) {
|
|
177
|
-
return this.call('manifest.assemble', p);
|
|
178
|
-
}
|
|
179
|
-
async taskLogPhase(p) {
|
|
180
|
-
return this.call('task.log_phase', p);
|
|
181
|
-
}
|
|
182
|
-
async taskGetLedger(p) {
|
|
183
|
-
return this.call('task.get_ledger', p);
|
|
184
|
-
}
|
|
185
|
-
// --- transport ------------------------------------------------------
|
|
186
|
-
/**
|
|
187
|
-
* Send a JSON-RPC request, await the response. Throws `RpcError` on
|
|
188
|
-
* engine-side errors; throws `Error` on socket close mid-call.
|
|
189
|
-
*
|
|
190
|
-
* The startup `ping` call passes through without re-entering
|
|
191
|
-
* `ensureConnected` to break the chicken-and-egg.
|
|
192
|
-
*/
|
|
193
|
-
async call(method, params) {
|
|
194
|
-
if (method !== 'ping' || this.socket === null) {
|
|
195
|
-
await this.ensureConnected();
|
|
196
|
-
}
|
|
197
|
-
const id = this.nextId++;
|
|
198
|
-
return new Promise((resolve, reject) => {
|
|
199
|
-
this.pending.set(id, {
|
|
200
|
-
resolve: (v) => resolve(v),
|
|
201
|
-
reject,
|
|
202
|
-
});
|
|
203
|
-
const sock = this.socket;
|
|
204
|
-
if (!sock) {
|
|
205
|
-
this.pending.delete(id);
|
|
206
|
-
reject(new Error('engine connection not established'));
|
|
207
|
-
return;
|
|
208
|
-
}
|
|
209
|
-
const line = JSON.stringify({ jsonrpc: '2.0', id, method, params }) + '\n';
|
|
210
|
-
sock.write(line);
|
|
211
|
-
});
|
|
212
|
-
}
|
|
213
|
-
/**
|
|
214
|
-
* Close the connection to the engine daemon. Does NOT kill the
|
|
215
|
-
* daemon — engine lifecycle is owned by `singleton.ts` (and by
|
|
216
|
-
* T.7's `engine kill` for explicit teardown). After close(), the
|
|
217
|
-
* next `call()` will re-acquire.
|
|
218
|
-
*/
|
|
219
|
-
async close() {
|
|
220
|
-
const sock = this.socket;
|
|
221
|
-
if (!sock)
|
|
222
|
-
return;
|
|
223
|
-
return new Promise((resolve) => {
|
|
224
|
-
// If the socket is already closed, end() is a noop and `close`
|
|
225
|
-
// fires synchronously on the next tick.
|
|
226
|
-
sock.once('close', () => resolve());
|
|
227
|
-
sock.end();
|
|
228
|
-
});
|
|
229
|
-
}
|
|
230
|
-
/**
|
|
231
|
-
* Returns true if this client's last connection was the one that
|
|
232
|
-
* spawned the engine daemon. Useful for telemetry — production
|
|
233
|
-
* callers should not rely on this for correctness.
|
|
234
|
-
*/
|
|
235
|
-
get didSpawnEngine() {
|
|
236
|
-
return this.spawnedByUs;
|
|
237
|
-
}
|
|
238
|
-
// --- internals ------------------------------------------------------
|
|
239
|
-
async ensureConnected() {
|
|
240
|
-
if (this.socket)
|
|
241
|
-
return;
|
|
242
|
-
if (this.startupAck)
|
|
243
|
-
return this.startupAck;
|
|
244
|
-
// Acquire or spawn. Singleton handles the lock, recheck, spawn,
|
|
245
|
-
// pidfile, and socket-wait — this module just consumes the result.
|
|
246
|
-
const { socket, spawnedByUs } = await acquireOrSpawnEngine();
|
|
247
|
-
this.socket = socket;
|
|
248
|
-
this.spawnedByUs = spawnedByUs;
|
|
249
|
-
// Line-framed JSON-RPC over the socket. `createInterface` strips
|
|
250
|
-
// '\n' and emits per-line events. Same plumbing as the legacy
|
|
251
|
-
// stdio path — only the underlying stream changed.
|
|
252
|
-
this.reader = createInterface({ input: socket });
|
|
253
|
-
this.reader.on('line', (line) => {
|
|
254
|
-
this.onLine(line);
|
|
255
|
-
});
|
|
256
|
-
socket.on('close', () => this.onClose('socket closed'));
|
|
257
|
-
socket.on('error', (err) => {
|
|
258
|
-
process.stderr.write(`[opensquid] engine socket error: ${err.message}\n`);
|
|
259
|
-
});
|
|
260
|
-
// Confirm liveness before returning. A successful ping proves the
|
|
261
|
-
// daemon is past rehydrate + ready to dispatch.
|
|
262
|
-
this.startupAck = this.call('ping', {})
|
|
263
|
-
.then(() => undefined)
|
|
264
|
-
.catch((e) => {
|
|
265
|
-
throw new Error(`engine handshake failed: ${e.message}`);
|
|
266
|
-
});
|
|
267
|
-
return this.startupAck;
|
|
268
|
-
}
|
|
269
|
-
onLine(line) {
|
|
270
|
-
const trimmed = line.trim();
|
|
271
|
-
if (!trimmed)
|
|
272
|
-
return;
|
|
273
|
-
let msg;
|
|
274
|
-
try {
|
|
275
|
-
msg = JSON.parse(trimmed);
|
|
276
|
-
}
|
|
277
|
-
catch (e) {
|
|
278
|
-
process.stderr.write(`[opensquid] failed to parse engine line: ${String(e)}\n`);
|
|
279
|
-
return;
|
|
280
|
-
}
|
|
281
|
-
const pending = this.pending.get(msg.id);
|
|
282
|
-
if (!pending) {
|
|
283
|
-
process.stderr.write(`[opensquid] response for unknown id=${String(msg.id)}\n`);
|
|
284
|
-
return;
|
|
285
|
-
}
|
|
286
|
-
this.pending.delete(msg.id);
|
|
287
|
-
if (msg.error) {
|
|
288
|
-
pending.reject(new RpcError(msg.error.message, msg.error.code, msg.error.data));
|
|
289
|
-
}
|
|
290
|
-
else {
|
|
291
|
-
pending.resolve(msg.result);
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
/**
|
|
295
|
-
* Clear connection state on close so the next call re-acquires.
|
|
296
|
-
* Mirrors the pre-T.4 behavior for subprocess exits — the daemon
|
|
297
|
-
* may restart out-of-band (kill -9, OOM, T.7 `engine kill`) and
|
|
298
|
-
* the next call should transparently respawn / reconnect.
|
|
299
|
-
*/
|
|
300
|
-
onClose(reason) {
|
|
301
|
-
process.stderr.write(`[opensquid] engine connection closed: ${reason}\n`);
|
|
302
|
-
this.socket = null;
|
|
303
|
-
this.reader = null;
|
|
304
|
-
this.startupAck = null;
|
|
305
|
-
this.spawnedByUs = false;
|
|
306
|
-
for (const [, pending] of this.pending) {
|
|
307
|
-
pending.reject(new Error(`loop-engine connection lost: ${reason}`));
|
|
308
|
-
}
|
|
309
|
-
this.pending.clear();
|
|
310
|
-
}
|
|
311
|
-
}
|
|
312
|
-
//# sourceMappingURL=client.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/engine/client.ts"],"names":[],"mappings":"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"}
|
package/dist/engine/config.d.ts
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Engine binary discovery + persisted-path management.
|
|
3
|
-
*
|
|
4
|
-
* Resolution chain (per T.1 audit §J + src.legacy precedent):
|
|
5
|
-
* 1. `OPENSQUID_ENGINE_BIN` env var — explicit override, always wins
|
|
6
|
-
* 2. `~/.opensquid/engine-config.json` `engine_bin` field — persisted choice
|
|
7
|
-
* 3. Bundled npm optional dep (`opensquid-engine-<platform>-<arch>`)
|
|
8
|
-
* — returns `null` until npm stubs ship (follow-up track)
|
|
9
|
-
* 4. Auto-search dev paths under `~/projects/*` and `~/work/*`
|
|
10
|
-
* 5. `loop-engine` on `$PATH`
|
|
11
|
-
* 6. `null` — caller surfaces a helpful error
|
|
12
|
-
*
|
|
13
|
-
* First successful resolution from (4) or (5) is persisted to
|
|
14
|
-
* `~/.opensquid/engine-config.json` so the next session skips the search.
|
|
15
|
-
* Bundled-binary hits (3) are NOT persisted because the path is
|
|
16
|
-
* deterministic from the npm install layout and persisting it would
|
|
17
|
-
* point at a stale `node_modules/` path after upgrades.
|
|
18
|
-
*
|
|
19
|
-
* The persisted file is engine-specific so it doesn't collide with the
|
|
20
|
-
* existing `~/.opensquid/config.json` written by the chat-daemon stack.
|
|
21
|
-
*
|
|
22
|
-
* Imports `OPENSQUID_HOME` from `runtime/paths.ts` so the data root
|
|
23
|
-
* honors the `OPENSQUID_HOME` env override (tests + relocatable installs).
|
|
24
|
-
*/
|
|
25
|
-
export interface EngineConfig {
|
|
26
|
-
version: 1;
|
|
27
|
-
/** Last-known path to the loop-engine binary. */
|
|
28
|
-
engine_bin?: string;
|
|
29
|
-
/** ISO timestamp the engine_bin was last resolved via search. */
|
|
30
|
-
engine_bin_resolved_at?: string;
|
|
31
|
-
}
|
|
32
|
-
export declare function loadEngineConfig(): Promise<EngineConfig>;
|
|
33
|
-
export declare function saveEngineConfig(config: EngineConfig): Promise<void>;
|
|
34
|
-
/**
|
|
35
|
-
* Resolve the engine binary path using the priority chain above. Writes
|
|
36
|
-
* the resolved path back to config when discovered via search so the
|
|
37
|
-
* next session is instant. Returns `null` if no working binary could be
|
|
38
|
-
* located.
|
|
39
|
-
*
|
|
40
|
-
* **Re-resolution on every start** (T.7 / T.1.P): a persisted
|
|
41
|
-
* `engine_bin` that no longer points at an executable file is cleared
|
|
42
|
-
* from the config and the resolver falls through to bundled → dev →
|
|
43
|
-
* `$PATH`. This adds ~10-100ms (one extra `fs.stat`) but means a
|
|
44
|
-
* deleted / moved / freshly-rebuilt binary silently self-heals on the
|
|
45
|
-
* next start instead of failing loudly with `ENOENT`. Bundled hits
|
|
46
|
-
* are NOT persisted (deterministic from npm layout); dev-path + `$PATH`
|
|
47
|
-
* hits ARE persisted so subsequent sessions skip the search.
|
|
48
|
-
*/
|
|
49
|
-
export declare function resolveEngineBin(): Promise<string | null>;
|
|
50
|
-
/**
|
|
51
|
-
* Set the engine binary path explicitly and persist. Validates that the
|
|
52
|
-
* path points at an executable file before writing.
|
|
53
|
-
*/
|
|
54
|
-
export declare function setEngineBin(binPath: string): Promise<{
|
|
55
|
-
resolved: string;
|
|
56
|
-
}>;
|
|
57
|
-
/**
|
|
58
|
-
* Forget the persisted engine binary path. Forces re-discovery on the
|
|
59
|
-
* next `resolveEngineBin` call.
|
|
60
|
-
*/
|
|
61
|
-
export declare function forgetEngineBin(): Promise<void>;
|
|
62
|
-
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/engine/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAaH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,CAAC,CAAC;IACX,iDAAiD;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iEAAiE;IACjE,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAQD,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,YAAY,CAAC,CAoC9D;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAI1E;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA2C/D;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAUjF;AAED;;;GAGG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAKrD"}
|