kiokuko-dsh 0.1.29 → 0.1.30

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 (79) hide show
  1. package/README.ja.md +2 -0
  2. package/README.ko.md +2 -0
  3. package/README.md +2 -0
  4. package/README.zh-CN.md +2 -0
  5. package/dist/dsh/config.d.ts +22 -0
  6. package/dist/dsh/config.d.ts.map +1 -1
  7. package/dist/dsh/config.js +2 -0
  8. package/dist/dsh/config.js.map +1 -1
  9. package/dist/dsh/enno-delegation.d.ts +52 -0
  10. package/dist/dsh/enno-delegation.d.ts.map +1 -0
  11. package/dist/dsh/enno-delegation.js +194 -0
  12. package/dist/dsh/enno-delegation.js.map +1 -0
  13. package/dist/dsh/execution-selection.d.ts +145 -0
  14. package/dist/dsh/execution-selection.d.ts.map +1 -0
  15. package/dist/dsh/execution-selection.js +45 -0
  16. package/dist/dsh/execution-selection.js.map +1 -0
  17. package/dist/dsh/host-adapter.d.ts +3 -0
  18. package/dist/dsh/host-adapter.d.ts.map +1 -1
  19. package/dist/dsh/host-adapter.js +242 -14
  20. package/dist/dsh/host-adapter.js.map +1 -1
  21. package/dist/dsh/index.js +1 -1
  22. package/dist/dsh/index.js.map +1 -1
  23. package/dist/dsh/input-claim.d.ts +4 -0
  24. package/dist/dsh/input-claim.d.ts.map +1 -1
  25. package/dist/dsh/input-claim.js +11 -0
  26. package/dist/dsh/input-claim.js.map +1 -1
  27. package/dist/dsh/intake-gate.d.ts +2 -1
  28. package/dist/dsh/intake-gate.d.ts.map +1 -1
  29. package/dist/dsh/intake-gate.js +4 -1
  30. package/dist/dsh/intake-gate.js.map +1 -1
  31. package/dist/dsh/model-configuration.d.ts +189 -0
  32. package/dist/dsh/model-configuration.d.ts.map +1 -0
  33. package/dist/dsh/model-configuration.js +96 -0
  34. package/dist/dsh/model-configuration.js.map +1 -0
  35. package/dist/dsh/model-routing.d.ts +23 -0
  36. package/dist/dsh/model-routing.d.ts.map +1 -0
  37. package/dist/dsh/model-routing.js +61 -0
  38. package/dist/dsh/model-routing.js.map +1 -0
  39. package/dist/dsh/model-selection-ui.d.ts +21 -0
  40. package/dist/dsh/model-selection-ui.d.ts.map +1 -0
  41. package/dist/dsh/model-selection-ui.js +251 -0
  42. package/dist/dsh/model-selection-ui.js.map +1 -0
  43. package/dist/dsh/standard-skills.d.ts +1 -1
  44. package/dist/dsh/standard-skills.d.ts.map +1 -1
  45. package/dist/dsh/standard-skills.js +1 -1
  46. package/dist/dsh/standard-skills.js.map +1 -1
  47. package/dist/dsh/task-intake.d.ts +2 -0
  48. package/dist/dsh/task-intake.d.ts.map +1 -1
  49. package/dist/dsh/task-intake.js +6 -1
  50. package/dist/dsh/task-intake.js.map +1 -1
  51. package/dist/dsh/tool-policy.d.ts +2 -2
  52. package/dist/dsh/tool-policy.d.ts.map +1 -1
  53. package/dist/dsh/tool-policy.js +4 -3
  54. package/dist/dsh/tool-policy.js.map +1 -1
  55. package/dist/dsh/tools.d.ts +2 -2
  56. package/dist/dsh/tools.d.ts.map +1 -1
  57. package/dist/dsh/tools.js +4 -1
  58. package/dist/dsh/tools.js.map +1 -1
  59. package/dist/enno-oduno/schemas.d.ts +14 -14
  60. package/dist/enno-oduno/service.d.ts.map +1 -1
  61. package/dist/enno-oduno/service.js +4 -0
  62. package/dist/enno-oduno/service.js.map +1 -1
  63. package/dist/enno-oduno/validation-errors.d.ts +1 -1
  64. package/dist/model-tools/contracts.d.ts +20 -3
  65. package/dist/model-tools/contracts.d.ts.map +1 -1
  66. package/dist/model-tools/contracts.js +6 -0
  67. package/dist/model-tools/contracts.js.map +1 -1
  68. package/docs/README.ja.md +2 -0
  69. package/docs/README.md +2 -0
  70. package/docs/architecture.md +1 -1
  71. package/docs/dsh-plugin.md +1 -1
  72. package/docs/enno-oduno.md +3 -1
  73. package/docs/model-selection.ja.md +101 -0
  74. package/docs/model-selection.md +68 -0
  75. package/dsh/cordis.patch.yml +1 -1
  76. package/migrations/009_dsh_execution_selection.sql +21 -0
  77. package/package.json +1 -1
  78. package/skills/kiokuko-enno-oduno/SKILL.md +1 -1
  79. package/skills/kiokuko-soul/SKILL.md +23 -4
package/README.ja.md CHANGED
@@ -5,6 +5,8 @@
5
5
  [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) に、プロジェクトの記憶・作業計画・検証支援を追加するプラグインです。
6
6
  任意の OrcaReplay 記録を有効にすると、モデル・ツールの動作確認と HTML 出力もできます。
7
7
 
8
+
9
+ 新しい変更作業では、通常実行か役小角(enno-oduno)を選べます。役小角ではおすすめテンプレート、またはDSH設定済みモデルから役割ごとの構成を選択します。[モデル選択と接続上の制約](docs/model-selection.ja.md)
8
10
  ## 導入と使い方
9
11
 
10
12
  対応 DSH: `0.1.2-rc.1` / [0.1.3-alpha.1](https://github.com/deepseek-ai/deepseek-harness/releases/tag/dsh-v0.1.3-alpha.1)。
package/README.ko.md CHANGED
@@ -5,6 +5,8 @@
5
5
  [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness)에 프로젝트 기억, 작업 계획, 검증 지원을 추가합니다.
6
6
  선택 기능인 OrcaReplay 기록을 켜면 모델과 도구의 동작을 확인하고 HTML로 내보낼 수 있습니다.
7
7
 
8
+
9
+ 새 변경 작업에서는 일반 실행 또는 役小角(enno-oduno)를 선택할 수 있습니다. 역할별 모델은 추천 템플릿이나 DSH에 설정된 모델에서 선택합니다. [모델 선택과 연결 제한](docs/model-selection.md).
8
10
  ## 설치 및 사용
9
11
 
10
12
  DSH `0.1.2-rc.1`과 [0.1.3-alpha.1](https://github.com/deepseek-ai/deepseek-harness/releases/tag/dsh-v0.1.3-alpha.1)을 지원합니다.
package/README.md CHANGED
@@ -6,6 +6,8 @@ Kiokuko adds project memory, planning, and verification support to
6
6
  [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness).
7
7
  Optional OrcaReplay recording lets you inspect model/tool activity and export HTML.
8
8
 
9
+
10
+ For new coding tasks, choose normal execution or 役小角(enno-oduno). Enno offers model templates and role assignments from configured DSH models. [Model selection and connection limits](docs/model-selection.md).
9
11
  ## Install and use
10
12
 
11
13
  Supports DSH `0.1.2-rc.1` and [0.1.3-alpha.1](https://github.com/deepseek-ai/deepseek-harness/releases/tag/dsh-v0.1.3-alpha.1).
package/README.zh-CN.md CHANGED
@@ -5,6 +5,8 @@
5
5
  为 [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) 添加项目记忆、任务规划和验证支持。
6
6
  可选的 OrcaReplay 记录功能可用于查看模型和工具活动,并导出 HTML。
7
7
 
8
+
9
+ 新的修改任务可以选择普通执行或役小角(enno-oduno)。役小角支持推荐模板,也可从DSH已配置的模型中为各角色选择模型。[模型选择与连接限制](docs/model-selection.md)。
8
10
  ## 安装与使用
9
11
 
10
12
  支持 DSH `0.1.2-rc.1` 和 [0.1.3-alpha.1](https://github.com/deepseek-ai/deepseek-harness/releases/tag/dsh-v0.1.3-alpha.1)。
@@ -29,6 +29,28 @@ export type OrcaConfig = z.infer<typeof OrcaConfig>;
29
29
  /** Runtime configuration accepted by the dsh bundle entrypoint. */
30
30
  export declare const Config: z.ZodObject<{
31
31
  enabled: z.ZodDefault<z.ZodBoolean>;
32
+ modelRoutes: z.ZodDefault<z.ZodArray<z.ZodObject<{
33
+ provider: z.ZodString;
34
+ family: z.ZodEnum<{
35
+ openai: "openai";
36
+ "opencode-go": "opencode-go";
37
+ "opencode-zen": "opencode-zen";
38
+ openrouter: "openrouter";
39
+ ollama: "ollama";
40
+ other: "other";
41
+ }>;
42
+ connection: z.ZodDefault<z.ZodEnum<{
43
+ api: "api";
44
+ codex: "codex";
45
+ local: "local";
46
+ }>>;
47
+ protocol: z.ZodDefault<z.ZodEnum<{
48
+ responses: "responses";
49
+ "chat-completions": "chat-completions";
50
+ messages: "messages";
51
+ unknown: "unknown";
52
+ }>>;
53
+ }, z.core.$strict>>>;
32
54
  orca: z.ZodPrefault<z.ZodObject<{
33
55
  enabled: z.ZodDefault<z.ZodBoolean>;
34
56
  storage: z.ZodDefault<z.ZodEnum<{
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/dsh/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;iBAmBrB,CAAA;AACF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAA;AACnD,mEAAmE;AACnE,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAGjB,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,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;iBAmBrB,CAAA;AACF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAA;AACnD,mEAAmE;AACnE,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAIjB,CAAA;AACF,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,CAAA"}
@@ -1,4 +1,5 @@
1
1
  import { z } from 'zod';
2
+ import { ModelRouteSchema } from './model-configuration.js';
2
3
  const limit = (value) => z.number().int().positive().max(Number.MAX_SAFE_INTEGER).default(value);
3
4
  export const OrcaConfig = z.object({
4
5
  enabled: z.boolean().default(false),
@@ -23,6 +24,7 @@ export const OrcaConfig = z.object({
23
24
  /** Runtime configuration accepted by the dsh bundle entrypoint. */
24
25
  export const Config = z.object({
25
26
  enabled: z.boolean().default(true),
27
+ modelRoutes: z.array(ModelRouteSchema).max(128).default([]).refine(routes => new Set(routes.map(r => r.provider)).size === routes.length, 'Each DSH provider must have one route declaration'),
26
28
  orca: OrcaConfig.prefault({}),
27
29
  });
28
30
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/dsh/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,MAAM,KAAK,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AACxG,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACnC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;IAC3D,gBAAgB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAC5C,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QAChB,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;QAC7D,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;KACtC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;IACf,sBAAsB,EAAE,KAAK,CAAC,SAAS,CAAC;IACxC,mBAAmB,EAAE,KAAK,CAAC,UAAU,CAAC;IACtC,aAAa,EAAE,KAAK,CAAC,WAAW,CAAC;IACjC,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC;IACxB,wBAAwB,EAAE,KAAK,CAAC,GAAG,CAAC;IACpC,2BAA2B,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7C,sBAAsB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IACtF,uBAAuB,EAAE,KAAK,CAAC,SAAS,CAAC;IACzC,mBAAmB,EAAE,KAAK,CAAC,MAAM,CAAC;IAClC,0BAA0B,EAAE,KAAK,CAAC,MAAM,CAAC;IACzC,wBAAwB,EAAE,KAAK,CAAC,UAAU,CAAC;CAC5C,CAAC,CAAA;AAEF,mEAAmE;AACnE,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAClC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;CAC9B,CAAC,CAAA"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/dsh/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAE3D,MAAM,KAAK,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AACxG,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACnC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;IAC3D,gBAAgB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAC5C,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QAChB,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;QAC7D,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;KACtC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;IACf,sBAAsB,EAAE,KAAK,CAAC,SAAS,CAAC;IACxC,mBAAmB,EAAE,KAAK,CAAC,UAAU,CAAC;IACtC,aAAa,EAAE,KAAK,CAAC,WAAW,CAAC;IACjC,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC;IACxB,wBAAwB,EAAE,KAAK,CAAC,GAAG,CAAC;IACpC,2BAA2B,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7C,sBAAsB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IACtF,uBAAuB,EAAE,KAAK,CAAC,SAAS,CAAC;IACzC,mBAAmB,EAAE,KAAK,CAAC,MAAM,CAAC;IAClC,0BAA0B,EAAE,KAAK,CAAC,MAAM,CAAC;IACzC,wBAAwB,EAAE,KAAK,CAAC,UAAU,CAAC;CAC5C,CAAC,CAAA;AAEF,mEAAmE;AACnE,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAClC,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,EAAE,mDAAmD,CAAC;IAC9L,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;CAC9B,CAAC,CAAA"}
@@ -0,0 +1,52 @@
1
+ import { type ModelBinding } from './model-configuration.js';
2
+ import type { RoutableAgent } from './model-routing.js';
3
+ import type { DshRuntime } from './runtime.js';
4
+ import type { DshToolHostBinding } from './tools.js';
5
+ export interface DshSpawnBackend {
6
+ start(name: 'spawn', request: {
7
+ parent: RoutableAgent;
8
+ prompt: {
9
+ type: 'text';
10
+ text: string;
11
+ }[];
12
+ signal: AbortSignal;
13
+ agentOptions: ModelBinding;
14
+ maxDepth: number;
15
+ toolFilter: {
16
+ allow: readonly string[];
17
+ };
18
+ label: string;
19
+ }): Promise<{
20
+ readonly id: string;
21
+ readonly localAgent?: RoutableAgent;
22
+ result: Promise<{
23
+ output: unknown;
24
+ stopReason: string;
25
+ }>;
26
+ dispose(): Promise<void>;
27
+ }>;
28
+ }
29
+ /** Child shells/custom execution tools cannot enforce a WorkUnit file boundary.
30
+ * The Goki head owns commands and final focused verification in this version. */
31
+ export declare function childFileScopeDenial(root: string, scope: readonly string[], name: string, args: unknown): string | undefined;
32
+ export declare class DshEnnoDelegation {
33
+ #private;
34
+ private readonly runtime;
35
+ private readonly backend;
36
+ constructor(runtime: Pick<DshRuntime, 'withDatabase'>, backend: DshSpawnBackend | undefined);
37
+ /** Called synchronously at agent/created, before session-start and followup. */
38
+ created(agent: RoutableAgent): void;
39
+ model(agent: object): ModelBinding | undefined;
40
+ isChild(agent: object): boolean;
41
+ parent(agent: object): RoutableAgent | undefined;
42
+ allows(agent: object, tool: string): boolean;
43
+ toolDenial(agent: object, name: string, args: unknown): string | undefined;
44
+ /** Durable ownership is checked again before every child request and tool,
45
+ * including after reload. Completing or replacing a lease revokes the child. */
46
+ assertCurrent(agent: object): Promise<void>;
47
+ /** Persist the created binding before the child's first request; restore only
48
+ * by its exact durable child id, never by origin/parent metadata alone. */
49
+ restoreOrPersist(agent: RoutableAgent): Promise<ModelBinding | undefined>;
50
+ execute(parent: RoutableAgent, args: unknown, binding: DshToolHostBinding, toolNames: readonly string[], signal: AbortSignal): Promise<unknown>;
51
+ }
52
+ //# sourceMappingURL=enno-delegation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enno-delegation.d.ts","sourceRoot":"","sources":["../../src/dsh/enno-delegation.ts"],"names":[],"mappings":"AAOA,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAChF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAKpD,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE;QAC5B,MAAM,EAAE,aAAa,CAAC;QAAC,MAAM,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;QAAC,MAAM,EAAE,WAAW,CAAC;QACrF,YAAY,EAAE,YAAY,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE;YAAE,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;SAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;KACvG,GAAG,OAAO,CAAC;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC;YAAE,MAAM,EAAE,OAAO,CAAC;YAAC,UAAU,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,CAAC,CAAA;CAC9J;AAGD;iFACiF;AACjF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAmB5H;AAMD,qBAAa,iBAAiB;;IAGhB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAAoC,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAnE,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,EAAmB,OAAO,EAAE,eAAe,GAAG,SAAS;IAC7H,gFAAgF;IAChF,OAAO,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAMnC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAC9C,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAC/B,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAChD,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAC5C,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS;IAM1E;oFACgF;IAC1E,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAajD;+EAC2E;IACrE,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IAezE,OAAO,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,SAAS,MAAM,EAAE,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;CAuDtJ"}
@@ -0,0 +1,194 @@
1
+ import { AsyncLocalStorage } from 'node:async_hooks';
2
+ import { realpathSync } from 'node:fs';
3
+ import path from 'node:path';
4
+ import { z } from 'zod';
5
+ import { canonicalContentHash } from '../serialization/validate.js';
6
+ import { KiokukoError } from '../errors.js';
7
+ import { findSecretInValue } from '../memory/secrets.js';
8
+ import { ModelBindingSchema } from './model-configuration.js';
9
+ import { assertExecutionLeaseInTransaction, readEnnoSnapshot } from '../enno-oduno/store.js';
10
+ import { readExecutionSelection } from './execution-selection.js';
11
+ import { withImmediateTransaction } from '../db/transaction.js';
12
+ const CHILD_FILE_TOOLS = new Set(['read', 'write', 'edit', 'multiedit', 'str_replace_editor', 'glob', 'grep', 'skill']);
13
+ /** Child shells/custom execution tools cannot enforce a WorkUnit file boundary.
14
+ * The Goki head owns commands and final focused verification in this version. */
15
+ export function childFileScopeDenial(root, scope, name, args) {
16
+ if (!CHILD_FILE_TOOLS.has(name))
17
+ return 'Goki children use scoped file tools; the head runs commands and verifiers';
18
+ if (!args || typeof args !== 'object' || Array.isArray(args))
19
+ return 'Invalid child tool arguments';
20
+ const fields = args;
21
+ const supplied = fields.file_path ?? fields.filePath ?? fields.path;
22
+ if (name === 'skill')
23
+ return undefined;
24
+ if (typeof supplied !== 'string')
25
+ return ['glob', 'grep'].includes(name) ? undefined : 'A child file operation requires an explicit repository path';
26
+ const absolute = path.resolve(root, supplied);
27
+ let ancestor = absolute;
28
+ let canonicalTarget = absolute;
29
+ while (true) {
30
+ try {
31
+ const canonical = realpathSync(ancestor);
32
+ const relative = path.relative(root, canonical);
33
+ if (relative === '..' || relative.startsWith(`..${path.sep}`) || path.isAbsolute(relative))
34
+ return 'Child path leaves the canonical repository';
35
+ canonicalTarget = path.resolve(canonical, path.relative(ancestor, absolute));
36
+ break;
37
+ }
38
+ catch (error) {
39
+ if (error.code !== 'ENOENT')
40
+ return 'Cannot verify the child path';
41
+ const parent = path.dirname(ancestor);
42
+ if (parent === ancestor)
43
+ return 'Cannot verify the child path';
44
+ ancestor = parent;
45
+ }
46
+ }
47
+ const relative = path.relative(root, absolute);
48
+ if (relative === '..' || relative.startsWith(`..${path.sep}`) || path.isAbsolute(relative))
49
+ return 'Child path leaves the canonical repository';
50
+ const mutating = ['write', 'edit', 'multiedit'].includes(name) || name === 'str_replace_editor' && fields.command !== 'view';
51
+ if (mutating && ![relative, path.relative(root, canonicalTarget)].every(target => scope.some(entry => entry === '.' || target === entry || target.startsWith(`${entry}${path.sep}`) || path.matchesGlob(target, entry))))
52
+ return 'Child mutation is outside the approved WorkUnit scope';
53
+ return undefined;
54
+ }
55
+ const instructionSchema = z.object({ instruction: z.string().trim().min(1).max(16_384) }).strict();
56
+ const authoritySchema = z.object({
57
+ runId: z.string(), workspace: z.string(), orchestrationId: z.string(),
58
+ revision: z.number().int(), routeEpoch: z.number().int(), leaseToken: z.string(), workUnitId: z.string(),
59
+ }).strict();
60
+ export class DshEnnoDelegation {
61
+ runtime;
62
+ backend;
63
+ #pending = new AsyncLocalStorage();
64
+ #children = new WeakMap();
65
+ constructor(runtime, backend) {
66
+ this.runtime = runtime;
67
+ this.backend = backend;
68
+ }
69
+ /** Called synchronously at agent/created, before session-start and followup. */
70
+ created(agent) {
71
+ const binding = this.#pending.getStore();
72
+ if (!binding || binding.child)
73
+ return;
74
+ binding.child = agent;
75
+ this.#children.set(agent, binding);
76
+ }
77
+ model(agent) { return this.#children.get(agent)?.model; }
78
+ isChild(agent) { return this.#children.has(agent); }
79
+ parent(agent) { return this.#children.get(agent)?.parent; }
80
+ allows(agent, tool) { return this.#children.get(agent)?.toolNames.includes(tool) ?? true; }
81
+ toolDenial(agent, name, args) {
82
+ const binding = this.#children.get(agent);
83
+ if (!binding)
84
+ return undefined;
85
+ if (!binding.toolNames.includes(name))
86
+ return 'Tool is outside the delegated scope';
87
+ return childFileScopeDenial(binding.root, binding.scope, name, args);
88
+ }
89
+ /** Durable ownership is checked again before every child request and tool,
90
+ * including after reload. Completing or replacing a lease revokes the child. */
91
+ async assertCurrent(agent) {
92
+ const binding = this.#children.get(agent);
93
+ if (!binding)
94
+ return;
95
+ await this.runtime.withDatabase(db => {
96
+ const row = db.prepare('SELECT authority_json, status FROM dsh_enno_delegations WHERE delegation_id = ?')
97
+ .get(binding.delegationId);
98
+ if (!row || row.status !== 'started')
99
+ throw new KiokukoError('CONFLICT', 'The delegated execution is no longer active');
100
+ const authority = authoritySchema.parse(JSON.parse(row.authority_json));
101
+ const snapshot = readEnnoSnapshot(db, authority);
102
+ if (snapshot.status !== 'goki_executing' || snapshot.revision !== authority.revision || snapshot.dshSessionId !== binding.parentSessionId)
103
+ throw new KiokukoError('CONFLICT', 'The delegated WorkUnit authority is stale');
104
+ assertExecutionLeaseInTransaction(db, snapshot, authority);
105
+ });
106
+ }
107
+ /** Persist the created binding before the child's first request; restore only
108
+ * by its exact durable child id, never by origin/parent metadata alone. */
109
+ async restoreOrPersist(agent) {
110
+ const live = this.#children.get(agent);
111
+ if (live) {
112
+ await this.runtime.withDatabase(db => db.prepare('UPDATE dsh_enno_delegations SET child_session_id = ? WHERE delegation_id = ? AND (child_session_id IS NULL OR child_session_id = ?)')
113
+ .run(agent.session?.id ?? agent.id, live.delegationId, agent.session?.id ?? agent.id));
114
+ return live.model;
115
+ }
116
+ const stored = await this.runtime.withDatabase(db => db.prepare('SELECT delegation_id, parent_session_id, model_json, tools_json, repository_root, scope_json FROM dsh_enno_delegations WHERE child_session_id = ?')
117
+ .get(agent.session?.id ?? agent.id));
118
+ if (!stored)
119
+ return undefined;
120
+ const model = ModelBindingSchema.parse(JSON.parse(stored.model_json));
121
+ const toolNames = z.array(z.string()).parse(JSON.parse(stored.tools_json));
122
+ this.#children.set(agent, { model, toolNames, root: stored.repository_root, scope: z.array(z.string()).parse(JSON.parse(stored.scope_json)), delegationId: stored.delegation_id, parentSessionId: stored.parent_session_id, child: agent });
123
+ return model;
124
+ }
125
+ async execute(parent, args, binding, toolNames, signal) {
126
+ const input = instructionSchema.parse(args);
127
+ const allowedTools = toolNames.filter(name => CHILD_FILE_TOOLS.has(name));
128
+ if (this.isChild(parent) || !this.backend)
129
+ throw new KiokukoError('SERVICE_UNAVAILABLE', 'Native spawn delegation is unavailable; grandchildren are prohibited');
130
+ const admitted = await this.runtime.withDatabase(db => withImmediateTransaction(db, () => {
131
+ const snapshot = readEnnoSnapshot(db, binding);
132
+ if (snapshot.status !== 'goki_executing' || snapshot.revision !== binding.revision || snapshot.dshSessionId !== parent.session?.id || !binding.workUnitId || !binding.leaseToken)
133
+ throw new KiokukoError('CONFLICT', 'Delegation requires the current approved WorkUnit');
134
+ assertExecutionLeaseInTransaction(db, snapshot, { workUnitId: binding.workUnitId, leaseToken: binding.leaseToken, routeEpoch: binding.routeEpoch });
135
+ const selection = readExecutionSelection(db, binding.runId)?.value;
136
+ if (selection?.mode !== 'enno' || selection.status !== 'ready' || !selection.configuration)
137
+ throw new KiokukoError('CONFLICT', 'Choose the worker model before delegation');
138
+ const unit = snapshot.workUnits.find(u => u.workUnit.id === binding.workUnitId)?.workUnit;
139
+ if (!unit)
140
+ throw new KiokukoError('CONFLICT', 'WorkUnit is unavailable');
141
+ const digest = canonicalContentHash({ input, revision: binding.revision, workUnit: unit, model: selection.configuration.roles.worker });
142
+ const previous = db.prepare('SELECT input_digest, status, result_json FROM dsh_enno_delegations WHERE delegation_id = ?')
143
+ .get(binding.idempotencyKey);
144
+ if (previous) {
145
+ if (previous.input_digest !== digest)
146
+ throw new KiokukoError('CONFLICT', 'Delegation input changed under the same call identity');
147
+ if (previous.status === 'completed' && previous.result_json)
148
+ return { replay: JSON.parse(previous.result_json) };
149
+ throw new KiokukoError('CONFLICT', 'A previous delegation may have executed; inspect its child evidence before issuing new work');
150
+ }
151
+ const active = db.prepare("SELECT COUNT(*) AS count FROM dsh_enno_delegations WHERE run_id = ? AND status = 'started'").get(binding.runId)?.count ?? 0;
152
+ if (active >= selection.configuration.maxConcurrentChildren)
153
+ throw new KiokukoError('CONFLICT', 'Child concurrency limit reached; wait for or inspect the existing child');
154
+ const authority = authoritySchema.parse({ runId: binding.runId, workspace: binding.workspace, orchestrationId: binding.orchestrationId, revision: binding.revision, routeEpoch: binding.routeEpoch, leaseToken: binding.leaseToken, workUnitId: binding.workUnitId });
155
+ db.prepare("INSERT INTO dsh_enno_delegations (delegation_id, run_id, input_digest, status, parent_session_id, model_json, tools_json, repository_root, scope_json, authority_json) VALUES (?, ?, ?, 'started', ?, ?, ?, ?, ?, ?)")
156
+ .run(binding.idempotencyKey, binding.runId, digest, parent.session.id, JSON.stringify(selection.configuration.roles.worker), JSON.stringify(allowedTools), snapshot.repositoryRoot, JSON.stringify(unit.scope), JSON.stringify(authority));
157
+ return { model: selection.configuration.roles.worker, unit, root: snapshot.repositoryRoot };
158
+ }));
159
+ if ('replay' in admitted)
160
+ return admitted.replay;
161
+ const childBinding = { parent, parentSessionId: parent.session.id, toolNames: allowedTools, root: admitted.root, scope: admitted.unit.scope, model: admitted.model, delegationId: binding.idempotencyKey };
162
+ let run;
163
+ try {
164
+ run = await this.#pending.run(childBinding, () => this.backend.start('spawn', {
165
+ parent, signal, agentOptions: { ...admitted.model }, maxDepth: 1, label: 'Goki worker',
166
+ toolFilter: { allow: allowedTools },
167
+ prompt: [{ type: 'text', text: [
168
+ 'You are the Goki worker for one approved WorkUnit. Do not start Kiokuko intake, ask for orchestration selection, delegate, or report acceptance. You have no parent run or lease authority. Preserve other work. Stay within the declared scope. Return changed paths, verification evidence and unresolved issues to Goki.',
169
+ JSON.stringify({ objective: admitted.unit.objective, scope: admitted.unit.scope, acceptanceCriteria: admitted.unit.acceptanceCriteria, instruction: input.instruction }),
170
+ ].join('\n') }],
171
+ }));
172
+ if (!run.localAgent || childBinding.child !== run.localAgent || !this.isChild(run.localAgent))
173
+ throw new KiokukoError('INTEGRITY_ERROR', 'Spawn did not establish the exact managed child before first execution');
174
+ const child = await run.result;
175
+ if (findSecretInValue(child.output) !== undefined)
176
+ throw new KiokukoError('SECURITY_REJECTION', 'Child output contains secret-shaped content and was not persisted or forwarded');
177
+ const result = { childSessionId: run.id, stopReason: child.stopReason, output: child.output, accepted: false,
178
+ instruction: 'Goki must review this evidence and run the WorkUnit verifier before enno_work_report.' };
179
+ const json = JSON.stringify(result);
180
+ if (Buffer.byteLength(json) > 256 * 1024)
181
+ throw new KiokukoError('VALIDATION_ERROR', 'Child output exceeds the delegation result limit; inspect the native child session');
182
+ await this.runtime.withDatabase(db => db.prepare("UPDATE dsh_enno_delegations SET status = 'completed', result_json = ? WHERE delegation_id = ?").run(json, binding.idempotencyKey));
183
+ return result;
184
+ }
185
+ catch (error) {
186
+ await this.runtime.withDatabase(db => db.prepare("UPDATE dsh_enno_delegations SET status = 'uncertain' WHERE delegation_id = ? AND status = 'started'").run(binding.idempotencyKey));
187
+ throw error;
188
+ }
189
+ finally {
190
+ await run?.dispose();
191
+ }
192
+ }
193
+ }
194
+ //# sourceMappingURL=enno-delegation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enno-delegation.js","sourceRoot":"","sources":["../../src/dsh/enno-delegation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,145 @@
1
+ import { z } from 'zod';
2
+ import type { SqliteDatabase } from '../db/adapter.js';
3
+ export declare const ExecutionSelectionSchema: z.ZodObject<{
4
+ mode: z.ZodEnum<{
5
+ pending: "pending";
6
+ normal: "normal";
7
+ enno: "enno";
8
+ }>;
9
+ status: z.ZodEnum<{
10
+ ready: "ready";
11
+ selecting: "selecting";
12
+ reselect: "reselect";
13
+ }>;
14
+ configuration: z.ZodOptional<z.ZodObject<{
15
+ routeBindings: z.ZodOptional<z.ZodArray<z.ZodObject<{
16
+ provider: z.ZodString;
17
+ family: z.ZodEnum<{
18
+ openai: "openai";
19
+ "opencode-go": "opencode-go";
20
+ "opencode-zen": "opencode-zen";
21
+ openrouter: "openrouter";
22
+ ollama: "ollama";
23
+ other: "other";
24
+ }>;
25
+ connection: z.ZodDefault<z.ZodEnum<{
26
+ api: "api";
27
+ codex: "codex";
28
+ local: "local";
29
+ }>>;
30
+ protocol: z.ZodDefault<z.ZodEnum<{
31
+ responses: "responses";
32
+ "chat-completions": "chat-completions";
33
+ messages: "messages";
34
+ unknown: "unknown";
35
+ }>>;
36
+ }, z.core.$strict>>>;
37
+ roles: z.ZodObject<{
38
+ ideal: z.ZodObject<{
39
+ provider: z.ZodString;
40
+ model: z.ZodString;
41
+ reasoningEffort: z.ZodOptional<z.ZodString>;
42
+ }, z.core.$strict>;
43
+ zenki: z.ZodObject<{
44
+ provider: z.ZodString;
45
+ model: z.ZodString;
46
+ reasoningEffort: z.ZodOptional<z.ZodString>;
47
+ }, z.core.$strict>;
48
+ goki: z.ZodObject<{
49
+ provider: z.ZodString;
50
+ model: z.ZodString;
51
+ reasoningEffort: z.ZodOptional<z.ZodString>;
52
+ }, z.core.$strict>;
53
+ worker: z.ZodObject<{
54
+ provider: z.ZodString;
55
+ model: z.ZodString;
56
+ reasoningEffort: z.ZodOptional<z.ZodString>;
57
+ }, z.core.$strict>;
58
+ check: z.ZodObject<{
59
+ provider: z.ZodString;
60
+ model: z.ZodString;
61
+ reasoningEffort: z.ZodOptional<z.ZodString>;
62
+ }, z.core.$strict>;
63
+ }, z.core.$strict>;
64
+ template: z.ZodOptional<z.ZodObject<{
65
+ id: z.ZodString;
66
+ version: z.ZodNumber;
67
+ }, z.core.$strict>>;
68
+ custom: z.ZodBoolean;
69
+ maxConcurrentChildren: z.ZodNumber;
70
+ }, z.core.$strict>>;
71
+ ordinaryModel: z.ZodOptional<z.ZodObject<{
72
+ provider: z.ZodString;
73
+ model: z.ZodString;
74
+ reasoningEffort: z.ZodOptional<z.ZodString>;
75
+ }, z.core.$strict>>;
76
+ draft: z.ZodOptional<z.ZodObject<{
77
+ routeBindings: z.ZodOptional<z.ZodArray<z.ZodObject<{
78
+ provider: z.ZodString;
79
+ family: z.ZodEnum<{
80
+ openai: "openai";
81
+ "opencode-go": "opencode-go";
82
+ "opencode-zen": "opencode-zen";
83
+ openrouter: "openrouter";
84
+ ollama: "ollama";
85
+ other: "other";
86
+ }>;
87
+ connection: z.ZodDefault<z.ZodEnum<{
88
+ api: "api";
89
+ codex: "codex";
90
+ local: "local";
91
+ }>>;
92
+ protocol: z.ZodDefault<z.ZodEnum<{
93
+ responses: "responses";
94
+ "chat-completions": "chat-completions";
95
+ messages: "messages";
96
+ unknown: "unknown";
97
+ }>>;
98
+ }, z.core.$strict>>>;
99
+ template: z.ZodOptional<z.ZodObject<{
100
+ id: z.ZodString;
101
+ version: z.ZodNumber;
102
+ }, z.core.$strict>>;
103
+ custom: z.ZodBoolean;
104
+ maxConcurrentChildren: z.ZodNumber;
105
+ roles: z.ZodObject<{
106
+ ideal: z.ZodOptional<z.ZodObject<{
107
+ provider: z.ZodString;
108
+ model: z.ZodString;
109
+ reasoningEffort: z.ZodOptional<z.ZodString>;
110
+ }, z.core.$strict>>;
111
+ zenki: z.ZodOptional<z.ZodObject<{
112
+ provider: z.ZodString;
113
+ model: z.ZodString;
114
+ reasoningEffort: z.ZodOptional<z.ZodString>;
115
+ }, z.core.$strict>>;
116
+ goki: z.ZodOptional<z.ZodObject<{
117
+ provider: z.ZodString;
118
+ model: z.ZodString;
119
+ reasoningEffort: z.ZodOptional<z.ZodString>;
120
+ }, z.core.$strict>>;
121
+ worker: z.ZodOptional<z.ZodObject<{
122
+ provider: z.ZodString;
123
+ model: z.ZodString;
124
+ reasoningEffort: z.ZodOptional<z.ZodString>;
125
+ }, z.core.$strict>>;
126
+ check: z.ZodOptional<z.ZodObject<{
127
+ provider: z.ZodString;
128
+ model: z.ZodString;
129
+ reasoningEffort: z.ZodOptional<z.ZodString>;
130
+ }, z.core.$strict>>;
131
+ }, z.core.$strict>;
132
+ }, z.core.$strict>>;
133
+ problem: z.ZodOptional<z.ZodString>;
134
+ }, z.core.$strict>;
135
+ export type ExecutionSelection = z.infer<typeof ExecutionSelectionSchema>;
136
+ export interface StoredExecutionSelection {
137
+ readonly revision: number;
138
+ readonly value: ExecutionSelection;
139
+ }
140
+ export declare function readExecutionSelection(database: SqliteDatabase, runId: string): StoredExecutionSelection | undefined;
141
+ export declare function initializeExecutionSelection(database: SqliteDatabase, runId: string): void;
142
+ export declare function writeExecutionSelection(database: SqliteDatabase, runId: string, expectedRevision: number, value: ExecutionSelection): StoredExecutionSelection;
143
+ /** Only explicit, affirmative instructions count; negative clauses win. */
144
+ export declare function explicitExecutionMode(task: string): 'normal' | 'enno' | undefined;
145
+ //# sourceMappingURL=execution-selection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution-selection.d.ts","sourceRoot":"","sources":["../../src/dsh/execution-selection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAItD,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAUnC,CAAA;AACF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA;AACzE,MAAM,WAAW,wBAAwB;IAAG,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,kBAAkB,CAAA;CAAE;AAC3G,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,wBAAwB,GAAG,SAAS,CAKpH;AACD,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAG1F;AACD,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,GAAG,wBAAwB,CAM9J;AACD,2EAA2E;AAC3E,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAIjF"}
@@ -0,0 +1,45 @@
1
+ import { z } from 'zod';
2
+ import { KiokukoError } from '../errors.js';
3
+ import { ModelConfigurationSchema, ModelConfigurationDraftSchema, ModelBindingSchema } from './model-configuration.js';
4
+ export const ExecutionSelectionSchema = z.object({
5
+ mode: z.enum(['pending', 'normal', 'enno']),
6
+ status: z.enum(['selecting', 'ready', 'reselect']),
7
+ configuration: ModelConfigurationSchema.optional(),
8
+ ordinaryModel: ModelBindingSchema.optional(),
9
+ draft: ModelConfigurationDraftSchema.optional(),
10
+ problem: z.string().max(1024).optional(),
11
+ }).strict().superRefine((value, ctx) => {
12
+ if (value.mode === 'enno' && value.status === 'ready' && !value.configuration)
13
+ ctx.addIssue({ code: 'custom', message: 'Enno requires a complete model configuration' });
14
+ if (value.mode === 'pending' && value.status === 'ready')
15
+ ctx.addIssue({ code: 'custom', message: 'Pending selection cannot be ready' });
16
+ });
17
+ export function readExecutionSelection(database, runId) {
18
+ if (!database.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'dsh_execution_selections'").get())
19
+ return undefined;
20
+ const row = database.prepare('SELECT revision, state_json FROM dsh_execution_selections WHERE run_id = ?').get(runId);
21
+ if (!row)
22
+ return undefined; // Legacy runs retain their original contract.
23
+ return { revision: row.revision, value: ExecutionSelectionSchema.parse(JSON.parse(row.state_json)) };
24
+ }
25
+ export function initializeExecutionSelection(database, runId) {
26
+ database.prepare('INSERT OR IGNORE INTO dsh_execution_selections (run_id, state_json, updated_at) VALUES (?, ?, ?)')
27
+ .run(runId, JSON.stringify({ mode: 'pending', status: 'selecting' }), new Date().toISOString());
28
+ }
29
+ export function writeExecutionSelection(database, runId, expectedRevision, value) {
30
+ const parsed = ExecutionSelectionSchema.parse(value);
31
+ database.prepare('UPDATE dsh_execution_selections SET state_json = ?, revision = revision + 1, updated_at = ? WHERE run_id = ? AND revision = ?')
32
+ .run(JSON.stringify(parsed), new Date().toISOString(), runId, expectedRevision);
33
+ if (database.prepare('SELECT changes() AS count').get()?.count !== 1)
34
+ throw new KiokukoError('CONFLICT', 'Execution selection changed; reload the exact task before choosing again');
35
+ return { revision: expectedRevision + 1, value: parsed };
36
+ }
37
+ /** Only explicit, affirmative instructions count; negative clauses win. */
38
+ export function explicitExecutionMode(task) {
39
+ if (/(?:役小角|enno(?:-oduno)?).{0,12}(?:使わず|使わない|利用しない|なしで)|(?:without|do not use|don't use)\s+(?:enno(?:-oduno)?|役小角)|通常実行(?:で|を)/iu.test(task))
40
+ return 'normal';
41
+ if (/(?:役小角|enno(?:-oduno)?).{0,8}(?:使って|使用して|利用して|で実行)|\buse\s+enno(?:-oduno)?\b/iu.test(task))
42
+ return 'enno';
43
+ return undefined;
44
+ }
45
+ //# sourceMappingURL=execution-selection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution-selection.js","sourceRoot":"","sources":["../../src/dsh/execution-selection.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { OrcaConfig } from './config.js';
2
+ import type { ModelRoute, DshModelCompatibility } from './model-configuration.js';
2
3
  import { Context } from '@deepseek-ai/cordis';
3
4
  import { KIOKUKO_DSH_HOST_SERVICE, type DshCompositionHost } from './composition.js';
4
5
  import { type DshLlm, type DshSessionQuery } from './session-memory-finalizer.js';
@@ -9,6 +10,8 @@ export interface DshAdvisoryHost {
9
10
  readonly execute: (call: DshAdvisoryCall) => Promise<unknown>;
10
11
  }
11
12
  export interface DshHostAdapterOptions {
13
+ readonly modelRoutes?: readonly ModelRoute[];
14
+ readonly modelCompatibility?: DshModelCompatibility;
12
15
  readonly orca?: import('zod').z.input<typeof OrcaConfig>;
13
16
  readonly databasePath?: string;
14
17
  readonly migrationsDirectory?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"host-adapter.d.ts","sourceRoot":"","sources":["../../src/dsh/host-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAKxC,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC7C,OAAO,EACL,wBAAwB,EACxB,KAAK,kBAAkB,EAExB,MAAM,kBAAkB,CAAA;AAkBzB,OAAO,EAA0C,KAAK,MAAM,EAAgD,KAAK,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAEvK,OAAO,EAAqB,KAAK,eAAe,EAA+B,MAAM,sBAAsB,CAAA;AAiB3G,OAAO,EAAuD,KAAK,cAAc,EAAuB,MAAM,wBAAwB,CAAA;AAmFtI,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,cAAc,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,CAAA;IAClF,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CAC9D;AAMD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAA;IACxD,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAA;IACrC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;IAC3B,6EAA6E;IAC7E,QAAQ,CAAC,YAAY,CAAC,EAAE,eAAe,CAAA;IACvC,oEAAoE;IACpE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAClC,0EAA0E;IAC1E,QAAQ,CAAC,QAAQ,CAAC,EAAE,eAAe,CAAA;CACpC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAA;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CACtC;AAoED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAWvE;AAOD,wBAAgB,eAAe,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAU/E;AAsBD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAKrE;AAED,wBAAgB,mBAAmB,CAAC,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,GAAG,OAAO,CAU/F;AAiGD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,GAAE,qBAA0B,GAAG,cAAc,CAszDtG;AAsBD,OAAO,EAAE,wBAAwB,EAAE,CAAA"}
1
+ {"version":3,"file":"host-adapter.d.ts","sourceRoot":"","sources":["../../src/dsh/host-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAIxC,OAAO,KAAK,EAAE,UAAU,EAAmB,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AAOlG,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC7C,OAAO,EACL,wBAAwB,EACxB,KAAK,kBAAkB,EAExB,MAAM,kBAAkB,CAAA;AAkBzB,OAAO,EAA0C,KAAK,MAAM,EAAgD,KAAK,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAEvK,OAAO,EAAqB,KAAK,eAAe,EAA+B,MAAM,sBAAsB,CAAA;AAiB3G,OAAO,EAAuD,KAAK,cAAc,EAAuB,MAAM,wBAAwB,CAAA;AAoFtI,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,cAAc,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,CAAA;IAClF,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CAC9D;AAMD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,UAAU,EAAE,CAAA;IAC5C,QAAQ,CAAC,kBAAkB,CAAC,EAAE,qBAAqB,CAAA;IACnD,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAA;IACxD,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAA;IACrC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;IAC3B,6EAA6E;IAC7E,QAAQ,CAAC,YAAY,CAAC,EAAE,eAAe,CAAA;IACvC,oEAAoE;IACpE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAClC,0EAA0E;IAC1E,QAAQ,CAAC,QAAQ,CAAC,EAAE,eAAe,CAAA;CACpC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAA;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CACtC;AAoED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAWvE;AAOD,wBAAgB,eAAe,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAU/E;AAsBD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAKrE;AAED,wBAAgB,mBAAmB,CAAC,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,GAAG,OAAO,CAU/F;AAiGD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,GAAE,qBAA0B,GAAG,cAAc,CAm/DtG;AAsBD,OAAO,EAAE,wBAAwB,EAAE,CAAA"}