kiokuko-dsh 0.2.30 → 0.2.32
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.ja.md +1 -0
- package/dist/client.cjs +208 -3
- package/dist/client.d.ts +1 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/dsh/composition.d.ts.map +1 -1
- package/dist/dsh/composition.js +2 -0
- package/dist/dsh/composition.js.map +1 -1
- package/dist/dsh/core/host.d.ts.map +1 -1
- package/dist/dsh/core/host.js +0 -10
- package/dist/dsh/core/host.js.map +1 -1
- package/dist/dsh/host-adapter/routing.d.ts.map +1 -1
- package/dist/dsh/host-adapter/routing.js +131 -114
- package/dist/dsh/host-adapter/routing.js.map +1 -1
- package/dist/dsh/host-adapter.d.ts.map +1 -1
- package/dist/dsh/host-adapter.js +2 -1
- package/dist/dsh/host-adapter.js.map +1 -1
- package/dist/dsh/index.d.ts.map +1 -1
- package/dist/dsh/index.js +0 -8
- package/dist/dsh/index.js.map +1 -1
- package/dist/dsh/lisp/coding-preparation.d.ts +1 -1
- package/dist/dsh/lisp/coding-preparation.d.ts.map +1 -1
- package/dist/dsh/lisp/coding-preparation.js +1 -1
- package/dist/dsh/lisp/coding-preparation.js.map +1 -1
- package/dist/dsh/lisp/compiled-cache.d.ts +1 -1
- package/dist/dsh/lisp/compiled-cache.d.ts.map +1 -1
- package/dist/dsh/lisp/compiled-cache.js +12 -3
- package/dist/dsh/lisp/compiled-cache.js.map +1 -1
- package/dist/dsh/lisp/manager.d.ts +1 -0
- package/dist/dsh/lisp/manager.d.ts.map +1 -1
- package/dist/dsh/lisp/manager.js +52 -51
- package/dist/dsh/lisp/manager.js.map +1 -1
- package/dist/dsh/lisp/store.d.ts +4 -0
- package/dist/dsh/lisp/store.d.ts.map +1 -1
- package/dist/dsh/lisp/store.js +61 -15
- package/dist/dsh/lisp/store.js.map +1 -1
- package/dist/dsh/lisp/surface.d.ts.map +1 -1
- package/dist/dsh/lisp/surface.js +30 -5
- package/dist/dsh/lisp/surface.js.map +1 -1
- package/dist/dsh/lisp-tool-identity.d.ts +5 -0
- package/dist/dsh/lisp-tool-identity.d.ts.map +1 -1
- package/dist/dsh/lisp-tool-identity.js +10 -0
- package/dist/dsh/lisp-tool-identity.js.map +1 -1
- package/dist/dsh/model-routing.d.ts +1 -0
- package/dist/dsh/model-routing.d.ts.map +1 -1
- package/dist/dsh/model-routing.js +4 -0
- package/dist/dsh/model-routing.js.map +1 -1
- package/dist/dsh/models/index.d.ts +6 -0
- package/dist/dsh/models/index.d.ts.map +1 -0
- package/dist/dsh/models/index.js +8 -0
- package/dist/dsh/models/index.js.map +1 -0
- package/dist/dsh/models/surface.d.ts +1 -1
- package/dist/dsh/models/surface.d.ts.map +1 -1
- package/dist/dsh/models/surface.js +21 -13
- package/dist/dsh/models/surface.js.map +1 -1
- package/dist/dsh/native-tool-surface.d.ts +16 -0
- package/dist/dsh/native-tool-surface.d.ts.map +1 -0
- package/dist/dsh/native-tool-surface.js +64 -0
- package/dist/dsh/native-tool-surface.js.map +1 -0
- package/dist/dsh/on-demand-intake.d.ts.map +1 -1
- package/dist/dsh/on-demand-intake.js +57 -25
- package/dist/dsh/on-demand-intake.js.map +1 -1
- package/dist/dsh/session-recovery-surface.d.ts +7 -0
- package/dist/dsh/session-recovery-surface.d.ts.map +1 -0
- package/dist/dsh/session-recovery-surface.js +86 -0
- package/dist/dsh/session-recovery-surface.js.map +1 -0
- package/dist/dsh/session-recovery.d.ts +78 -0
- package/dist/dsh/session-recovery.d.ts.map +1 -0
- package/dist/dsh/session-recovery.js +303 -0
- package/dist/dsh/session-recovery.js.map +1 -0
- package/dist/dsh/skill-prompts.json +1 -1
- package/dist/locale/en.json +1 -1
- package/dist/locale/ja.json +1 -1
- package/dist/locale/ko.json +1 -1
- package/dist/locale/zh-CN.json +1 -1
- package/dist/recovery-client.d.ts +5 -0
- package/dist/recovery-client.d.ts.map +1 -0
- package/dist/recovery-client.js +166 -0
- package/dist/recovery-client.js.map +1 -0
- package/docs/lisp.md +20 -2
- package/docs/session-recovery.md +24 -0
- package/dsh/cordis.patch.yml +4 -0
- package/migrations/049_lisp_session_hosts.sql +10 -0
- package/package.json +6 -2
- package/skills/coding-ideal-routine-skill/SKILL.md +28 -1
- package/skills/kiokuko-lisp/SKILL.md +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/dsh/lisp/manager.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/dsh/lisp/manager.ts"],"names":[],"mappings":"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"}
|
package/dist/dsh/lisp/manager.js
CHANGED
|
@@ -3,7 +3,7 @@ import { runManagedOperation, observeManagedResult, managedAdmissionDenied, isMa
|
|
|
3
3
|
import { LispRecoverySession } from './recovery.js';
|
|
4
4
|
import { CodeIntelligenceAdapterV1 } from './code-intelligence.js';
|
|
5
5
|
import { CODE_METHODS } from './code-intelligence-contracts.js';
|
|
6
|
-
import { mkdir, mkdtemp, open, readFile, realpath, rm,
|
|
6
|
+
import { mkdir, mkdtemp, open, readFile, realpath, rm, writeFile } from 'node:fs/promises';
|
|
7
7
|
import { dirname, isAbsolute, join } from 'node:path';
|
|
8
8
|
import { createHash, randomUUID } from 'node:crypto';
|
|
9
9
|
import { fileURLToPath } from 'node:url';
|
|
@@ -71,7 +71,9 @@ export class LispManager {
|
|
|
71
71
|
#taskTools;
|
|
72
72
|
#hot;
|
|
73
73
|
#closed = false;
|
|
74
|
-
#
|
|
74
|
+
#hostId = randomUUID();
|
|
75
|
+
#claims = new Set();
|
|
76
|
+
#ownsSessions = false;
|
|
75
77
|
#artifactReserved = 0;
|
|
76
78
|
#admissionQueue = Promise.resolve();
|
|
77
79
|
#inflight = new Map();
|
|
@@ -102,59 +104,43 @@ export class LispManager {
|
|
|
102
104
|
async start() {
|
|
103
105
|
await verifyLispVendor(this.#library);
|
|
104
106
|
await mkdir(this.options.dataRoot, { recursive: true, mode: 0o700 });
|
|
105
|
-
|
|
107
|
+
// Older versions hold an exclusive lock and cannot safely coexist with this
|
|
108
|
+
// session-scoped protocol. Preserve their lock; never steal a live host.
|
|
106
109
|
try {
|
|
107
|
-
const
|
|
108
|
-
try {
|
|
109
|
-
await lock.writeFile(JSON.stringify({ pid: process.pid }));
|
|
110
|
-
await lock.sync();
|
|
111
|
-
this.#lock = true;
|
|
112
|
-
}
|
|
113
|
-
finally {
|
|
114
|
-
await lock.close();
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
catch (error) {
|
|
118
|
-
if (error.code !== 'EEXIST')
|
|
119
|
-
throw error;
|
|
120
|
-
const saved = JSON.parse(await readFile(lockPath, 'utf8'));
|
|
110
|
+
const saved = JSON.parse(await readFile(join(this.options.dataRoot, 'host.lock'), 'utf8'));
|
|
121
111
|
if (!Number.isInteger(saved.pid) || saved.pid < 1)
|
|
122
112
|
fail('HOST_LOCK', 'Lisp のホストロックが破損しています。');
|
|
123
113
|
try {
|
|
124
114
|
process.kill(saved.pid, 0);
|
|
125
|
-
fail('HOST_LOCK', '
|
|
115
|
+
fail('HOST_LOCK', '旧バージョンの Lisp ホストが使用中です。そのホストを終了してから再開してください。');
|
|
126
116
|
}
|
|
127
117
|
catch (check) {
|
|
128
118
|
if (check.code !== 'ESRCH')
|
|
129
119
|
throw check;
|
|
130
120
|
}
|
|
131
|
-
await unlink(lockPath);
|
|
132
|
-
const lock = await open(lockPath, 'wx', 0o600);
|
|
133
|
-
try {
|
|
134
|
-
await lock.writeFile(JSON.stringify({ pid: process.pid }));
|
|
135
|
-
await lock.sync();
|
|
136
|
-
this.#lock = true;
|
|
137
|
-
}
|
|
138
|
-
finally {
|
|
139
|
-
await lock.close();
|
|
140
|
-
}
|
|
141
121
|
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
if (error.code !== 'ENOENT')
|
|
124
|
+
throw error;
|
|
125
|
+
}
|
|
126
|
+
await this.#store.expireResults();
|
|
127
|
+
for (const session of await this.#store.start())
|
|
128
|
+
this.enabled.set(session.session_id, session.root_path);
|
|
129
|
+
await this.#hot.catalog.expire();
|
|
130
|
+
}
|
|
131
|
+
async claimSession(owner) {
|
|
132
|
+
if (this.#closed)
|
|
133
|
+
fail('HOST_STOPPED', 'プラグインが停止しています。');
|
|
134
|
+
const claim = this.#store.claimSession(owner, this.#hostId);
|
|
135
|
+
this.#claims.add(claim);
|
|
142
136
|
try {
|
|
143
|
-
await
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
await this.#store.database(db => {
|
|
148
|
-
const journal = new ManagedOperationJournal(db);
|
|
149
|
-
for (const row of db.prepare(`SELECT scope_id FROM dsh_managed_scopes WHERE json_extract(scope_json,'$.runtimeIdentity') LIKE 'sbcl:%'`).all()) {
|
|
150
|
-
journal.recover(row.scope_id);
|
|
151
|
-
}
|
|
152
|
-
});
|
|
137
|
+
await claim;
|
|
138
|
+
this.#ownsSessions = true;
|
|
139
|
+
if (this.#closed)
|
|
140
|
+
fail('HOST_STOPPED', 'プラグインが停止しています。');
|
|
153
141
|
}
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
this.#lock = false;
|
|
157
|
-
throw error;
|
|
142
|
+
finally {
|
|
143
|
+
this.#claims.delete(claim);
|
|
158
144
|
}
|
|
159
145
|
}
|
|
160
146
|
entry(owner) {
|
|
@@ -175,12 +161,11 @@ export class LispManager {
|
|
|
175
161
|
if (workflow?.protocol && this.#config.executionMode !== 'protected')
|
|
176
162
|
fail('PROTOCOL_PROTECTED_REQUIRED', 'This bounded protocol requires protected Lisp computation. Disable the existing Lisp session before binding, then select protected mode; use owned file/test tools for effects.');
|
|
177
163
|
const native = this.taskAuthority.current()?.nativeCommands;
|
|
178
|
-
if (native && !workflow?.protocol)
|
|
164
|
+
if (native && !workflow?.protocol)
|
|
179
165
|
native.assertCurrent();
|
|
180
|
-
|
|
181
|
-
}
|
|
182
|
-
if (workflow && (workflow.repositoryRoot !== owner.root || workflow.choice.state !== 'yes' || !workflow.definition || ['cancelled', 'superseded', 'completed'].includes(workflow.state)))
|
|
166
|
+
else if (workflow && (workflow.repositoryRoot !== owner.root || workflow.choice.state !== 'yes' || !workflow.definition || ['cancelled', 'superseded', 'completed'].includes(workflow.state)))
|
|
183
167
|
fail('CODING_CHOICE_PENDING', 'このタスクの Goal と条件を定め、Lisp の選択に回答してから実行してください。');
|
|
168
|
+
await this.claimSession(owner);
|
|
184
169
|
}
|
|
185
170
|
async enable(owner, hostBusy = false, signal) {
|
|
186
171
|
await this.authorizeCodingTask(owner);
|
|
@@ -972,11 +957,22 @@ export class LispManager {
|
|
|
972
957
|
}
|
|
973
958
|
async dispatch(owner, tool, input, signal) {
|
|
974
959
|
try {
|
|
975
|
-
if (!['lisp_status', 'lisp_hot_status', 'lisp_inspect', 'lisp_cancel'].includes(tool))
|
|
976
|
-
await this.authorizeCodingTask(owner);
|
|
977
960
|
if (tool === 'lisp_status')
|
|
978
961
|
return await this.status(owner, z.number().int().nonnegative().parse(input.offset ?? 0));
|
|
979
962
|
const state = this.entry(owner);
|
|
963
|
+
if (!['lisp_hot_status', 'lisp_inspect', 'lisp_cancel'].includes(tool))
|
|
964
|
+
await this.authorizeCodingTask(owner);
|
|
965
|
+
if (tool === 'lisp_cancel')
|
|
966
|
+
await this.claimSession(owner);
|
|
967
|
+
if (tool === 'lisp_inspect') {
|
|
968
|
+
try {
|
|
969
|
+
await this.claimSession(owner);
|
|
970
|
+
}
|
|
971
|
+
catch (error) {
|
|
972
|
+
if (!(error instanceof LispError) || error.code !== 'SESSION_IN_USE')
|
|
973
|
+
throw error;
|
|
974
|
+
}
|
|
975
|
+
}
|
|
980
976
|
if (tool === 'lisp_hot_status')
|
|
981
977
|
return await this.#hot.status(owner, input);
|
|
982
978
|
if (tool === 'lisp_describe' && typeof input.toolRef === 'string') {
|
|
@@ -1510,6 +1506,7 @@ export class LispManager {
|
|
|
1510
1506
|
});
|
|
1511
1507
|
}
|
|
1512
1508
|
async recoverBound(owner, signal) {
|
|
1509
|
+
await this.claimSession(owner);
|
|
1513
1510
|
const managed = await this.managedUnresolved(owner);
|
|
1514
1511
|
if (managed.unknownCount > 0)
|
|
1515
1512
|
return { ok: false, code: 'RECONCILIATION_REQUIRED',
|
|
@@ -1543,6 +1540,7 @@ export class LispManager {
|
|
|
1543
1540
|
return this.status(owner);
|
|
1544
1541
|
}
|
|
1545
1542
|
async abandon(owner, id) {
|
|
1543
|
+
await this.claimSession(owner);
|
|
1546
1544
|
await this.stopTaskWorkers(owner.sessionId);
|
|
1547
1545
|
const state = this.entry(owner);
|
|
1548
1546
|
await this.cancel(state);
|
|
@@ -1561,6 +1559,7 @@ export class LispManager {
|
|
|
1561
1559
|
});
|
|
1562
1560
|
}
|
|
1563
1561
|
async restoreBound(owner, id, signal) {
|
|
1562
|
+
await this.claimSession(owner);
|
|
1564
1563
|
const state = this.entry(owner);
|
|
1565
1564
|
await this.cancel(state);
|
|
1566
1565
|
await Promise.allSettled([...this.#executions].filter(([, session]) => session === owner.sessionId).map(([promise]) => promise));
|
|
@@ -1583,6 +1582,7 @@ export class LispManager {
|
|
|
1583
1582
|
}
|
|
1584
1583
|
}
|
|
1585
1584
|
async disable(owner) {
|
|
1585
|
+
await this.claimSession(owner);
|
|
1586
1586
|
await this.stopTaskWorkers(owner.sessionId);
|
|
1587
1587
|
if (await this.isTaskMode(owner)) {
|
|
1588
1588
|
await Promise.allSettled([...this.#executions].filter(([, session]) => session === owner.sessionId).map(([promise]) => promise));
|
|
@@ -1615,9 +1615,10 @@ export class LispManager {
|
|
|
1615
1615
|
await this.stopTaskWorkers(sessionId);
|
|
1616
1616
|
await Promise.all([...this.#agents.values()].map(state => this.cancel(state)));
|
|
1617
1617
|
await Promise.allSettled([...this.#executions.keys(), ...[...this.#agents.values()].map(state => state.admission)]);
|
|
1618
|
-
|
|
1619
|
-
|
|
1620
|
-
this.#
|
|
1618
|
+
await Promise.allSettled([...this.#claims]);
|
|
1619
|
+
if (this.#ownsSessions) {
|
|
1620
|
+
await this.#store.releaseHost(this.#hostId);
|
|
1621
|
+
this.#ownsSessions = false;
|
|
1621
1622
|
}
|
|
1622
1623
|
}
|
|
1623
1624
|
}
|