dsh-a2a-server 0.2.0 → 0.4.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.
Files changed (92) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/CHANGELOG.zh-CN.md +39 -0
  3. package/README.md +122 -29
  4. package/README.zh-CN.md +91 -28
  5. package/cordis.patch.yml +10 -6
  6. package/docker/Dockerfile +5 -0
  7. package/docs/visitor-isolation.en.md +51 -0
  8. package/docs/visitor-isolation.md +75 -0
  9. package/lib/briefing.d.ts +39 -0
  10. package/lib/briefing.d.ts.map +1 -0
  11. package/lib/briefing.js +108 -0
  12. package/lib/briefing.js.map +1 -0
  13. package/lib/config.d.ts +58 -15
  14. package/lib/config.d.ts.map +1 -1
  15. package/lib/config.js +74 -5
  16. package/lib/config.js.map +1 -1
  17. package/lib/contexts.d.ts +9 -4
  18. package/lib/contexts.d.ts.map +1 -1
  19. package/lib/contexts.js +7 -13
  20. package/lib/contexts.js.map +1 -1
  21. package/lib/docker-executor.d.ts +11 -0
  22. package/lib/docker-executor.d.ts.map +1 -0
  23. package/lib/docker-executor.js +115 -0
  24. package/lib/docker-executor.js.map +1 -0
  25. package/lib/index.d.ts +1 -31
  26. package/lib/index.d.ts.map +1 -1
  27. package/lib/index.js +462 -440
  28. package/lib/index.js.map +1 -1
  29. package/lib/isolation.d.ts +21 -0
  30. package/lib/isolation.d.ts.map +1 -0
  31. package/lib/isolation.js +108 -0
  32. package/lib/isolation.js.map +1 -0
  33. package/lib/management.d.ts +5 -0
  34. package/lib/management.d.ts.map +1 -0
  35. package/lib/management.js +75 -0
  36. package/lib/management.js.map +1 -0
  37. package/lib/microsandbox-executor.d.ts +39 -0
  38. package/lib/microsandbox-executor.d.ts.map +1 -0
  39. package/lib/microsandbox-executor.js +316 -0
  40. package/lib/microsandbox-executor.js.map +1 -0
  41. package/lib/microsandbox-runtime.d.ts +28 -0
  42. package/lib/microsandbox-runtime.d.ts.map +1 -0
  43. package/lib/microsandbox-runtime.js +164 -0
  44. package/lib/microsandbox-runtime.js.map +1 -0
  45. package/lib/projection.d.ts +46 -3
  46. package/lib/projection.d.ts.map +1 -1
  47. package/lib/projection.js +19 -8
  48. package/lib/projection.js.map +1 -1
  49. package/lib/router.d.ts +47 -0
  50. package/lib/router.d.ts.map +1 -1
  51. package/lib/router.js +218 -65
  52. package/lib/router.js.map +1 -1
  53. package/lib/sandbox-files.d.ts +16 -0
  54. package/lib/sandbox-files.d.ts.map +1 -0
  55. package/lib/sandbox-files.js +168 -0
  56. package/lib/sandbox-files.js.map +1 -0
  57. package/lib/sandbox-lifecycle.d.ts +48 -0
  58. package/lib/sandbox-lifecycle.d.ts.map +1 -0
  59. package/lib/sandbox-lifecycle.js +125 -0
  60. package/lib/sandbox-lifecycle.js.map +1 -0
  61. package/lib/security.d.ts +4 -2
  62. package/lib/security.d.ts.map +1 -1
  63. package/lib/security.js +4 -2
  64. package/lib/security.js.map +1 -1
  65. package/lib/state.d.ts +37 -0
  66. package/lib/state.d.ts.map +1 -0
  67. package/lib/state.js +146 -0
  68. package/lib/state.js.map +1 -0
  69. package/lib/tasks.d.ts +4 -0
  70. package/lib/tasks.d.ts.map +1 -1
  71. package/lib/tasks.js +18 -0
  72. package/lib/tasks.js.map +1 -1
  73. package/lib/types.d.ts +9 -0
  74. package/lib/types.d.ts.map +1 -1
  75. package/lib/types.js.map +1 -1
  76. package/lib/version.d.ts +1 -1
  77. package/lib/version.js +1 -1
  78. package/lib/visitor-read.d.ts +4 -0
  79. package/lib/visitor-read.d.ts.map +1 -0
  80. package/lib/visitor-read.js +20 -0
  81. package/lib/visitor-read.js.map +1 -0
  82. package/lib/visitor-worker.d.ts +2 -0
  83. package/lib/visitor-worker.d.ts.map +1 -0
  84. package/lib/visitor-worker.js +18 -0
  85. package/lib/visitor-worker.js.map +1 -0
  86. package/lib/visitor-worker.mjs +14686 -0
  87. package/lib/visitor-worker.py +78 -0
  88. package/lib/workspace-read.d.ts +9 -0
  89. package/lib/workspace-read.d.ts.map +1 -0
  90. package/lib/workspace-read.js +152 -0
  91. package/lib/workspace-read.js.map +1 -0
  92. package/package.json +48 -31
@@ -40,6 +40,17 @@ export interface A2ATaskView {
40
40
  * `exactOptionalPropertyTypes`.
41
41
  */
42
42
  stopReason?: string | undefined;
43
+ /**
44
+ * The visitor's submitted text, when a non-terminal edge recorded it.
45
+ *
46
+ * Monitoring reads this to show what a visitor said; the A2A wire task does
47
+ * not carry it (a peer already knows what it sent).
48
+ *
49
+ * Explicitly `| undefined` because the value round-trips through a zod schema
50
+ * whose inferred optional includes it, and this project compiles with
51
+ * `exactOptionalPropertyTypes`.
52
+ */
53
+ input?: string | undefined;
43
54
  /** Wall-clock of the last recorded edge, for `Task.status.timestamp`. */
44
55
  updatedAt: string;
45
56
  }
@@ -48,12 +59,16 @@ export interface A2ATaskProjection {
48
59
  tasks: Record<string, A2ATaskView>;
49
60
  }
50
61
  declare module '@deepseek-ai/dsh-session-projection/types' {
62
+ interface SessionProjectionStateMap {
63
+ /** Per-session A2A task fold state (plain JSON, per the cache precondition). */
64
+ a2aTask: A2ATaskState_;
65
+ }
51
66
  interface SessionProjectionMap {
52
67
  /** Per-session A2A task states, folded from `a2a/task` edges. */
53
68
  a2aTask: A2ATaskProjection;
54
69
  }
55
70
  }
56
- /** Validates the wire payload before it leaves the host. */
71
+ /** Validates the unit's state and wire payload — both are the same shape here. */
57
72
  export declare const A2A_TASK_VIEW_SCHEMA: z.ZodObject<{
58
73
  tasks: z.ZodRecord<z.ZodString, z.ZodObject<{
59
74
  taskId: z.ZodString;
@@ -69,6 +84,7 @@ export declare const A2A_TASK_VIEW_SCHEMA: z.ZodObject<{
69
84
  TASK_STATE_FAILED: "TASK_STATE_FAILED";
70
85
  TASK_STATE_REJECTED: "TASK_STATE_REJECTED";
71
86
  }>;
87
+ input: z.ZodOptional<z.ZodString>;
72
88
  output: z.ZodOptional<z.ZodString>;
73
89
  stopReason: z.ZodOptional<z.ZodString>;
74
90
  updatedAt: z.ZodString;
@@ -83,10 +99,13 @@ export interface A2ATaskState_ {
83
99
  *
84
100
  * Declared as a plain object rather than built inside `apply()` so the fold can
85
101
  * be unit-tested without a Cordis context or a session.
102
+ *
103
+ * This unit's state and view are the same shape, so one schema serves both the
104
+ * persisted-state check (`stateSchema`) and the wire check (`wire.viewSchema`).
86
105
  */
87
106
  export declare const a2aTaskProjection: {
88
107
  key: "a2aTask";
89
- schema: z.ZodObject<{
108
+ stateSchema: z.ZodObject<{
90
109
  tasks: z.ZodRecord<z.ZodString, z.ZodObject<{
91
110
  taskId: z.ZodString;
92
111
  peer: z.ZodString;
@@ -101,6 +120,7 @@ export declare const a2aTaskProjection: {
101
120
  TASK_STATE_FAILED: "TASK_STATE_FAILED";
102
121
  TASK_STATE_REJECTED: "TASK_STATE_REJECTED";
103
122
  }>;
123
+ input: z.ZodOptional<z.ZodString>;
104
124
  output: z.ZodOptional<z.ZodString>;
105
125
  stopReason: z.ZodOptional<z.ZodString>;
106
126
  updatedAt: z.ZodString;
@@ -128,6 +148,29 @@ export declare const a2aTaskProjection: {
128
148
  * @param state - the current state.
129
149
  * @returns the whole current value.
130
150
  */
131
- view(state: A2ATaskState_): A2ATaskProjection;
151
+ wire: {
152
+ viewSchema: z.ZodObject<{
153
+ tasks: z.ZodRecord<z.ZodString, z.ZodObject<{
154
+ taskId: z.ZodString;
155
+ peer: z.ZodString;
156
+ state: z.ZodEnum<{
157
+ TASK_STATE_UNSPECIFIED: "TASK_STATE_UNSPECIFIED";
158
+ TASK_STATE_SUBMITTED: "TASK_STATE_SUBMITTED";
159
+ TASK_STATE_WORKING: "TASK_STATE_WORKING";
160
+ TASK_STATE_INPUT_REQUIRED: "TASK_STATE_INPUT_REQUIRED";
161
+ TASK_STATE_AUTH_REQUIRED: "TASK_STATE_AUTH_REQUIRED";
162
+ TASK_STATE_COMPLETED: "TASK_STATE_COMPLETED";
163
+ TASK_STATE_CANCELED: "TASK_STATE_CANCELED";
164
+ TASK_STATE_FAILED: "TASK_STATE_FAILED";
165
+ TASK_STATE_REJECTED: "TASK_STATE_REJECTED";
166
+ }>;
167
+ input: z.ZodOptional<z.ZodString>;
168
+ output: z.ZodOptional<z.ZodString>;
169
+ stopReason: z.ZodOptional<z.ZodString>;
170
+ updatedAt: z.ZodString;
171
+ }, z.core.$strip>>;
172
+ }, z.core.$strip>;
173
+ view(state: A2ATaskState_): A2ATaskProjection;
174
+ };
132
175
  };
133
176
  //# sourceMappingURL=projection.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"projection.d.ts","sourceRoot":"","sources":["../src/projection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,KAAK,EAAa,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAElE,qCAAqC;AACrC,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,mFAAmF;IACnF,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,YAAY,CAAA;IACnB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC/B,yEAAyE;IACzE,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,mEAAmE;AACnE,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;CACnC;AAED,OAAO,QAAQ,2CAA2C,CAAC;IACzD,UAAU,oBAAoB;QAC5B,iEAAiE;QACjE,OAAO,EAAE,iBAAiB,CAAA;KAC3B;CACF;AAUD,4DAA4D;AAC5D,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;iBAS/B,CAAA;AAEF,oFAAoF;AACpF,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;CACnC;AAYD;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;IAQ5B;;;OAGG;YACK,aAAa;IAIrB;;;;;;;;;OASG;iBACU,aAAa,SAAS,YAAY,GAAG,aAAa;IA2B/D;;;;OAIG;gBACS,aAAa,GAAG,iBAAiB;CAG9C,CAAA"}
1
+ {"version":3,"file":"projection.d.ts","sourceRoot":"","sources":["../src/projection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,KAAK,EAAa,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAElE,qCAAqC;AACrC,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,mFAAmF;IACnF,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,YAAY,CAAA;IACnB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC/B;;;;;;;;;OASG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1B,yEAAyE;IACzE,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,mEAAmE;AACnE,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;CACnC;AAED,OAAO,QAAQ,2CAA2C,CAAC;IACzD,UAAU,yBAAyB;QACjC,gFAAgF;QAChF,OAAO,EAAE,aAAa,CAAA;KACvB;IACD,UAAU,oBAAoB;QAC5B,iEAAiE;QACjE,OAAO,EAAE,iBAAiB,CAAA;KAC3B;CACF;AAUD,kFAAkF;AAClF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;iBAU/B,CAAA;AAEF,oFAAoF;AACpF,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;CACnC;AAaD;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;IAQ5B;;;OAGG;YACK,aAAa;IAIrB;;;;;;;;;OASG;iBACU,aAAa,SAAS,YAAY,GAAG,aAAa;IAgC/D;;;;OAIG;;;;;;;;;;;;;;;;;;;;;;;oBAGW,aAAa,GAAG,iBAAiB;;CAIhD,CAAA"}
package/lib/projection.js CHANGED
@@ -23,12 +23,13 @@ const STATES = [
23
23
  'TASK_STATE_COMPLETED', 'TASK_STATE_CANCELED',
24
24
  'TASK_STATE_FAILED', 'TASK_STATE_REJECTED',
25
25
  ];
26
- /** Validates the wire payload before it leaves the host. */
26
+ /** Validates the unit's state and wire payload — both are the same shape here. */
27
27
  export const A2A_TASK_VIEW_SCHEMA = z.object({
28
28
  tasks: z.record(z.string(), z.object({
29
29
  taskId: z.string(),
30
30
  peer: z.string(),
31
31
  state: z.enum(STATES),
32
+ input: z.string().optional(),
32
33
  output: z.string().optional(),
33
34
  stopReason: z.string().optional(),
34
35
  updatedAt: z.string(),
@@ -39,14 +40,17 @@ export const A2A_TASK_VIEW_SCHEMA = z.object({
39
40
  *
40
41
  * Declared as a plain object rather than built inside `apply()` so the fold can
41
42
  * be unit-tested without a Cordis context or a session.
43
+ *
44
+ * This unit's state and view are the same shape, so one schema serves both the
45
+ * persisted-state check (`stateSchema`) and the wire check (`wire.viewSchema`).
42
46
  */
43
47
  export const a2aTaskProjection = {
44
48
  key: 'a2aTask',
45
- schema: A2A_TASK_VIEW_SCHEMA,
46
- // Bumped for A2A v1.0: task states are persisted in their new ProtoJSON
47
- // spelling, so a cache written under the v0.3 spelling must be discarded
48
- // rather than folded onto.
49
- stateVersion: 2,
49
+ stateSchema: A2A_TASK_VIEW_SCHEMA,
50
+ // v2 folded A2A v1.0 state spellings; v3 adds the visitor's submitted text
51
+ // (`input`) to the state shape, so a v2 cache must be discarded rather than
52
+ // folded onto.
53
+ stateVersion: 3,
50
54
  /**
51
55
  * State for the empty log.
52
56
  * @returns the initial state.
@@ -74,6 +78,9 @@ export const a2aTaskProjection = {
74
78
  // Terminal states are final: a late edge must not reopen a settled task.
75
79
  if (previous !== undefined && TERMINAL.has(previous.state))
76
80
  return state;
81
+ // A terminal edge carries the answer, not the question: the input recorded
82
+ // by the submitted edge carries forward so a settled row stays complete.
83
+ const input = data.input ?? previous?.input;
77
84
  return {
78
85
  tasks: {
79
86
  ...state.tasks,
@@ -81,6 +88,7 @@ export const a2aTaskProjection = {
81
88
  taskId: data.taskId,
82
89
  peer: data.peer,
83
90
  state: data.state,
91
+ ...input === undefined ? {} : { input },
84
92
  ...data.output === undefined ? {} : { output: data.output },
85
93
  ...data.stopReason === undefined ? {} : { stopReason: data.stopReason },
86
94
  // The log has no wall-clock of its own, so the fold stamps when it
@@ -96,8 +104,11 @@ export const a2aTaskProjection = {
96
104
  * @param state - the current state.
97
105
  * @returns the whole current value.
98
106
  */
99
- view(state) {
100
- return { tasks: state.tasks };
107
+ wire: {
108
+ viewSchema: A2A_TASK_VIEW_SCHEMA,
109
+ view(state) {
110
+ return { tasks: state.tasks };
111
+ },
101
112
  },
102
113
  };
103
114
  const TERMINAL = new Set([
@@ -1 +1 @@
1
- {"version":3,"file":"projection.js","sourceRoot":"","sources":["../src/projection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"projection.js","sourceRoot":"","sources":["../src/projection.ts"],"names":[],"mappings":"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"}
package/lib/router.d.ts CHANGED
@@ -26,11 +26,21 @@ export interface RouterDeps {
26
26
  };
27
27
  assertOpen: () => void;
28
28
  resolvePeerSecrets: () => Promise<Map<PeerIdentity, string>>;
29
+ /**
30
+ * Resolve the deployment owner's token, per request. The owner is the
31
+ * console on this machine: accepted only on IPC, never in the peers table.
32
+ * It retains the caretaker preset and bypasses only the visitor turn cap.
33
+ */
34
+ resolveOwnerSecret?: (() => Promise<string | undefined>) | undefined;
29
35
  identify: (token: string | undefined, secrets: ReadonlyMap<PeerIdentity, string>) => PeerIdentity | undefined;
30
36
  cardFor: (hostHeader: string | undefined) => A2AAgentCard;
31
37
  /** The authenticated extended card, or undefined when none is configured. */
32
38
  extendedCardFor: (hostHeader: string | undefined) => A2AAgentCard | undefined;
33
39
  createActivation: (peer: PeerIdentity) => Promise<Activation>;
40
+ releaseActivation: (activation: Activation) => void;
41
+ restoreActivation: (id: string, peer: PeerIdentity) => Promise<Activation | undefined>;
42
+ retainedTasks: (peer: PeerIdentity) => A2ATask[];
43
+ reserveTask: (peer: PeerIdentity) => () => void;
34
44
  submit: (activation: Activation, text: string, peer: PeerIdentity) => Promise<TaskSlot>;
35
45
  cancel: (activation: Activation, slot: TaskSlot) => void;
36
46
  taskSnapshot: (activation: Activation, slot: TaskSlot, state: A2ATaskState, artifacts: A2AArtifact[], stopReason?: string) => A2ATask;
@@ -48,11 +58,48 @@ export interface RouterDeps {
48
58
  * {@link readProjectedTask}.
49
59
  */
50
60
  readProjectedTasks?: (activation: Activation) => A2ATask[];
61
+ /**
62
+ * Resolve the admin token, per request. Present exactly when the deployment
63
+ * configured `admin.tokenEnv`; absent means the admin surface is not mounted.
64
+ */
65
+ /** The whole monitoring view over resident contexts. */
66
+ adminSnapshot?: () => AdminSnapshot;
67
+ /** Drain tasks and persist guest disks before the local owner stops the host. */
68
+ prepareStop?: () => Promise<void>;
69
+ }
70
+ /** One task as the monitoring surface shows it. */
71
+ export interface AdminTaskView {
72
+ taskId: string;
73
+ state: A2ATaskState;
74
+ /** What the visitor said, as recorded on the task's non-terminal edges. */
75
+ input?: string;
76
+ /** What the agent answered, when the task has settled with output. */
77
+ output?: string;
78
+ updatedAt: string;
79
+ }
80
+ /** One resident context as the monitoring surface shows it. */
81
+ export interface AdminContextView {
82
+ contextId: string;
83
+ peer: string;
84
+ cwd: string;
85
+ lastTouchedAt: number;
86
+ /** Tasks still in flight. */
87
+ active: number;
88
+ /** Every task this context has seen, in fold order. */
89
+ tasks: AdminTaskView[];
90
+ }
91
+ /** What `{basePath}/admin/contexts` serves. */
92
+ export interface AdminSnapshot {
93
+ generatedAt: string;
94
+ contexts: AdminContextView[];
51
95
  }
52
96
  /** The router surface the plugin body wires into routes and teardown. */
53
97
  export interface Router {
54
98
  serveCard: (req: IncomingMessage, res: ServerResponse) => void;
55
99
  serveRpc: (req: IncomingMessage, res: ServerResponse) => Promise<void>;
100
+ serveOwnerRpc: (req: IncomingMessage, res: ServerResponse) => Promise<void>;
101
+ /** The local-IPC monitoring surface under `{basePath}/admin/`. */
102
+ serveAdmin: (req: IncomingMessage, res: ServerResponse) => Promise<void>;
56
103
  /** Send every open stream its terminal frame, then end it. */
57
104
  closeStreams: () => void;
58
105
  }
@@ -1 +1 @@
1
- {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAChE,OAAO,EA2BL,KAAK,YAAY,EACjB,KAAK,WAAW,EAGhB,KAAK,OAAO,EACZ,KAAK,SAAS,EACd,KAAK,YAAY,EAClB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAChE,OAAO,EAAiC,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAA;AACpH,OAAO,KAAK,EAAE,QAAQ,EAAkB,MAAM,YAAY,CAAA;AAQ1D,wDAAwD;AACxD,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,eAAe,CAAA;IACvB,QAAQ,EAAE,eAAe,CAAA;IACzB,KAAK,EAAE,WAAW,CAAA;IAClB,WAAW,EAAE,WAAW,CAAA;IACxB,MAAM,EAAE;QAAE,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;QAAC,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE,CAAA;IAC7E,UAAU,EAAE,MAAM,IAAI,CAAA;IACtB,kBAAkB,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAA;IAC5D,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,WAAW,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,YAAY,GAAG,SAAS,CAAA;IAC7G,OAAO,EAAE,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,KAAK,YAAY,CAAA;IACzD,6EAA6E;IAC7E,eAAe,EAAE,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,KAAK,YAAY,GAAG,SAAS,CAAA;IAC7E,gBAAgB,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,OAAO,CAAC,UAAU,CAAC,CAAA;IAC7D,MAAM,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;IACvF,MAAM,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAA;IACxD,YAAY,EAAE,CACZ,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,WAAW,EAAE,EACxB,UAAU,CAAC,EAAE,MAAM,KAChB,OAAO,CAAA;IACZ;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,KAAK,OAAO,GAAG,SAAS,CAAA;IACtF;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,OAAO,EAAE,CAAA;CAC3D;AAUD,yEAAyE;AACzE,MAAM,WAAW,MAAM;IACrB,SAAS,EAAE,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,KAAK,IAAI,CAAA;IAC9D,QAAQ,EAAE,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACtE,8DAA8D;IAC9D,YAAY,EAAE,MAAM,IAAI,CAAA;CACzB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAmkBrD"}
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAChE,OAAO,EA2BL,KAAK,YAAY,EACjB,KAAK,WAAW,EAGhB,KAAK,OAAO,EACZ,KAAK,SAAS,EACd,KAAK,YAAY,EAClB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAChE,OAAO,EAAoD,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAA;AACvI,OAAO,KAAK,EAAE,QAAQ,EAAkB,MAAM,YAAY,CAAA;AAQ1D,wDAAwD;AACxD,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,eAAe,CAAA;IACvB,QAAQ,EAAE,eAAe,CAAA;IACzB,KAAK,EAAE,WAAW,CAAA;IAClB,WAAW,EAAE,WAAW,CAAA;IACxB,MAAM,EAAE;QAAE,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;QAAC,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE,CAAA;IAC7E,UAAU,EAAE,MAAM,IAAI,CAAA;IACtB,kBAAkB,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAA;IAC5D;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,CAAC,MAAM,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,GAAG,SAAS,CAAA;IACpE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,WAAW,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,YAAY,GAAG,SAAS,CAAA;IAC7G,OAAO,EAAE,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,KAAK,YAAY,CAAA;IACzD,6EAA6E;IAC7E,eAAe,EAAE,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,KAAK,YAAY,GAAG,SAAS,CAAA;IAC7E,gBAAgB,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,OAAO,CAAC,UAAU,CAAC,CAAA;IAC7D,iBAAiB,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAA;IACnD,iBAAiB,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,KAAK,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAAA;IACtF,aAAa,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,OAAO,EAAE,CAAA;IAChD,WAAW,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,MAAM,IAAI,CAAA;IAC/C,MAAM,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;IACvF,MAAM,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAA;IACxD,YAAY,EAAE,CACZ,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,WAAW,EAAE,EACxB,UAAU,CAAC,EAAE,MAAM,KAChB,OAAO,CAAA;IACZ;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,KAAK,OAAO,GAAG,SAAS,CAAA;IACtF;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,OAAO,EAAE,CAAA;IAC1D;;;OAGG;IACH,wDAAwD;IACxD,aAAa,CAAC,EAAE,MAAM,aAAa,CAAA;IACnC,iFAAiF;IACjF,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAClC;AAED,mDAAmD;AACnD,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,YAAY,CAAA;IACnB,2EAA2E;IAC3E,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,sEAAsE;IACtE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,+DAA+D;AAC/D,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,aAAa,EAAE,MAAM,CAAA;IACrB,6BAA6B;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,uDAAuD;IACvD,KAAK,EAAE,aAAa,EAAE,CAAA;CACvB;AAED,+CAA+C;AAC/C,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,gBAAgB,EAAE,CAAA;CAC7B;AAWD,yEAAyE;AACzE,MAAM,WAAW,MAAM;IACrB,SAAS,EAAE,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,KAAK,IAAI,CAAA;IAC9D,QAAQ,EAAE,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACtE,aAAa,EAAE,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3E,kEAAkE;IAClE,UAAU,EAAE,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACxE,8DAA8D;IAC9D,YAAY,EAAE,MAAM,IAAI,CAAA;CACzB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAosBrD"}