kiokuko-dsh 0.1.61 → 0.1.62

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/PERMISSIONS.md +1 -1
  2. package/README.ja.md +1 -1
  3. package/README.ko.md +1 -1
  4. package/README.md +1 -1
  5. package/README.zh-CN.md +1 -1
  6. package/dist/client.cjs +2 -2
  7. package/dist/dsh/config.d.ts +1 -0
  8. package/dist/dsh/config.d.ts.map +1 -1
  9. package/dist/dsh/lisp/contracts.d.ts +2 -1
  10. package/dist/dsh/lisp/contracts.d.ts.map +1 -1
  11. package/dist/dsh/lisp/contracts.js +1 -0
  12. package/dist/dsh/lisp/contracts.js.map +1 -1
  13. package/dist/dsh/lisp/manager.d.ts +11 -1
  14. package/dist/dsh/lisp/manager.d.ts.map +1 -1
  15. package/dist/dsh/lisp/manager.js +166 -14
  16. package/dist/dsh/lisp/manager.js.map +1 -1
  17. package/dist/dsh/lisp/surface.d.ts.map +1 -1
  18. package/dist/dsh/lisp/surface.js +67 -6
  19. package/dist/dsh/lisp/surface.js.map +1 -1
  20. package/dist/dsh/lisp/worker.d.ts +3 -0
  21. package/dist/dsh/lisp/worker.d.ts.map +1 -1
  22. package/dist/dsh/lisp/worker.js +4 -2
  23. package/dist/dsh/lisp/worker.js.map +1 -1
  24. package/dist/dsh/setup.d.ts +1 -1
  25. package/dist/dsh/setup.d.ts.map +1 -1
  26. package/dist/dsh/skill-prompts.json +1 -1
  27. package/dist/dsh/standard-skill-deployment.d.ts +1 -1
  28. package/dist/dsh/standard-skill-deployment.d.ts.map +1 -1
  29. package/dist/dsh/standard-skill-deployment.js +1 -1
  30. package/dist/dsh/standard-skill-deployment.js.map +1 -1
  31. package/dist/dsh/standard-skill-integrity.js +1 -1
  32. package/dist/dsh/standard-skills.d.ts +8 -1
  33. package/dist/dsh/standard-skills.d.ts.map +1 -1
  34. package/dist/dsh/standard-skills.js +14 -1
  35. package/dist/dsh/standard-skills.js.map +1 -1
  36. package/docs/dsh-plugin.md +16 -7
  37. package/docs/lisp.md +10 -0
  38. package/package.json +2 -2
  39. package/skills/kiokuko-lisp/SKILL.md +5 -0
  40. package/skills/kiokuko-soul/SKILL.md +1 -0
  41. package/skills/one-shot-software-completion/SKILL.md +85 -0
  42. package/skills/one-shot-software-completion/references/boundaries-and-lifecycle.md +56 -0
  43. package/skills/one-shot-software-completion/references/discovery-and-scope.md +67 -0
  44. package/skills/one-shot-software-completion/references/failure-recovery.md +43 -0
  45. package/skills/one-shot-software-completion/references/verification-and-completion.md +62 -0
package/PERMISSIONS.md CHANGED
@@ -15,7 +15,7 @@ Kiokuko operation.
15
15
  not a backup of the workspace or whole session. Later step inputs do not
16
16
  replace it. Storage failure cannot veto the native turn; observed model or
17
17
  tool execution prevents automatic input replay.
18
- - On enabled plugin load, synchronizes all eight bundled Skills and their
18
+ - On enabled plugin load, synchronizes all nine bundled Skills and their
19
19
  references to `~/.agents/skills/` before registering the DSH surfaces. Creates
20
20
  missing files and atomically replaces files carrying their exact Kiokuko
21
21
  management marker. Leaves unrelated files untouched and refuses unmanaged
package/README.ja.md CHANGED
@@ -50,7 +50,7 @@ minimumReleaseAgeExclude:
50
50
  - kiokuko-dsh
51
51
  ```
52
52
 
53
- 起動時に、日本語出力を含む全8 Skillと参照ファイルを `~/.agents/skills/` へ同期します。不足分を作成し、管理対象の旧版を更新します。非管理ファイルは上書きしません。他のエージェントではSkillカタログの再読み込みが必要です。
53
+ 起動時に、日本語出力を含む全9 Skillと参照ファイルを `~/.agents/skills/` へ同期します。不足分を作成し、管理対象の旧版を更新します。非管理ファイルは上書きしません。他のエージェントではSkillカタログの再読み込みが必要です。
54
54
 
55
55
  起動時には、起動ディレクトリの `AGENTS.md` にある既存の Kiokuko 管理ブロックも更新し、その外側の指示は保持します。パッケージ更新後は DSH を再起動してください。別の作業ディレクトリや配備コピーの確認・修復は[セットアップ手順](docs/dsh-plugin.md#what-setup-updates-and-when)を参照してください。`kiokuko use` は DSH のセットアップコマンドではありません。
56
56
 
package/README.ko.md CHANGED
@@ -52,7 +52,7 @@ minimumReleaseAgeExclude:
52
52
  - kiokuko-dsh
53
53
  ```
54
54
 
55
- 시작 시 일본어 출력 Skill을 포함한 번들 Skill 8개와 참조 파일을 `~/.agents/skills/`에 동기화합니다. 누락된 파일을 만들고 관리 대상 복사본을 업데이트하며, 비관리 파일은 덮어쓰지 않습니다. 다른 에이전트에서는 Skill 카탈로그를 다시 로드해야 합니다.
55
+ 시작 시 일본어 출력 Skill을 포함한 번들 Skill 9개와 참조 파일을 `~/.agents/skills/`에 동기화합니다. 누락된 파일을 만들고 관리 대상 복사본을 업데이트하며, 비관리 파일은 덮어쓰지 않습니다. 다른 에이전트에서는 Skill 카탈로그를 다시 로드해야 합니다.
56
56
 
57
57
  시작 시 시작 디렉터리의 `AGENTS.md`에 있는 기존 Kiokuko 관리 블록도 갱신하며, 블록 밖의 지침은 보존합니다. 패키지 업데이트 후 DSH를 다시 시작하세요. 다른 작업 디렉터리나 오래된 복사본의 확인 및 복구는 [설정 절차](docs/dsh-plugin.md#what-setup-updates-and-when)를 참고하세요. `kiokuko use`는 DSH 설정 명령이 아닙니다.
58
58
 
package/README.md CHANGED
@@ -51,7 +51,7 @@ minimumReleaseAgeExclude:
51
51
  - kiokuko-dsh
52
52
  ```
53
53
 
54
- At startup, all eight bundled Skills (including Japanese output) and their references are synchronized to `~/.agents/skills/`. Missing files are created and managed copies are updated; unmanaged files are preserved. Other agents must reload their Skill catalog.
54
+ At startup, all nine bundled Skills (including Japanese output) and their references are synchronized to `~/.agents/skills/`. Missing files are created and managed copies are updated; unmanaged files are preserved. Other agents must reload their Skill catalog.
55
55
 
56
56
  Startup also refreshes an existing Kiokuko managed block in the startup directory’s `AGENTS.md`, preserving your other instructions. Restart DSH after updating the package. See [setup and verification](docs/dsh-plugin.md#what-setup-updates-and-when) for another workspace or stale copies; `kiokuko use` is not the DSH setup command.
57
57
 
package/README.zh-CN.md CHANGED
@@ -52,7 +52,7 @@ minimumReleaseAgeExclude:
52
52
  - kiokuko-dsh
53
53
  ```
54
54
 
55
- 启动时会将包括日语输出在内的全部8个内置 Skill 及其引用文件同步到 `~/.agents/skills/`,创建缺失文件并更新受管理的副本,不覆盖非受管理文件。其他代理需要重新加载 Skill 目录。
55
+ 启动时会将包括日语输出在内的全部9个内置 Skill 及其引用文件同步到 `~/.agents/skills/`,创建缺失文件并更新受管理的副本,不覆盖非受管理文件。其他代理需要重新加载 Skill 目录。
56
56
 
57
57
  启动时也会更新启动目录中 `AGENTS.md` 的现有 Kiokuko 管理块,保留块外的指令。更新包后请重启 DSH。其他工作目录或旧副本的检查与修复请参阅[设置步骤](docs/dsh-plugin.md#what-setup-updates-and-when)。`kiokuko use` 不是 DSH 的设置命令。
58
58
 
package/dist/client.cjs CHANGED
@@ -323,7 +323,7 @@ window.__ModuleLoader__.load({
323
323
  };
324
324
  if (!status?.enabled && !error)
325
325
  return null;
326
- const label = { READY: '実行可能', EVALUATING: '処理中', PREFLIGHT: '起動中', STOPPING: '停止中', RECOVERY_REQUIRED: '確認が必要', STOP_UNCONFIRMED: '停止未確認' }[status?.state ?? ''] ?? '状態不明';
326
+ const label = { READY: '実行可能', SUSPENDED: '休止中(次回自動起動)', EVALUATING: '処理中', PREFLIGHT: '起動中', STOPPING: '停止中', RECOVERY_REQUIRED: '確認が必要', STOP_UNCONFIRMED: '停止未確認' }[status?.state ?? ''] ?? '状態不明';
327
327
  return jsxs(Fragment, { children: [jsx('button', { type: 'button', ref: trigger, onClick: () => setOpen(true), children: `Lisp: ${label}` }),
328
328
  jsx('dialog', { ref: dialog, onCancel: () => setOpen(false), 'aria-label': 'Lisp の状態と復旧', style: { maxWidth: 'min(720px, 90vw)', maxHeight: '85vh' },
329
329
  children: jsxs('section', { children: [jsx('h2', { children: `Lisp: ${label}` }),
@@ -333,7 +333,7 @@ window.__ModuleLoader__.load({
333
333
  ...(details ? [jsx('pre', { style: { whiteSpace: 'pre-wrap', overflowWrap: 'anywhere' }, children: details })] : []),
334
334
  jsx('p', { children: '未確定の変更は自動で再実行・復元しません。詳細は /kioku-lisp diagnostics でも確認できます。' }),
335
335
  jsx('button', { type: 'button', disabled: busy, onClick: () => void act('cancel'), children: '停止する' }),
336
- jsx('button', { type: 'button', disabled: busy || status?.state === 'STOP_UNCONFIRMED', onClick: () => void act('recover'), children: '照合して新しい Lisp を起動' }),
336
+ jsx('button', { type: 'button', disabled: busy || ['STOP_UNCONFIRMED', 'SUSPENDED'].includes(status?.state ?? ''), onClick: () => void act('recover'), children: '照合して新しい Lisp を起動' }),
337
337
  jsx('button', { type: 'button', onClick: () => setOpen(false), children: '閉じる' }),
338
338
  ] }) })] });
339
339
  }
@@ -72,6 +72,7 @@ export declare const Config: z.ZodObject<{
72
72
  timeoutMs: z.ZodDefault<z.ZodNumber>;
73
73
  startupTimeoutMs: z.ZodDefault<z.ZodNumber>;
74
74
  maxWorkers: z.ZodDefault<z.ZodNumber>;
75
+ idleTimeoutMs: z.ZodDefault<z.ZodNumber>;
75
76
  maxOutputBytes: z.ZodDefault<z.ZodNumber>;
76
77
  }, z.core.$strict>>;
77
78
  akinatorMemory: z.ZodPrefault<z.ZodObject<{
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/dsh/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAA;AACxE,OAAO,EAAE,oBAAoB,EAAE,CAAA;AAC/B,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAA;AACxE,OAAO,EAAE,qBAAqB,EAAE,CAAA;AAChC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAChE,OAAO,EAAE,kBAAkB,EAAE,CAAA;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EAAE,UAAU,EAAE,CAAA;AACrB,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAA;AAChE,OAAO,EAAE,gBAAgB,EAAE,CAAA;AAK3B,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;iBAqBrB,CAAA;AACF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAA;AACnD,eAAO,MAAM,gBAAgB;;kBAA6D,CAAA;AAC1F,eAAO,MAAM,kBAAkB;;;;;kBAAyG,CAAA;AACxI,eAAO,MAAM,gBAAgB;;;;;;;;;kBAMlB,CAAA;AACX,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAC/D,mEAAmE;AACnE,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAajB,CAAA;AACF,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,CAAA"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/dsh/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAA;AACxE,OAAO,EAAE,oBAAoB,EAAE,CAAA;AAC/B,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAA;AACxE,OAAO,EAAE,qBAAqB,EAAE,CAAA;AAChC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAChE,OAAO,EAAE,kBAAkB,EAAE,CAAA;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EAAE,UAAU,EAAE,CAAA;AACrB,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAA;AAChE,OAAO,EAAE,gBAAgB,EAAE,CAAA;AAK3B,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;iBAqBrB,CAAA;AACF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAA;AACnD,eAAO,MAAM,gBAAgB;;kBAA6D,CAAA;AAC1F,eAAO,MAAM,kBAAkB;;;;;kBAAyG,CAAA;AACxI,eAAO,MAAM,gBAAgB;;;;;;;;;kBAMlB,CAAA;AACX,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAC/D,mEAAmE;AACnE,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAajB,CAAA;AACF,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,CAAA"}
@@ -5,6 +5,7 @@ export declare const LispConfig: z.ZodObject<{
5
5
  timeoutMs: z.ZodDefault<z.ZodNumber>;
6
6
  startupTimeoutMs: z.ZodDefault<z.ZodNumber>;
7
7
  maxWorkers: z.ZodDefault<z.ZodNumber>;
8
+ idleTimeoutMs: z.ZodDefault<z.ZodNumber>;
8
9
  maxOutputBytes: z.ZodDefault<z.ZodNumber>;
9
10
  }, z.core.$strict>;
10
11
  export type LispConfiguration = z.infer<typeof LispConfig>;
@@ -19,7 +20,7 @@ export interface LispOwner {
19
20
  agentId: string;
20
21
  root: string;
21
22
  }
22
- export type LispState = 'DISABLED' | 'PREFLIGHT' | 'READY' | 'EVALUATING' | 'STOPPING' | 'RECOVERY_REQUIRED' | 'STOP_UNCONFIRMED';
23
+ export type LispState = 'DISABLED' | 'PREFLIGHT' | 'READY' | 'SUSPENDED' | 'EVALUATING' | 'STOPPING' | 'RECOVERY_REQUIRED' | 'STOP_UNCONFIRMED';
23
24
  export declare class LispError extends Error {
24
25
  readonly code: string;
25
26
  readonly recovery: string;
@@ -1 +1 @@
1
- {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../../src/dsh/lisp/contracts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,eAAO,MAAM,UAAU;;;;;;;kBAMZ,CAAA;AACX,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAA;AAC1D,eAAO,MAAM,UAAU,qGAAsG,CAAA;AAC7H,MAAM,MAAM,QAAQ,GAAG,OAAO,UAAU,CAAC,MAAM,CAAC,CAAA;AAChD,eAAO,MAAM,WAAW,UAAY,CAAA;AACpC,eAAO,MAAM,UAAU,QAAmB,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAC9D,eAAO,MAAM,UAAU,aAA0D,CAAA;AACjF,MAAM,WAAW,SAAS;IAAG,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AAC/E,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,WAAW,GAAG,OAAO,GAAG,YAAY,GAAG,UAAU,GAAG,mBAAmB,GAAG,kBAAkB,CAAA;AACjI,qBAAa,SAAU,SAAQ,KAAK;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM;IAAmB,QAAQ,CAAC,QAAQ;gBAAhD,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAW,QAAQ,SAAqC;CAC3G;AACD,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAK7C;AACD,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,KAAK,CAAuC;AACjG,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAItG;AACD,eAAO,MAAM,SAAS;;;;kBACyD,CAAA;AAC/E,eAAO,MAAM,eAAe;;;;;;;iCAG1B,CAAA;AACF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAA;AAC3D,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;4BAGtB,CAAA;AACF,MAAM,MAAM,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC,CAAA"}
1
+ {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../../src/dsh/lisp/contracts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,eAAO,MAAM,UAAU;;;;;;;;kBAOZ,CAAA;AACX,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAA;AAC1D,eAAO,MAAM,UAAU,qGAAsG,CAAA;AAC7H,MAAM,MAAM,QAAQ,GAAG,OAAO,UAAU,CAAC,MAAM,CAAC,CAAA;AAChD,eAAO,MAAM,WAAW,UAAY,CAAA;AACpC,eAAO,MAAM,UAAU,QAAmB,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAC9D,eAAO,MAAM,UAAU,aAA0D,CAAA;AACjF,MAAM,WAAW,SAAS;IAAG,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AAC/E,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,WAAW,GAAG,OAAO,GAAG,WAAW,GAAG,YAAY,GAAG,UAAU,GAAG,mBAAmB,GAAG,kBAAkB,CAAA;AAC/I,qBAAa,SAAU,SAAQ,KAAK;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM;IAAmB,QAAQ,CAAC,QAAQ;gBAAhD,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAW,QAAQ,SAAqC;CAC3G;AACD,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAK7C;AACD,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,KAAK,CAAuC;AACjG,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAItG;AACD,eAAO,MAAM,SAAS;;;;kBACyD,CAAA;AAC/E,eAAO,MAAM,eAAe;;;;;;;iCAG1B,CAAA;AACF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAA;AAC3D,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;4BAGtB,CAAA;AACF,MAAM,MAAM,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC,CAAA"}
@@ -5,6 +5,7 @@ export const LispConfig = z.object({
5
5
  timeoutMs: z.number().int().min(100).max(600_000).default(120_000),
6
6
  startupTimeoutMs: z.number().int().min(100).max(60_000).default(30_000),
7
7
  maxWorkers: z.number().int().min(1).max(32).default(4),
8
+ idleTimeoutMs: z.number().int().min(1000).max(3_600_000).default(300_000),
8
9
  maxOutputBytes: z.number().int().min(1024).max(8_388_608).default(8_388_608),
9
10
  }).strict();
10
11
  export const LISP_TOOLS = ['lisp_eval', 'lisp_describe', 'lisp_inspect', 'lisp_status', 'lisp_cancel', 'lisp_reset'];
@@ -1 +1 @@
1
- {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../../src/dsh/lisp/contracts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../../src/dsh/lisp/contracts.ts"],"names":[],"mappings":"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"}
@@ -26,8 +26,18 @@ export declare class LispManager {
26
26
  start(): Promise<void>;
27
27
  private entry;
28
28
  private protectedRoots;
29
- enable(owner: LispOwner): Promise<unknown>;
29
+ enable(owner: LispOwner, hostBusy?: boolean, signal?: AbortSignal): Promise<unknown>;
30
30
  private startWorker;
31
+ /** Serialize only slot allocation/eviction; compilation remains concurrent. */
32
+ private reserveSlot;
33
+ private canSuspend;
34
+ private scheduleIdle;
35
+ private suspend;
36
+ /** Normal suspension is resumable; crashes and explicit cancellation are not. */
37
+ prepare(owner: LispOwner): Promise<unknown>;
38
+ setAgentBusy(owner: LispOwner, busy: boolean): void;
39
+ /** Disposed sessions retain their fence/journal but cannot admit new work. */
40
+ disposeSession(sessionId: string): Promise<void>;
31
41
  private halted;
32
42
  private bridge;
33
43
  status(owner: LispOwner, offset?: number): Promise<unknown>;
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/dsh/lisp/manager.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAC9D,OAAO,EAA2D,KAAK,iBAAiB,EAAE,KAAK,SAAS,EAAkB,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAC/J,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAMtC,OAAO,EAAqB,KAAK,aAAa,EAAE,MAAM,SAAS,CAAA;AAI/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAG5D,MAAM,WAAW,cAAc;IAC7B,YAAY,CAAC,EAAE,eAAe,CAAA;IAC9B,KAAK,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,iBAAiB,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,SAAS,CAAC,EAAE,gBAAgB,CAAA;IACxI,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACpD,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAC9F,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAC5F,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,KAAK,eAAe,CAAA;CAC3F;AACD,wFAAwF;AACxF,qBAAa,WAAW;;IAaV,QAAQ,CAAC,OAAO,EAAE,cAAc;IAZ5C,QAAQ,CAAC,OAAO,sBAA4B;gBAYvB,OAAO,EAAE,cAAc;IAMtC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAsB5B,OAAO,CAAC,KAAK;IAQb,OAAO,CAAC,cAAc;IAChB,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;YAWlC,WAAW;IAgCzB,OAAO,CAAC,MAAM;YAKA,MAAM;IAwCd,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAe3D,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAYlE,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;YAWnG,QAAQ;YAyHR,MAAM;YAKN,MAAM;IAad,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAgBjE,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQvD,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAc5E,OAAO,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;IAO3C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAM/B"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/dsh/lisp/manager.ts"],"names":[],"mappings":"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"}
@@ -27,6 +27,7 @@ export class LispManager {
27
27
  #closed = false;
28
28
  #lock = false;
29
29
  #artifactReserved = 0;
30
+ #admissionQueue = Promise.resolve();
30
31
  #inflight = new Map();
31
32
  constructor(options) {
32
33
  this.options = options;
@@ -100,27 +101,33 @@ export class LispManager {
100
101
  return state;
101
102
  }
102
103
  protectedRoots() { return [this.options.dataRoot, dirname(this.#library), ...this.options.protectedRoots ?? []]; }
103
- async enable(owner) {
104
+ async enable(owner, hostBusy = false, signal) {
105
+ signal?.throwIfAborted();
104
106
  if (!this.#config.enabled)
105
107
  fail('LISP_DISABLED', '設定の lisp.enabled を true にしてプラグインを再読み込みしてください。');
106
108
  if (this.#closed)
107
109
  fail('HOST_STOPPED', 'プラグインが停止しています。');
108
- if (this.enabled.has(owner.sessionId))
109
- return this.status(owner);
110
+ if (this.enabled.has(owner.sessionId)) {
111
+ this.setAgentBusy(owner, hostBusy);
112
+ return this.prepare(owner);
113
+ }
110
114
  if (await realpath(owner.root) !== owner.root)
111
115
  fail('SCOPE_CONFLICT', '作業ディレクトリを確認できません。');
112
116
  // Persist the fence before starting any worker. A failed startup stays protected.
113
117
  await this.#store.enable(owner);
114
118
  this.enabled.set(owner.sessionId, owner.root);
119
+ signal?.throwIfAborted();
115
120
  const state = this.entry(owner);
121
+ state.hostBusy = hostBusy;
116
122
  await this.startWorker(state);
117
123
  return this.status(owner);
118
124
  }
119
125
  async startWorker(state) {
120
126
  if (state.admission)
121
127
  return state.admission;
122
- if ([...this.#agents.values()].filter(a => a.worker?.healthy || a.admission).length >= this.#config.maxWorkers)
123
- fail('WORKER_LIMIT', 'Lisp の同時起動数が上限です。別のセッションを停止してください。');
128
+ if (this.#closed || state.disposed)
129
+ fail('HOST_STOPPED', 'Lisp のセッションが停止しています。');
130
+ clearTimeout(state.idleTimer);
124
131
  state.state = 'PREFLIGHT';
125
132
  state.compilation = { state: 'checking' };
126
133
  const abort = new AbortController();
@@ -128,6 +135,7 @@ export class LispManager {
128
135
  const admission = (async () => {
129
136
  let worker;
130
137
  try {
138
+ await this.reserveSlot(state);
131
139
  const compiled = await this.#compiled.ensure(abort.signal, status => { state.compilation = status; });
132
140
  if (this.#closed || state.state !== 'PREFLIGHT' || abort.signal.aborted)
133
141
  fail('CANCELLED', '起動は取り消されています。');
@@ -162,8 +170,12 @@ export class LispManager {
162
170
  catch (stop) {
163
171
  error = stop;
164
172
  }
165
- ;
166
- this.halted(state, error);
173
+ if (error instanceof LispError && error.code === 'WORKER_LIMIT') {
174
+ state.state = 'SUSPENDED';
175
+ delete state.error;
176
+ }
177
+ else
178
+ this.halted(state, error);
167
179
  throw error;
168
180
  }
169
181
  })();
@@ -173,9 +185,131 @@ export class LispManager {
173
185
  }
174
186
  finally {
175
187
  delete state.admission;
188
+ delete state.slotReserved;
176
189
  state.active.delete(abort);
190
+ this.scheduleIdle(state);
191
+ }
192
+ }
193
+ /** Serialize only slot allocation/eviction; compilation remains concurrent. */
194
+ reserveSlot(state) {
195
+ const allocation = this.#admissionQueue.then(async () => {
196
+ if (this.#closed || state.disposed || state.state !== 'PREFLIGHT')
197
+ fail('CANCELLED', 'Lisp の起動を取り消しました。');
198
+ const occupied = () => [...this.#agents.values()].filter(a => a.slotReserved || (a.worker && !a.worker.stopped)).length;
199
+ if (occupied() >= this.#config.maxWorkers) {
200
+ const candidates = [...this.#agents.values()].filter(a => a !== state && this.canSuspend(a)).sort((a, b) => (a.idleSince ?? 0) - (b.idleSince ?? 0));
201
+ for (const candidate of candidates) {
202
+ await this.suspend(candidate);
203
+ if (occupied() < this.#config.maxWorkers)
204
+ break;
205
+ }
206
+ }
207
+ if (occupied() >= this.#config.maxWorkers)
208
+ throw new LispError('WORKER_LIMIT', 'Lisp の起動枠はすべて使用中です。待機中の Lisp は自動で停止します。', '実行中の処理が終わってから、もう一度依頼してください。');
209
+ if (this.#closed || state.disposed || state.state !== 'PREFLIGHT')
210
+ fail('CANCELLED', 'Lisp の起動を取り消しました。');
211
+ state.slotReserved = true;
212
+ });
213
+ this.#admissionQueue = allocation.catch(() => { });
214
+ return allocation;
215
+ }
216
+ canSuspend(state) {
217
+ return !this.#closed && !state.disposed && state.state === 'READY' && !state.hostBusy && !state.admission && state.active.size === 0
218
+ && Boolean(state.worker?.healthy) && !state.worker?.hasRunningJobs;
219
+ }
220
+ scheduleIdle(state) {
221
+ clearTimeout(state.idleTimer);
222
+ if (this.#closed || state.disposed || state.state !== 'READY' || state.hostBusy || state.admission || state.active.size)
223
+ return;
224
+ state.idleSince = Date.now();
225
+ state.idleTimer = setTimeout(() => {
226
+ void this.suspend(state).then(() => {
227
+ // A background job can outlive the last evaluation. Recheck after it ends.
228
+ if (state.state === 'READY')
229
+ this.scheduleIdle(state);
230
+ }).catch(error => this.halted(state, error));
231
+ }, this.#config.idleTimeoutMs);
232
+ state.idleTimer.unref();
233
+ }
234
+ async suspend(state) {
235
+ if (!this.canSuspend(state))
236
+ return;
237
+ clearTimeout(state.idleTimer);
238
+ state.state = 'STOPPING'; // claim before awaiting the journal or process exit
239
+ const suspension = (async () => {
240
+ try {
241
+ const pending = (await this.#store.operations(state.owner.sessionId)).some(o => ['RUNNING', 'APPLYING', 'UNKNOWN', 'AWAITING_APPROVAL'].includes(o.state));
242
+ if (pending) {
243
+ state.state = 'READY';
244
+ return;
245
+ }
246
+ await state.worker.stop();
247
+ state.state = 'SUSPENDED';
248
+ delete state.error;
249
+ delete state.worker;
250
+ }
251
+ catch (error) {
252
+ this.halted(state, error);
253
+ throw error;
254
+ }
255
+ })();
256
+ state.suspension = suspension;
257
+ try {
258
+ await suspension;
259
+ }
260
+ finally {
261
+ delete state.suspension;
177
262
  }
178
263
  }
264
+ /** Normal suspension is resumable; crashes and explicit cancellation are not. */
265
+ async prepare(owner) {
266
+ const state = this.entry(owner);
267
+ if (state.suspension)
268
+ await state.suspension;
269
+ if (state.state === 'SUSPENDED') {
270
+ await this.startWorker(state);
271
+ state.resumed = true;
272
+ }
273
+ else if (state.admission)
274
+ await state.admission;
275
+ return this.status(owner);
276
+ }
277
+ setAgentBusy(owner, busy) {
278
+ if (!this.enabled.has(owner.sessionId))
279
+ return;
280
+ const state = this.entry(owner);
281
+ if (state.hostBusy === busy)
282
+ return;
283
+ state.hostBusy = busy;
284
+ if (busy)
285
+ clearTimeout(state.idleTimer);
286
+ else
287
+ this.scheduleIdle(state);
288
+ }
289
+ /** Disposed sessions retain their fence/journal but cannot admit new work. */
290
+ async disposeSession(sessionId) {
291
+ const states = [...this.#agents.values()].filter(state => state.owner.sessionId === sessionId);
292
+ const resumable = states.filter(state => state.state === 'READY' || state.state === 'SUSPENDED');
293
+ for (const state of states) {
294
+ state.disposed = true;
295
+ clearTimeout(state.idleTimer);
296
+ }
297
+ const stopped = await Promise.allSettled(states.map(state => this.cancel(state)));
298
+ await Promise.allSettled([...this.#executions].filter(([, session]) => session === sessionId).map(([promise]) => promise));
299
+ const pending = (await this.#store.operations(sessionId)).some(o => ['RUNNING', 'APPLYING', 'UNKNOWN', 'AWAITING_APPROVAL'].includes(o.state));
300
+ for (const state of states) {
301
+ state.hostBusy = false;
302
+ state.disposed = false;
303
+ if (!pending && resumable.includes(state) && state.state === 'RECOVERY_REQUIRED' && state.worker?.stopped !== false) {
304
+ state.state = 'SUSPENDED';
305
+ delete state.worker;
306
+ delete state.error;
307
+ }
308
+ }
309
+ const failed = stopped.find(result => result.status === 'rejected');
310
+ if (failed?.status === 'rejected')
311
+ throw failed.reason;
312
+ }
179
313
  halted(state, error) {
180
314
  state.error = failure(error);
181
315
  state.state = state.error.code === 'STOP_UNCONFIRMED' ? 'STOP_UNCONFIRMED' : 'RECOVERY_REQUIRED';
@@ -251,12 +385,12 @@ export class LispManager {
251
385
  const pending = operations.filter(o => ['RUNNING', 'UNKNOWN', 'APPLYING', 'AWAITING_APPROVAL'].includes(o.state));
252
386
  return { enabled: true, state: state.state, generation: state.worker?.generation ?? null, error: state.error ?? null,
253
387
  jobs: state.worker?.jobStatus() ?? [],
254
- compilation: state.compilation ?? null,
255
- limits: { timeoutMs: this.#config.timeoutMs, maxOutputBytes: this.#config.maxOutputBytes, maxWorkers: this.#config.maxWorkers,
388
+ compilation: state.compilation ?? null, resumed: state.resumed ?? false,
389
+ limits: { timeoutMs: this.#config.timeoutMs, maxOutputBytes: this.#config.maxOutputBytes, maxWorkers: this.#config.maxWorkers, idleTimeoutMs: this.#config.idleTimeoutMs,
256
390
  aggregateMemory: 'unavailable', aggregateCpu: 'unavailable', scratchQuota: 'unavailable', termination: 'supervised', fileBoundary: process.platform === 'darwin' ? 'seatbelt' : 'bubblewrap' },
257
391
  operations: offset === undefined ? operations : operations.slice(offset, offset + 10),
258
392
  ...(offset === undefined ? {} : { operationCount: operations.length, pendingCount: pending.length, pendingStates: Object.fromEntries([...new Set(pending.map(o => o.state))].map(state => [state, pending.filter(o => o.state === state).length])), offset, nextOffset: offset + 10 < operations.length ? offset + 10 : null }),
259
- recovery: state.state === 'READY' ? null : '停止理由と操作履歴を確認し、/kioku-lisp recover を実行してください。' };
393
+ recovery: state.state === 'SUSPENDED' ? 'Lisp は休止中です。次の利用時に自動起動します。変数・関数定義は保持されません。' : state.state === 'READY' ? null : '停止理由と操作履歴を確認し、/kioku-lisp recover を実行してください。' };
260
394
  }
261
395
  async diagnostics(owner, id) {
262
396
  this.entry(owner);
@@ -280,8 +414,13 @@ export class LispManager {
280
414
  this.#inflight.set(key, hash);
281
415
  const result = this.dispatch(owner, tool, input, signal);
282
416
  this.#executions.set(result, owner.sessionId);
283
- const finished = () => { this.#executions.delete(result); if (key)
284
- this.#inflight.delete(key); };
417
+ const finished = () => {
418
+ this.#executions.delete(result);
419
+ if (key)
420
+ this.#inflight.delete(key);
421
+ if (tool !== 'lisp_status' && this.enabled.has(owner.sessionId))
422
+ this.scheduleIdle(this.entry(owner));
423
+ };
285
424
  void result.then(finished, finished);
286
425
  return result;
287
426
  }
@@ -327,8 +466,8 @@ export class LispManager {
327
466
  await this.cancel(state);
328
467
  return { ok: true, state: state.state };
329
468
  }
330
- if (this.#closed)
331
- fail('HOST_STOPPED', 'Lisp のホストが停止しています。');
469
+ if (this.#closed || state.disposed)
470
+ fail('HOST_STOPPED', 'Lisp のホストまたはセッションが停止しています。');
332
471
  const id = identifier.parse(input.operationId);
333
472
  const hash = digest({ tool, input });
334
473
  const old = await this.#store.get(owner, id);
@@ -337,6 +476,13 @@ export class LispManager {
337
476
  fail('ID_CONFLICT', '同じ操作 ID の内容を変えることはできません。');
338
477
  return await this.replay(owner, old);
339
478
  }
479
+ if (state.suspension || state.state === 'SUSPENDED') {
480
+ const prepared = await this.prepare(owner);
481
+ if (prepared.state !== 'READY')
482
+ fail('RECOVERY_REQUIRED', 'Lisp の停止状態を確認してください。');
483
+ return { ok: false, code: 'WORKER_RESUMED', generation: state.worker?.generation, executed: false,
484
+ message: '休止中の Lisp を自動起動しました。以前の変数・関数・参照は失われています。必要な定義を作り直してから実行してください。この要求のコードは実行していません。過去の副作用を再実行しないでください。' };
485
+ }
340
486
  if (tool === 'lisp_reset') {
341
487
  if (state.state !== 'READY')
342
488
  fail('RECOVERY_REQUIRED', '異常停止からの再開には /kioku-lisp recover を使ってください。');
@@ -474,6 +620,9 @@ export class LispManager {
474
620
  result: await recordedResult(this.#store, owner, old), recovery: ['RUNNING', 'UNKNOWN'].includes(old.state) ? '/kioku-lisp status で確認してください。自動再実行はしません。' : null };
475
621
  }
476
622
  async cancel(state) {
623
+ clearTimeout(state.idleTimer);
624
+ if (state.suspension)
625
+ await state.suspension;
477
626
  state.state = 'STOPPING';
478
627
  for (const abort of state.active)
479
628
  abort.abort(new LispError('CANCELLED', 'Lisp の処理を取り消しました。'));
@@ -553,6 +702,9 @@ export class LispManager {
553
702
  fail('RECOVERY_REQUIRED', '未確定の処理を /kioku-lisp recover で確認してから解除してください。');
554
703
  await this.#store.disable(owner.sessionId);
555
704
  this.enabled.delete(owner.sessionId);
705
+ for (const [key, state] of this.#agents)
706
+ if (state.owner.sessionId === owner.sessionId)
707
+ this.#agents.delete(key);
556
708
  return { ok: true, state: 'DISABLED' };
557
709
  }
558
710
  async dispose() {