@askdkc/kiokuko 0.1.31 → 0.2.0
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 +55 -4
- package/README.ko.md +50 -4
- package/README.md +55 -4
- package/README.zh-CN.md +50 -4
- package/dist/agent-file/render.d.ts +1 -1
- package/dist/agent-file/render.d.ts.map +1 -1
- package/dist/agent-file/render.js +11 -6
- package/dist/agent-file/render.js.map +1 -1
- package/dist/akinator/agent-task.d.ts +2 -0
- package/dist/akinator/agent-task.d.ts.map +1 -1
- package/dist/akinator/agent-task.js +39 -12
- package/dist/akinator/agent-task.js.map +1 -1
- package/dist/akinator/capabilities.d.ts.map +1 -1
- package/dist/akinator/capabilities.js +21 -14
- package/dist/akinator/capabilities.js.map +1 -1
- package/dist/akinator/skill-discovery-attempt.d.ts +1 -0
- package/dist/akinator/skill-discovery-attempt.d.ts.map +1 -1
- package/dist/akinator/skill-discovery-attempt.js +20 -18
- package/dist/akinator/skill-discovery-attempt.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +5 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/agent.d.ts.map +1 -1
- package/dist/commands/agent.js +18 -9
- package/dist/commands/agent.js.map +1 -1
- package/dist/commands/enno.d.ts +7 -0
- package/dist/commands/enno.d.ts.map +1 -0
- package/dist/commands/enno.js +76 -0
- package/dist/commands/enno.js.map +1 -0
- package/dist/commands/setup.d.ts +5 -1
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +83 -18
- package/dist/commands/setup.js.map +1 -1
- package/dist/config/paths.d.ts +6 -0
- package/dist/config/paths.d.ts.map +1 -1
- package/dist/config/paths.js +40 -0
- package/dist/config/paths.js.map +1 -1
- package/dist/enno-oduno/adapters.d.ts +18 -0
- package/dist/enno-oduno/adapters.d.ts.map +1 -0
- package/dist/enno-oduno/adapters.js +216 -0
- package/dist/enno-oduno/adapters.js.map +1 -0
- package/dist/enno-oduno/directives.d.ts +12 -0
- package/dist/enno-oduno/directives.d.ts.map +1 -0
- package/dist/enno-oduno/directives.js +215 -0
- package/dist/enno-oduno/directives.js.map +1 -0
- package/dist/enno-oduno/enno-oduno.d.mts +2 -0
- package/dist/enno-oduno/enno-oduno.d.mts.map +1 -0
- package/dist/enno-oduno/enno-oduno.mjs +3 -0
- package/dist/enno-oduno/enno-oduno.mjs.map +1 -0
- package/dist/enno-oduno/experts.d.ts +6 -0
- package/dist/enno-oduno/experts.d.ts.map +1 -0
- package/dist/enno-oduno/experts.js +18 -0
- package/dist/enno-oduno/experts.js.map +1 -0
- package/dist/enno-oduno/goki.d.mts +2 -0
- package/dist/enno-oduno/goki.d.mts.map +1 -0
- package/dist/enno-oduno/goki.mjs +3 -0
- package/dist/enno-oduno/goki.mjs.map +1 -0
- package/dist/enno-oduno/handoff.d.ts +4 -0
- package/dist/enno-oduno/handoff.d.ts.map +1 -0
- package/dist/enno-oduno/handoff.js +18 -0
- package/dist/enno-oduno/handoff.js.map +1 -0
- package/dist/enno-oduno/harness.d.ts +20 -0
- package/dist/enno-oduno/harness.d.ts.map +1 -0
- package/dist/enno-oduno/harness.js +65 -0
- package/dist/enno-oduno/harness.js.map +1 -0
- package/dist/enno-oduno/instructions.d.ts +2 -0
- package/dist/enno-oduno/instructions.d.ts.map +1 -0
- package/dist/enno-oduno/instructions.js +3 -0
- package/dist/enno-oduno/instructions.js.map +1 -0
- package/dist/enno-oduno/role-runner.d.ts +9 -0
- package/dist/enno-oduno/role-runner.d.ts.map +1 -0
- package/dist/enno-oduno/role-runner.js +171 -0
- package/dist/enno-oduno/role-runner.js.map +1 -0
- package/dist/enno-oduno/schemas.d.ts +615 -0
- package/dist/enno-oduno/schemas.d.ts.map +1 -0
- package/dist/enno-oduno/schemas.js +336 -0
- package/dist/enno-oduno/schemas.js.map +1 -0
- package/dist/enno-oduno/service.d.ts +47 -0
- package/dist/enno-oduno/service.d.ts.map +1 -0
- package/dist/enno-oduno/service.js +841 -0
- package/dist/enno-oduno/service.js.map +1 -0
- package/dist/enno-oduno/skills.d.ts +22 -0
- package/dist/enno-oduno/skills.d.ts.map +1 -0
- package/dist/enno-oduno/skills.js +127 -0
- package/dist/enno-oduno/skills.js.map +1 -0
- package/dist/enno-oduno/store.d.ts +61 -0
- package/dist/enno-oduno/store.d.ts.map +1 -0
- package/dist/enno-oduno/store.js +337 -0
- package/dist/enno-oduno/store.js.map +1 -0
- package/dist/enno-oduno/types.d.ts +191 -0
- package/dist/enno-oduno/types.d.ts.map +1 -0
- package/dist/enno-oduno/types.js +41 -0
- package/dist/enno-oduno/types.js.map +1 -0
- package/dist/enno-oduno/verifier.d.ts +9 -0
- package/dist/enno-oduno/verifier.d.ts.map +1 -0
- package/dist/enno-oduno/verifier.js +101 -0
- package/dist/enno-oduno/verifier.js.map +1 -0
- package/dist/enno-oduno/zenki.d.mts +2 -0
- package/dist/enno-oduno/zenki.d.mts.map +1 -0
- package/dist/enno-oduno/zenki.mjs +3 -0
- package/dist/enno-oduno/zenki.mjs.map +1 -0
- package/dist/ledger/types.d.ts +1 -1
- package/dist/ledger/types.d.ts.map +1 -1
- package/dist/ledger/types.js +5 -0
- package/dist/ledger/types.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +66 -26
- package/dist/mcp/server.js.map +1 -1
- package/dist/setup/claude-config.d.ts +2 -0
- package/dist/setup/claude-config.d.ts.map +1 -1
- package/dist/setup/claude-config.js +12 -0
- package/dist/setup/claude-config.js.map +1 -1
- package/dist/setup/enno-client-config.d.ts +9 -0
- package/dist/setup/enno-client-config.d.ts.map +1 -0
- package/dist/setup/enno-client-config.js +172 -0
- package/dist/setup/enno-client-config.js.map +1 -0
- package/dist/setup/opencode-config.d.ts +2 -0
- package/dist/setup/opencode-config.d.ts.map +1 -1
- package/dist/setup/opencode-config.js +12 -0
- package/dist/setup/opencode-config.js.map +1 -1
- package/dist/setup/render.d.ts +2 -0
- package/dist/setup/render.d.ts.map +1 -1
- package/dist/setup/render.js +21 -12
- package/dist/setup/render.js.map +1 -1
- package/dist/setup/standard-skills.d.ts +23 -4
- package/dist/setup/standard-skills.d.ts.map +1 -1
- package/dist/setup/standard-skills.js +51 -1
- package/dist/setup/standard-skills.js.map +1 -1
- package/dist/skills/discovery-service.d.ts.map +1 -1
- package/dist/skills/discovery-service.js +2 -1
- package/dist/skills/discovery-service.js.map +1 -1
- package/dist/skills/types.d.ts +1 -0
- package/dist/skills/types.d.ts.map +1 -1
- package/dist/web/i18n.d.ts +19 -0
- package/dist/web/i18n.d.ts.map +1 -1
- package/dist/web/i18n.js +76 -0
- package/dist/web/i18n.js.map +1 -1
- package/dist/web/ui.d.ts.map +1 -1
- package/dist/web/ui.js +76 -4
- package/dist/web/ui.js.map +1 -1
- package/migrations/013_enno_oduno.sql +176 -0
- package/migrations/014_oduno_reflection_phases.sql +40 -0
- package/package.json +7 -1
- package/skills/kiokuko-enno-oduno/SKILL.md +122 -0
- package/skills/kiokuko-enno-oduno/enno-oduno.png +0 -0
- package/skills/kiokuko-single-purpose-functions/SKILL.md +44 -258
- package/skills/kiokuko-single-purpose-functions/references/boundaries-and-ownership.md +50 -0
- package/skills/kiokuko-single-purpose-functions/references/domain-and-types.md +48 -0
- package/skills/kiokuko-single-purpose-functions/references/effects-and-data.md +43 -0
- package/skills/kiokuko-single-purpose-functions/references/protocols-and-idempotency.md +42 -0
- package/skills/kiokuko-single-purpose-functions/references/verification.md +41 -0
- package/skills/kiokuko-soul/SKILL.md +72 -0
- package/skills/kiokuko-ui-design-soul/SKILL.md +39 -1178
- package/skills/kiokuko-ui-design-soul/references/accessibility-and-navigation.md +31 -0
- package/skills/kiokuko-ui-design-soul/references/async-recovery.md +49 -0
- package/skills/kiokuko-ui-design-soul/references/forms-and-controls.md +35 -0
- package/skills/kiokuko-ui-design-soul/references/interaction-feedback.md +34 -0
- package/skills/kiokuko-ui-design-soul/references/responsive-and-platform.md +38 -0
- package/skills/kiokuko-ui-design-soul/references/safety-and-review.md +39 -0
- package/templates/AGENTS.md +9 -6
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { KiokukoError } from '../errors.js';
|
|
2
|
+
import { ENNO_CLIENT_KINDS } from './types.js';
|
|
3
|
+
const CLIENT_ALIASES = {
|
|
4
|
+
codex: ['codex', 'codex-mcp-client'],
|
|
5
|
+
claude: ['claude', 'claude-ai', 'claude-code'],
|
|
6
|
+
opencode: ['opencode'],
|
|
7
|
+
};
|
|
8
|
+
function normalizedClientName(value) {
|
|
9
|
+
if (typeof value !== 'string' || value.length === 0 || value.length > 200
|
|
10
|
+
|| value.trim() !== value || /[\p{Cc}\p{Cf}]/u.test(value))
|
|
11
|
+
return null;
|
|
12
|
+
return value.normalize('NFKC').toLowerCase();
|
|
13
|
+
}
|
|
14
|
+
function boundedVersion(value) {
|
|
15
|
+
if (typeof value !== 'string' || value.length === 0 || value.length > 100
|
|
16
|
+
|| value.trim() !== value || /[\p{Cc}\p{Cf}]/u.test(value))
|
|
17
|
+
return undefined;
|
|
18
|
+
return value;
|
|
19
|
+
}
|
|
20
|
+
export function identifyEnnoClientKind(value) {
|
|
21
|
+
const normalized = normalizedClientName(value);
|
|
22
|
+
if (normalized === null)
|
|
23
|
+
return null;
|
|
24
|
+
return ENNO_CLIENT_KINDS.find((kind) => CLIENT_ALIASES[kind].includes(normalized)) ?? null;
|
|
25
|
+
}
|
|
26
|
+
export function identifyMcpClientKind(client) {
|
|
27
|
+
if (client === undefined)
|
|
28
|
+
return null;
|
|
29
|
+
const fromName = identifyEnnoClientKind(client.name);
|
|
30
|
+
const fromTitle = identifyEnnoClientKind(client.title);
|
|
31
|
+
if (fromName !== null && fromTitle !== null && fromName !== fromTitle) {
|
|
32
|
+
throw new KiokukoError('CONFLICT', 'MCP client identity is contradictory');
|
|
33
|
+
}
|
|
34
|
+
return fromName ?? fromTitle;
|
|
35
|
+
}
|
|
36
|
+
export function resolveTaskPrepareClient(explicit, runtime) {
|
|
37
|
+
const runtimeKind = identifyMcpClientKind(runtime);
|
|
38
|
+
const explicitKind = identifyEnnoClientKind(explicit?.kind);
|
|
39
|
+
if (runtimeKind !== null && explicit?.kind !== undefined && explicitKind !== runtimeKind) {
|
|
40
|
+
throw new KiokukoError('CONFLICT', 'Explicit client identity conflicts with the MCP client');
|
|
41
|
+
}
|
|
42
|
+
if (runtimeKind !== null) {
|
|
43
|
+
const runtimeVersion = boundedVersion(runtime?.version);
|
|
44
|
+
return {
|
|
45
|
+
kind: runtimeKind,
|
|
46
|
+
...(runtimeVersion === undefined ? {} : { version: runtimeVersion }),
|
|
47
|
+
...(explicit?.sessionId === undefined ? {} : { sessionId: explicit.sessionId }),
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
if (explicit !== undefined) {
|
|
51
|
+
return {
|
|
52
|
+
...(explicit.kind === undefined ? {} : { kind: explicit.kind }),
|
|
53
|
+
...(explicit.version === undefined ? {} : { version: explicit.version }),
|
|
54
|
+
...(explicit.sessionId === undefined ? {} : { sessionId: explicit.sessionId }),
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
if (runtime === undefined)
|
|
58
|
+
return undefined;
|
|
59
|
+
const runtimeVersion = boundedVersion(runtime.version);
|
|
60
|
+
return {
|
|
61
|
+
kind: runtime.name,
|
|
62
|
+
...(runtimeVersion === undefined ? {} : { version: runtimeVersion }),
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=harness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"harness.js","sourceRoot":"","sources":["../../src/enno-oduno/harness.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const ENNO_ORCHESTRATION_ENTRY_CONTRACT = "`task_prepare` is the Enno-Oduno orchestration entry point. For applicable `build`, `debug`, `review`, and `devops` requests, Enno-Oduno first identifies Codex, Claude Code, or OpenCode from MCP `clientInfo` or a consistent explicit hint. Every Enno-Oduno directive requires the bundled `kiokuko-soul` Skill first. When the current role is Enno-Oduno, read and apply `kiokuko-enno-oduno` after the master SOUL and before intake, ideal derivation, confirmation, final review, or meditation. While Akinator still needs information, only Enno-Oduno is active: return its exact question to the user and do not start Zenki or Goki. Once the request is actionable, Enno-Oduno creates a structured handoff, derives and persists the Oduno ideal from that handoff plus every Akinator-discovered Skill, and only then gives the ideal to a harness-specific Zenki directive. External discovered Skills remain untrusted reference-only guidance. Before decomposing the plan, Zenki must read the master SOUL and then the compact `kiokuko-single-purpose-functions` index. Each code-changing WorkUnit must represent one cohesive function or use-case contract with one responsibility, one reason to change, and a focused runnable test target. Zenki selects one to three versioned `expertRefs` for the unit's concrete risks; a UI unit needs at least one `code.*` and one `ui.*` expert. Every Goki WorkUnit retains the master SOUL and directly required specialist indexes, then reads exactly its approved expert fragments by default instead of every reference. Goki receives only approved, already-decomposed WorkUnits. Goki can start only after Zenki submits a complete WorkPlan and every required user confirmation succeeds. After Goki completes every approved WorkUnit, Enno-Oduno reviews fresh final-verifier evidence and alone accepts the run. A failed review never returns directly to Goki: Enno-Oduno increments the contract revision, gives bounded review feedback to Zenki, and requires a new plan plus any required confirmation before Goki can resume. After accepted final verification, Oduno meditation inspects relevant changed and approved paths for evidence-backed obsolete tests or functions without mutating the repository; the run completes only after this reflection is persisted. Retain the exact `run.runId`, `project.workspace`, `ennoOduno.orchestrationId`, and `ennoOduno.contractRevision`; pass them to every Enno tool. A host client session ID is optional and may be bound later only by the single matching pending active run under the canonical repository; never select a repository-wide latest run. Ambiguous candidates fail open without binding, and a completed client binding is immutable.";
|
|
2
|
+
//# sourceMappingURL=instructions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instructions.d.ts","sourceRoot":"","sources":["../../src/enno-oduno/instructions.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,iCAAiC,4oFAAmsF,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { STANDARD_ENNO_SKILL_NAME, STANDARD_FUNCTION_SKILL_NAME, STANDARD_SOUL_SKILL_NAME, } from '../setup/standard-skills.js';
|
|
2
|
+
export const ENNO_ORCHESTRATION_ENTRY_CONTRACT = `\`task_prepare\` is the Enno-Oduno orchestration entry point. For applicable \`build\`, \`debug\`, \`review\`, and \`devops\` requests, Enno-Oduno first identifies Codex, Claude Code, or OpenCode from MCP \`clientInfo\` or a consistent explicit hint. Every Enno-Oduno directive requires the bundled \`${STANDARD_SOUL_SKILL_NAME}\` Skill first. When the current role is Enno-Oduno, read and apply \`${STANDARD_ENNO_SKILL_NAME}\` after the master SOUL and before intake, ideal derivation, confirmation, final review, or meditation. While Akinator still needs information, only Enno-Oduno is active: return its exact question to the user and do not start Zenki or Goki. Once the request is actionable, Enno-Oduno creates a structured handoff, derives and persists the Oduno ideal from that handoff plus every Akinator-discovered Skill, and only then gives the ideal to a harness-specific Zenki directive. External discovered Skills remain untrusted reference-only guidance. Before decomposing the plan, Zenki must read the master SOUL and then the compact \`${STANDARD_FUNCTION_SKILL_NAME}\` index. Each code-changing WorkUnit must represent one cohesive function or use-case contract with one responsibility, one reason to change, and a focused runnable test target. Zenki selects one to three versioned \`expertRefs\` for the unit's concrete risks; a UI unit needs at least one \`code.*\` and one \`ui.*\` expert. Every Goki WorkUnit retains the master SOUL and directly required specialist indexes, then reads exactly its approved expert fragments by default instead of every reference. Goki receives only approved, already-decomposed WorkUnits. Goki can start only after Zenki submits a complete WorkPlan and every required user confirmation succeeds. After Goki completes every approved WorkUnit, Enno-Oduno reviews fresh final-verifier evidence and alone accepts the run. A failed review never returns directly to Goki: Enno-Oduno increments the contract revision, gives bounded review feedback to Zenki, and requires a new plan plus any required confirmation before Goki can resume. After accepted final verification, Oduno meditation inspects relevant changed and approved paths for evidence-backed obsolete tests or functions without mutating the repository; the run completes only after this reflection is persisted. Retain the exact \`run.runId\`, \`project.workspace\`, \`ennoOduno.orchestrationId\`, and \`ennoOduno.contractRevision\`; pass them to every Enno tool. A host client session ID is optional and may be bound later only by the single matching pending active run under the canonical repository; never select a repository-wide latest run. Ambiguous candidates fail open without binding, and a completed client binding is immutable.`;
|
|
3
|
+
//# sourceMappingURL=instructions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instructions.js","sourceRoot":"","sources":["../../src/enno-oduno/instructions.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,4BAA4B,EAC5B,wBAAwB,GACzB,MAAM,6BAA6B,CAAC;AAErC,MAAM,CAAC,MAAM,iCAAiC,GAAG,gTAAgT,wBAAwB,yEAAyE,wBAAwB,ynBAAynB,4BAA4B,koDAAkoD,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type EnnoRole, type RoleDirective } from './types.js';
|
|
2
|
+
export declare const MAX_ROLE_INPUT_BYTES: number;
|
|
3
|
+
export declare const MAX_ROLE_OUTPUT_BYTES: number;
|
|
4
|
+
export declare function generateRoleDirective(role: EnnoRole, input: unknown): RoleDirective;
|
|
5
|
+
export declare function parseRoleJson(bytes: Buffer): unknown;
|
|
6
|
+
export declare function serializeRoleOutput(value: unknown): string;
|
|
7
|
+
export declare function blockedRoleResult(role: EnnoRole, error: unknown): object;
|
|
8
|
+
export declare function runRoleScript(role: EnnoRole): Promise<void>;
|
|
9
|
+
//# sourceMappingURL=role-runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"role-runner.d.ts","sourceRoot":"","sources":["../../src/enno-oduno/role-runner.ts"],"names":[],"mappings":"AAiBA,OAAO,EAA6B,KAAK,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAE1F,eAAO,MAAM,oBAAoB,QAAkB,CAAC;AACpD,eAAO,MAAM,qBAAqB,QAAa,CAAC;AA8EhD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,GAAG,aAAa,CAgCnF;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAapD;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAM1D;AAcD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CASxE;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CASjE"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { TextDecoder } from 'node:util';
|
|
2
|
+
import * as z from 'zod/v4';
|
|
3
|
+
import { KiokukoError } from '../errors.js';
|
|
4
|
+
import { parseStrictJson } from '../setup/strict-json.js';
|
|
5
|
+
import { STANDARD_FUNCTION_SKILL_NAME, STANDARD_SOUL_SKILL_NAME, STANDARD_UI_SKILL_NAME, } from '../setup/standard-skills.js';
|
|
6
|
+
import { directiveForRun } from './directives.js';
|
|
7
|
+
import { ennoContractSchema, ennoRequestHandoffSchema, odunoIdealSchema, odunoMeditationSchema, workUnitSchema, } from './schemas.js';
|
|
8
|
+
import { ENNO_ROLES, ENNO_STATUSES } from './types.js';
|
|
9
|
+
export const MAX_ROLE_INPUT_BYTES = 2 * 1024 * 1024;
|
|
10
|
+
export const MAX_ROLE_OUTPUT_BYTES = 256 * 1024;
|
|
11
|
+
const roleInputSchema = z.object({
|
|
12
|
+
runId: z.string().min(1).max(256),
|
|
13
|
+
workspace: z.string().min(1).max(256).default('script'),
|
|
14
|
+
orchestrationId: z.string().min(1).max(256).default('script'),
|
|
15
|
+
clientKind: z.enum(['codex', 'claude', 'opencode']).nullable().default(null),
|
|
16
|
+
clientVersion: z.string().min(1).max(100).nullable().default(null),
|
|
17
|
+
clientSessionId: z.string().min(1).max(256).nullable().default(null),
|
|
18
|
+
repositoryRoot: z.string().min(1).max(4096).default('/'),
|
|
19
|
+
taskType: z.enum(['build', 'debug', 'review', 'devops']).default('build'),
|
|
20
|
+
status: z.enum(ENNO_STATUSES),
|
|
21
|
+
contractRevision: z.number().int().min(1),
|
|
22
|
+
confirmationState: z.enum(['not_required', 'pending', 'approved', 'revision_requested', 'cancelled']).default('not_required'),
|
|
23
|
+
attempts: z.number().int().min(0).max(20).default(0),
|
|
24
|
+
mutationRevision: z.number().int().min(0).default(0),
|
|
25
|
+
ideal: odunoIdealSchema.nullable().default(null),
|
|
26
|
+
meditation: odunoMeditationSchema.nullable().default(null),
|
|
27
|
+
contract: ennoContractSchema,
|
|
28
|
+
handoff: ennoRequestHandoffSchema,
|
|
29
|
+
workUnits: z.array(z.object({
|
|
30
|
+
workUnit: workUnitSchema,
|
|
31
|
+
status: z.enum(['pending', 'in_progress', 'completed', 'failed', 'blocked']),
|
|
32
|
+
attemptCount: z.number().int().min(0).max(20),
|
|
33
|
+
result: z.object({
|
|
34
|
+
outcome: z.enum(['completed', 'failed', 'blocked']),
|
|
35
|
+
summary: z.string().min(1).max(16_384),
|
|
36
|
+
mutated: z.boolean(),
|
|
37
|
+
changedPaths: z.array(z.string().max(4_096)).max(256),
|
|
38
|
+
}).strict().nullable(),
|
|
39
|
+
}).strict()).max(128).default([]),
|
|
40
|
+
blocker: z.string().max(16_384).nullable().default(null),
|
|
41
|
+
akinatorProfile: z.object({
|
|
42
|
+
taskType: z.enum(['build', 'debug', 'review', 'devops']).nullable(),
|
|
43
|
+
target: z.string().max(4_096).nullable(),
|
|
44
|
+
expected: z.string().max(8_192).nullable(),
|
|
45
|
+
constraints: z.string().max(8_192).nullable(),
|
|
46
|
+
}).strict().optional(),
|
|
47
|
+
repositoryFingerprint: z.object({
|
|
48
|
+
languages: z.array(z.string().min(1).max(500)).max(1_000),
|
|
49
|
+
frameworks: z.array(z.object({ name: z.string().min(1).max(500), version: z.string().max(200).optional() }).strict()).max(1_000),
|
|
50
|
+
databases: z.array(z.string().min(1).max(500)).max(1_000),
|
|
51
|
+
runtimes: z.array(z.string().min(1).max(500)).max(1_000),
|
|
52
|
+
tools: z.array(z.string().min(1).max(500)).max(1_000),
|
|
53
|
+
}).passthrough().optional(),
|
|
54
|
+
capabilityCatalog: z.array(z.object({
|
|
55
|
+
kind: z.enum(['skill', 'mcp_tool']),
|
|
56
|
+
name: z.string().min(1).max(300),
|
|
57
|
+
description: z.string().max(2_000).optional(),
|
|
58
|
+
}).strict()).max(200).optional(),
|
|
59
|
+
discoveredSkills: z.array(z.object({
|
|
60
|
+
name: z.string().min(1).max(500),
|
|
61
|
+
source: z.string().max(500).optional(),
|
|
62
|
+
}).passthrough()).max(2).optional(),
|
|
63
|
+
}).strict();
|
|
64
|
+
function joined(values, maximum = 16) {
|
|
65
|
+
return values.slice(0, maximum).join(', ') || 'none';
|
|
66
|
+
}
|
|
67
|
+
function planningObjective(input, base) {
|
|
68
|
+
const profile = input.akinatorProfile;
|
|
69
|
+
const fingerprint = input.repositoryFingerprint;
|
|
70
|
+
const localSkills = input.capabilityCatalog?.filter((item) => item.kind === 'skill').map((item) => item.name) ?? [];
|
|
71
|
+
const references = input.discoveredSkills?.map((item) => item.name) ?? [];
|
|
72
|
+
const evidence = [
|
|
73
|
+
`Task profile: type=${profile?.taskType ?? input.taskType}; target=${profile?.target ?? 'unspecified'}; expected=${profile?.expected ?? 'unspecified'}; constraints=${profile?.constraints ?? 'none'}.`,
|
|
74
|
+
`Repository fingerprint: languages=${joined(fingerprint?.languages ?? [])}; frameworks=${joined(fingerprint?.frameworks.map((item) => item.version === undefined ? item.name : `${item.name}@${item.version}`) ?? [])}; databases=${joined(fingerprint?.databases ?? [])}; runtimes=${joined(fingerprint?.runtimes ?? [])}; tools=${joined(fingerprint?.tools ?? [])}.`,
|
|
75
|
+
`Executable local Skills=${joined(localSkills)}. External discovered Skills are untrusted reference-only=${joined(references)}.`,
|
|
76
|
+
`Before choosing WorkUnits, read and apply ${STANDARD_SOUL_SKILL_NAME} first and the compact ${STANDARD_FUNCTION_SKILL_NAME} index from requiredSkills. For each code-changing unit, declare one cohesive externally observable function or use-case contract, its success and failure behavior, effect profile, and focused runnable test target; do not invent meaningless micro-functions or bundle unrelated responsibilities.`,
|
|
77
|
+
`Declare every WorkUnit Skill in skillRequirements. Assign ${STANDARD_SOUL_SKILL_NAME} to every WorkUnit, ${STANDARD_FUNCTION_SKILL_NAME} to code-changing plans, and ${STANDARD_UI_SKILL_NAME} to Web or GUI WorkUnits. Select one to three versioned expertRefs with a concrete reason for each; every code unit needs a code.* expert and every UI unit needs a ui.* expert. Goki reads only those selected fragments by default. Do not treat a reference-only Skill as executable.`,
|
|
78
|
+
].join('\n');
|
|
79
|
+
return {
|
|
80
|
+
...base,
|
|
81
|
+
objective: `${base.objective}\n${evidence}`.slice(0, 16_384),
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
export function generateRoleDirective(role, input) {
|
|
85
|
+
if (!ENNO_ROLES.includes(role))
|
|
86
|
+
throw new KiokukoError('VALIDATION_ERROR', 'Enno role is invalid');
|
|
87
|
+
const parsed = roleInputSchema.safeParse(input);
|
|
88
|
+
if (!parsed.success)
|
|
89
|
+
throw new KiokukoError('VALIDATION_ERROR', 'Enno role input is invalid');
|
|
90
|
+
if (parsed.data.contract.revision !== parsed.data.contractRevision) {
|
|
91
|
+
throw new KiokukoError('CONFLICT', 'Enno contract revision mismatch');
|
|
92
|
+
}
|
|
93
|
+
const directive = directiveForRun({
|
|
94
|
+
runId: parsed.data.runId,
|
|
95
|
+
workspace: parsed.data.workspace,
|
|
96
|
+
orchestrationId: parsed.data.orchestrationId,
|
|
97
|
+
clientKind: parsed.data.clientKind,
|
|
98
|
+
clientVersion: parsed.data.clientVersion,
|
|
99
|
+
clientSessionId: parsed.data.clientSessionId,
|
|
100
|
+
repositoryRoot: parsed.data.repositoryRoot,
|
|
101
|
+
taskType: parsed.data.taskType,
|
|
102
|
+
status: parsed.data.status,
|
|
103
|
+
revision: parsed.data.contractRevision,
|
|
104
|
+
confirmationState: parsed.data.confirmationState,
|
|
105
|
+
attempts: parsed.data.attempts,
|
|
106
|
+
mutationRevision: parsed.data.mutationRevision,
|
|
107
|
+
ideal: parsed.data.ideal,
|
|
108
|
+
meditation: parsed.data.meditation,
|
|
109
|
+
contract: parsed.data.contract,
|
|
110
|
+
handoff: parsed.data.handoff,
|
|
111
|
+
workUnits: parsed.data.workUnits,
|
|
112
|
+
blocker: parsed.data.blocker,
|
|
113
|
+
});
|
|
114
|
+
if (directive === null || directive.role !== role) {
|
|
115
|
+
throw new KiokukoError('CONFLICT', 'Requested role does not own the current Enno state');
|
|
116
|
+
}
|
|
117
|
+
return role === 'zenki' ? planningObjective(parsed.data, directive) : directive;
|
|
118
|
+
}
|
|
119
|
+
export function parseRoleJson(bytes) {
|
|
120
|
+
if (bytes.byteLength > MAX_ROLE_INPUT_BYTES)
|
|
121
|
+
throw new KiokukoError('VALIDATION_ERROR', 'Enno role input is too large');
|
|
122
|
+
let text;
|
|
123
|
+
try {
|
|
124
|
+
text = new TextDecoder('utf-8', { fatal: true, ignoreBOM: true }).decode(bytes);
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
throw new KiokukoError('VALIDATION_ERROR', 'Enno role input is not UTF-8');
|
|
128
|
+
}
|
|
129
|
+
return parseStrictJson(text, { allowTrailingComma: false, disallowComments: true, allowEmptyContent: false }, 'Enno role input is not strict JSON');
|
|
130
|
+
}
|
|
131
|
+
export function serializeRoleOutput(value) {
|
|
132
|
+
const serialized = JSON.stringify(value);
|
|
133
|
+
if (Buffer.byteLength(serialized, 'utf8') > MAX_ROLE_OUTPUT_BYTES) {
|
|
134
|
+
throw new KiokukoError('INTEGRITY_ERROR', 'Enno role output is too large');
|
|
135
|
+
}
|
|
136
|
+
return `${serialized}\n`;
|
|
137
|
+
}
|
|
138
|
+
async function readBoundedStdin() {
|
|
139
|
+
const chunks = [];
|
|
140
|
+
let size = 0;
|
|
141
|
+
for await (const chunk of process.stdin) {
|
|
142
|
+
const bytes = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk, 'utf8');
|
|
143
|
+
size += bytes.byteLength;
|
|
144
|
+
if (size > MAX_ROLE_INPUT_BYTES)
|
|
145
|
+
throw new KiokukoError('VALIDATION_ERROR', 'Enno role input is too large');
|
|
146
|
+
chunks.push(bytes);
|
|
147
|
+
}
|
|
148
|
+
return Buffer.concat(chunks);
|
|
149
|
+
}
|
|
150
|
+
export function blockedRoleResult(role, error) {
|
|
151
|
+
const code = error instanceof KiokukoError ? error.code : 'INTEGRITY_ERROR';
|
|
152
|
+
return {
|
|
153
|
+
protocolVersion: 1,
|
|
154
|
+
status: 'blocked',
|
|
155
|
+
role,
|
|
156
|
+
code,
|
|
157
|
+
message: 'Enno role execution blocked',
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
export async function runRoleScript(role) {
|
|
161
|
+
try {
|
|
162
|
+
const directive = generateRoleDirective(role, parseRoleJson(await readBoundedStdin()));
|
|
163
|
+
process.stdout.write(serializeRoleOutput(directive));
|
|
164
|
+
}
|
|
165
|
+
catch (error) {
|
|
166
|
+
process.stderr.write('Enno role execution blocked\n');
|
|
167
|
+
process.stdout.write(serializeRoleOutput(blockedRoleResult(role, error)));
|
|
168
|
+
process.exitCode = 8;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=role-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"role-runner.js","sourceRoot":"","sources":["../../src/enno-oduno/role-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EACL,4BAA4B,EAC5B,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,gBAAgB,EAChB,qBAAqB,EACrB,cAAc,GACf,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,aAAa,EAAqC,MAAM,YAAY,CAAC;AAE1F,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AACpD,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,GAAG,IAAI,CAAC;AAEhD,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACjC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IACvD,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IAC7D,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAC5E,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAClE,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACpE,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;IACxD,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IACzE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC;IAC7B,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACzC,iBAAiB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,oBAAoB,EAAE,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC;IAC7H,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACpD,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACpD,KAAK,EAAE,gBAAgB,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAChD,UAAU,EAAE,qBAAqB,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAC1D,QAAQ,EAAE,kBAAkB;IAC5B,OAAO,EAAE,wBAAwB;IACjC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QAC1B,QAAQ,EAAE,cAAc;QACxB,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC5E,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7C,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;YACf,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;YACnD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;YACtC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;YACpB,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;SACtD,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KACvB,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACjC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACxD,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC;QACxB,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE;QACnE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;QACxC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;QAC1C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;KAC9C,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACtB,qBAAqB,EAAE,CAAC,CAAC,MAAM,CAAC;QAC9B,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;QACzD,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;QAChI,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;QACzD,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;QACxD,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;KACtD,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;IAC3B,iBAAiB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QAClC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACnC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;QAChC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;KAC9C,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IAChC,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QACjC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;QAChC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;KACvC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CACpC,CAAC,CAAC,MAAM,EAAE,CAAC;AAEZ,SAAS,MAAM,CAAC,MAAyB,EAAE,OAAO,GAAG,EAAE;IACrD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC;AACvD,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAsC,EAAE,IAAmB;IACpF,MAAM,OAAO,GAAG,KAAK,CAAC,eAAe,CAAC;IACtC,MAAM,WAAW,GAAG,KAAK,CAAC,qBAAqB,CAAC;IAChD,MAAM,WAAW,GAAG,KAAK,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACpH,MAAM,UAAU,GAAG,KAAK,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAC1E,MAAM,QAAQ,GAAG;QACf,sBAAsB,OAAO,EAAE,QAAQ,IAAI,KAAK,CAAC,QAAQ,YAAY,OAAO,EAAE,MAAM,IAAI,aAAa,cAAc,OAAO,EAAE,QAAQ,IAAI,aAAa,iBAAiB,OAAO,EAAE,WAAW,IAAI,MAAM,GAAG;QACvM,qCAAqC,MAAM,CAAC,WAAW,EAAE,SAAS,IAAI,EAAE,CAAC,gBAAgB,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,eAAe,MAAM,CAAC,WAAW,EAAE,SAAS,IAAI,EAAE,CAAC,cAAc,MAAM,CAAC,WAAW,EAAE,QAAQ,IAAI,EAAE,CAAC,WAAW,MAAM,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC,GAAG;QACvW,2BAA2B,MAAM,CAAC,WAAW,CAAC,6DAA6D,MAAM,CAAC,UAAU,CAAC,GAAG;QAChI,6CAA6C,wBAAwB,0BAA0B,4BAA4B,wSAAwS;QACna,6DAA6D,wBAAwB,uBAAuB,4BAA4B,gCAAgC,sBAAsB,0RAA0R;KACzd,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACb,OAAO;QACL,GAAG,IAAI;QACP,SAAS,EAAE,GAAG,IAAI,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC;KAC7D,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAc,EAAE,KAAc;IAClE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,YAAY,CAAC,kBAAkB,EAAE,sBAAsB,CAAC,CAAC;IACnG,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAChD,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,MAAM,IAAI,YAAY,CAAC,kBAAkB,EAAE,4BAA4B,CAAC,CAAC;IAC9F,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,KAAK,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACnE,MAAM,IAAI,YAAY,CAAC,UAAU,EAAE,iCAAiC,CAAC,CAAC;IACxE,CAAC;IACD,MAAM,SAAS,GAAG,eAAe,CAAC;QAChC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK;QACxB,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS;QAChC,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,eAAe;QAC5C,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU;QAClC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,aAAa;QACxC,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,eAAe;QAC5C,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,cAAc;QAC1C,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ;QAC9B,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM;QAC1B,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,gBAAgB;QACtC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,iBAAiB;QAChD,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ;QAC9B,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,gBAAgB;QAC9C,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK;QACxB,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU;QAClC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ;QAC9B,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO;QAC5B,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS;QAChC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO;KAC7B,CAAC,CAAC;IACH,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QAClD,MAAM,IAAI,YAAY,CAAC,UAAU,EAAE,oDAAoD,CAAC,CAAC;IAC3F,CAAC;IACD,OAAO,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAClF,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,IAAI,KAAK,CAAC,UAAU,GAAG,oBAAoB;QAAE,MAAM,IAAI,YAAY,CAAC,kBAAkB,EAAE,8BAA8B,CAAC,CAAC;IACxH,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAClF,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,YAAY,CAAC,kBAAkB,EAAE,8BAA8B,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,eAAe,CACpB,IAAI,EACJ,EAAE,kBAAkB,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,EAC/E,oCAAoC,CACrC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACzC,IAAI,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,MAAM,CAAC,GAAG,qBAAqB,EAAE,CAAC;QAClE,MAAM,IAAI,YAAY,CAAC,iBAAiB,EAAE,+BAA+B,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,GAAG,UAAU,IAAI,CAAC;AAC3B,CAAC;AAED,KAAK,UAAU,gBAAgB;IAC7B,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAe,EAAE,MAAM,CAAC,CAAC;QACpF,IAAI,IAAI,KAAK,CAAC,UAAU,CAAC;QACzB,IAAI,IAAI,GAAG,oBAAoB;YAAE,MAAM,IAAI,YAAY,CAAC,kBAAkB,EAAE,8BAA8B,CAAC,CAAC;QAC5G,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAc,EAAE,KAAc;IAC9D,MAAM,IAAI,GAAG,KAAK,YAAY,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC;IAC5E,OAAO;QACL,eAAe,EAAE,CAAC;QAClB,MAAM,EAAE,SAAS;QACjB,IAAI;QACJ,IAAI;QACJ,OAAO,EAAE,6BAA6B;KACvC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAc;IAChD,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,qBAAqB,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,gBAAgB,EAAE,CAAC,CAAC,CAAC;QACvF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC;IACvD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACtD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1E,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC"}
|