@agimon-ai/po-plan 0.0.0-alpha.0 → 0.0.0-stage

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 (71) hide show
  1. package/README.md +2 -97
  2. package/package.json +3 -161
  3. package/LICENSE +0 -21
  4. package/dist/apiContracts.cjs +0 -57
  5. package/dist/apiContracts.cjs.map +0 -1
  6. package/dist/apiContracts.d.mts +0 -53
  7. package/dist/apiContracts.d.mts.map +0 -1
  8. package/dist/apiContracts.mjs +0 -52
  9. package/dist/apiContracts.mjs.map +0 -1
  10. package/dist/config-BC-Tou05.mjs +0 -25
  11. package/dist/config-BC-Tou05.mjs.map +0 -1
  12. package/dist/config-D0iTexGm.cjs +0 -42
  13. package/dist/config-D0iTexGm.cjs.map +0 -1
  14. package/dist/config-DWo57HKB.d.mts +0 -13
  15. package/dist/config-DWo57HKB.d.mts.map +0 -1
  16. package/dist/config.cjs +0 -12
  17. package/dist/config.d.mts +0 -2
  18. package/dist/config.mjs +0 -2
  19. package/dist/extensions/mcp-ui.mjs +0 -46
  20. package/dist/extensions/mcp-ui.mjs.map +0 -1
  21. package/dist/extensions/mcp.cjs +0 -93
  22. package/dist/extensions/mcp.cjs.map +0 -1
  23. package/dist/extensions/mcp.d.mts +0 -5
  24. package/dist/extensions/mcp.d.mts.map +0 -1
  25. package/dist/extensions/mcp.mjs +0 -88
  26. package/dist/extensions/mcp.mjs.map +0 -1
  27. package/dist/extensions/server.cjs +0 -1025
  28. package/dist/extensions/server.cjs.map +0 -1
  29. package/dist/extensions/server.d.mts +0 -5
  30. package/dist/extensions/server.d.mts.map +0 -1
  31. package/dist/extensions/server.mjs +0 -993
  32. package/dist/extensions/server.mjs.map +0 -1
  33. package/dist/extensions/web.mjs +0 -861
  34. package/dist/extensions/web.mjs.map +0 -1
  35. package/dist/fableFlow-BDc8a__Y.mjs +0 -214
  36. package/dist/fableFlow-BDc8a__Y.mjs.map +0 -1
  37. package/dist/fableFlow-CzfrLPzJ.cjs +0 -279
  38. package/dist/fableFlow-CzfrLPzJ.cjs.map +0 -1
  39. package/dist/fableFlow.cjs +0 -13
  40. package/dist/fableFlow.d.mts +0 -2
  41. package/dist/fableFlow.mjs +0 -2
  42. package/dist/index-C8e7IK60.d.mts +0 -68
  43. package/dist/index-C8e7IK60.d.mts.map +0 -1
  44. package/dist/index-C9QBG9cw.d.mts +0 -51
  45. package/dist/index-C9QBG9cw.d.mts.map +0 -1
  46. package/dist/index.cjs +0 -31
  47. package/dist/index.d.mts +0 -4
  48. package/dist/index.mjs +0 -4
  49. package/dist/logSinkTelemetry.cjs +0 -42
  50. package/dist/logSinkTelemetry.cjs.map +0 -1
  51. package/dist/logSinkTelemetry.d.mts +0 -33
  52. package/dist/logSinkTelemetry.d.mts.map +0 -1
  53. package/dist/logSinkTelemetry.mjs +0 -40
  54. package/dist/logSinkTelemetry.mjs.map +0 -1
  55. package/dist/planConfig.cjs +0 -190
  56. package/dist/planConfig.cjs.map +0 -1
  57. package/dist/planConfig.d.mts +0 -47
  58. package/dist/planConfig.d.mts.map +0 -1
  59. package/dist/planConfig.mjs +0 -186
  60. package/dist/planConfig.mjs.map +0 -1
  61. package/dist/prompts-DUVUPNZd.cjs +0 -103
  62. package/dist/prompts-DUVUPNZd.cjs.map +0 -1
  63. package/dist/prompts-DnVJGtEC.mjs +0 -68
  64. package/dist/prompts-DnVJGtEC.mjs.map +0 -1
  65. package/dist/prompts.cjs +0 -8
  66. package/dist/prompts.d.mts +0 -2
  67. package/dist/prompts.mjs +0 -2
  68. package/llms.txt +0 -9
  69. package/src/prompts/po-use-plan/SKILL.md +0 -44
  70. package/src/types/planApi.ts +0 -125
  71. package/src/types/planSettings.ts +0 -78
package/README.md CHANGED
@@ -1,98 +1,3 @@
1
- # @agimon-ai/po-plan
1
+ # Temporary Holding Version
2
2
 
3
- Create and review stored plans in Po with file edits withheld, explicit completion, and normal, debug, or code review flows.
4
-
5
- Part of the [Po distribution](https://www.npmjs.com/package/@agimon-ai/po).
6
-
7
- Plan mode withholds the `edit` and `write` tools while it is active, and adds its own tools
8
- without removing anything else other packages supply. Planning instructions still require
9
- read-only exploration until the user approves implementation, except for saving the plan
10
- through `write_plan`. `bash` stays available, so Plan raises the cost of an accidental write
11
- rather than preventing one. Plan is not a sandbox or a repository permission boundary.
12
-
13
- > **Alpha:** planning flows and tool contracts may change between releases.
14
-
15
- ## Requirements
16
-
17
- - Node.js 24 or newer
18
-
19
- ## Install
20
-
21
- The seeded `modes.yaml` selects Plan in `default.packages`. Keep it there or select it through a
22
- layer; Plan remains inactive until requested.
23
-
24
- ## Start and exit
25
-
26
- Normal planning expects repository exploration and delegation where available. Debug planning
27
- separates verified evidence from hypotheses. Code Review planning inspects changes read-only,
28
- reports actionable findings with severity and file references, and proposes scoped fixes with
29
- validation steps. All three flavors use the same stored-plan and explicit approval workflow.
30
- Saved Fable sessions resume as normal planning while retaining their original model settings.
31
- The child capability ceiling comes from `doom/subagent-policy` and is removed when either
32
- provider or Plan unloads.
33
-
34
- A model restoration failure leaves Plan active and reports the failure rather than pretending
35
- the session was restored.
36
-
37
- ## Write and complete a plan
38
-
39
- `write_plan` accepts visible Markdown plan content and writes a unique file under `~/.po/plans` by
40
- default. It refuses a plan that is empty or was not presented in visible assistant output, and it
41
- validates the destination before writing. The plan path and content become visible session state.
42
-
43
- After a plan exists, `complete_plan` asks whether to exit or continue planning. The user must
44
- explicitly approve exit. If the selected mode already exposes `ask_user_question`, Plan reuses it;
45
- it does not activate an omitted feedback layer.
46
-
47
- ## Read and edit the plan in the cockpit
48
-
49
- Once `write_plan` succeeds, a `plan` group appears in the cockpit's activity dock and stays for the
50
- rest of the session, including after Plan mode is exited: that is when the agent starts
51
- implementing, which is when the plan is most worth having open. The row opens a temporary tab that
52
- renders the plan as Markdown, with a `source` view that edits it and saves back to the plan file.
53
-
54
- The agent reads the plan file at the start of every turn, so a saved edit is what it implements. A
55
- save carries the hash the reader loaded and is refused if the agent rewrote the plan in the
56
- meantime, rather than overwriting it.
57
-
58
- The cockpit reaches the plan through this package's session API, mounted at `/api/plugin/plans`.
59
- Because a host imports the built entry, a change here needs `pnpm build` and `po sync` before a
60
- running cockpit sees it.
61
-
62
- ## Configure models and storage
63
-
64
- Put planning settings in the repository's `.po/config.yaml` or the global
65
- `~/.po/config.yaml`:
66
-
67
- ```yaml
68
- modes:
69
- planning:
70
- main:
71
- model: provider/planning-model
72
- thinking: high
73
- subagents:
74
- model: provider/research-model
75
- thinking: medium
76
- plansDirectory: ~/.po/plans
77
- ```
78
-
79
- `main` controls the planning model, `subagents` controls delegated research defaults, and
80
- `plansDirectory` can be absolute, repository-relative, or under `~`. Planning and delegated model
81
- calls consume provider quota.
82
-
83
- ## Public API
84
-
85
- ## Development
86
-
87
- ```bash
88
- pnpm build
89
- pnpm typecheck
90
- pnpm test
91
- pnpm lint
92
- ```
93
-
94
- Maintained by [Agimon](https://agimon.ai/about).
95
-
96
- ## License
97
-
98
- MIT
3
+ This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
package/package.json CHANGED
@@ -1,164 +1,6 @@
1
1
  {
2
2
  "name": "@agimon-ai/po-plan",
3
- "version": "0.0.0-alpha.0",
4
- "description": "Reviewable Pi planning mode that removes file-editing tools and persists implementation plans.",
5
- "keywords": [
6
- "ai",
7
- "coding-agent",
8
- "developer-tools",
9
- "implementation-planning",
10
- "pi-coding-agent",
11
- "pi-extension",
12
- "pi-package",
13
- "planMode",
14
- "po",
15
- "tool-restrictions"
16
- ],
17
- "homepage": "https://agimon.ai",
18
- "bugs": {
19
- "url": "https://github.com/AgiFlow/po/issues"
20
- },
21
- "license": "MIT",
22
- "author": "Vuong Ngo",
23
- "repository": {
24
- "type": "git",
25
- "url": "git+https://github.com/AgiFlow/po.git",
26
- "directory": "packages/minor/po-plan"
27
- },
28
- "files": [
29
- "dist",
30
- "llms.txt",
31
- "src/prompts",
32
- "src/types/planApi.ts",
33
- "src/types/planSettings.ts",
34
- "README.md",
35
- "LICENSE",
36
- "package.json"
37
- ],
38
- "type": "module",
39
- "main": "./dist/index.cjs",
40
- "module": "./dist/index.mjs",
41
- "types": "./dist/index.d.mts",
42
- "jsnext:main": "./dist/index.mjs",
43
- "exports": {
44
- ".": {
45
- "types": "./dist/index.d.mts",
46
- "import": "./dist/index.mjs",
47
- "require": "./dist/index.cjs"
48
- },
49
- "./config": {
50
- "types": "./dist/config.d.mts",
51
- "import": "./dist/config.mjs",
52
- "require": "./dist/config.cjs"
53
- },
54
- "./extensions/server": {
55
- "types": "./dist/extensions/server.d.mts",
56
- "import": "./dist/extensions/server.mjs",
57
- "require": "./dist/extensions/server.cjs"
58
- },
59
- "./extensions/web": {
60
- "import": "./dist/extensions/web.mjs"
61
- },
62
- "./fableFlow": {
63
- "types": "./dist/fableFlow.d.mts",
64
- "import": "./dist/fableFlow.mjs",
65
- "require": "./dist/fableFlow.cjs"
66
- },
67
- "./logSinkTelemetry": {
68
- "types": "./dist/logSinkTelemetry.d.mts",
69
- "import": "./dist/logSinkTelemetry.mjs",
70
- "require": "./dist/logSinkTelemetry.cjs"
71
- },
72
- "./planConfig": {
73
- "types": "./dist/planConfig.d.mts",
74
- "import": "./dist/planConfig.mjs",
75
- "require": "./dist/planConfig.cjs"
76
- },
77
- "./prompts": {
78
- "types": "./dist/prompts.d.mts",
79
- "import": "./dist/prompts.mjs",
80
- "require": "./dist/prompts.cjs"
81
- },
82
- "./package.json": "./package.json"
83
- },
84
- "publishConfig": {
85
- "access": "public",
86
- "registry": "https://registry.npmjs.org/"
87
- },
88
- "dependencies": {
89
- "@agimon-ai/po-config": "0.0.0-alpha.0",
90
- "@agimon-ai/po-core": "0.0.0-alpha.0",
91
- "@agimon-ai/po-minor-mode": "0.0.0-alpha.0",
92
- "@agimon-ai/po-telemetry": "0.0.0-alpha.0",
93
- "@agimon-ai/po-web-components": "0.0.0-alpha.0",
94
- "@agimon-ai/po-web-security": "0.0.0-alpha.0",
95
- "@deepseek-ai/cordis": "4.0.4",
96
- "hono": "4.13.12",
97
- "typebox": "1.3.34"
98
- },
99
- "devDependencies": {
100
- "@agimon-ai/po-build": "0.0.0-alpha.0",
101
- "@earendil-works/pi-coding-agent": "1.0.2",
102
- "@tanstack/react-store": "0.11.2",
103
- "@tanstack/store": "0.11.2",
104
- "@types/node": "26.6.4",
105
- "@types/react": "19.3.0",
106
- "@types/react-dom": "19.3.0",
107
- "@vitest/coverage-v8": "5.0.3",
108
- "react": "19.3.0",
109
- "react-dom": "19.3.0",
110
- "typescript": "7.0.2",
111
- "vitest": "5.0.3"
112
- },
113
- "peerDependencies": {
114
- "@earendil-works/pi-coding-agent": "1.0.2"
115
- },
116
- "engines": {
117
- "node": ">=24"
118
- },
119
- "poMcp": {
120
- "entry": "./generated/mcp.ts",
121
- "dist": "./dist/extensions/mcp.mjs",
122
- "scopes": [
123
- "session"
124
- ],
125
- "ui": {
126
- "entry": "./generated/mcp-ui.ts",
127
- "dist": "./dist/extensions/mcp-ui.mjs",
128
- "widgets": [
129
- "@agimon-ai/po-plan/complete_plan",
130
- "@agimon-ai/po-plan/record_debug_evidence",
131
- "@agimon-ai/po-plan/write_plan"
132
- ]
133
- }
134
- },
135
- "poServer": {
136
- "entry": "./generated/server.ts",
137
- "dist": "./dist/extensions/server.mjs",
138
- "scopes": [
139
- "session"
140
- ],
141
- "contracts": {
142
- "entry": "./src/exports/apiContracts.ts",
143
- "dist": "./dist/apiContracts.mjs"
144
- }
145
- },
146
- "poWeb": {
147
- "pluginId": "plan",
148
- "channels": [],
149
- "client": "./dist/extensions/web.mjs",
150
- "scopes": [
151
- "global",
152
- "workspace",
153
- "session"
154
- ]
155
- },
156
- "scripts": {
157
- "build": "tsdown && tsdown --config tsdown.mcp.config.ts",
158
- "build:mcp": "tsdown --config tsdown.mcp.config.ts",
159
- "test": "vitest --run",
160
- "typecheck": "tsc --noEmit && tsc --noEmit -p tsconfig.web.json && tsc --noEmit -p tsconfig.mcp.json",
161
- "lint": "oxlint . && oxfmt . --check",
162
- "fixcode": "oxlint . --fix && oxfmt ."
163
- }
3
+ "version": "0.0.0-stage",
4
+ "stub": true,
5
+ "description": "Temporary package placeholder for staged publishing"
164
6
  }
package/LICENSE DELETED
@@ -1,21 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 Vuong Ngo
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
@@ -1,57 +0,0 @@
1
- Object.defineProperties(exports, {
2
- __esModule: { value: true },
3
- [Symbol.toStringTag]: { value: "Module" }
4
- });
5
- let _agimon_ai_po_core_apiContracts = require("@agimon-ai/po-core/apiContracts");
6
- let typebox = require("typebox");
7
- //#region src/schemas/apiContracts.ts
8
- const S = typebox.Type.String();
9
- const B = typebox.Type.Boolean();
10
- const O = typebox.Type.Optional;
11
- const PlanDetailSchema = typebox.Type.Object({
12
- path: S,
13
- title: S,
14
- writtenAt: S,
15
- planId: O(S),
16
- content: S,
17
- hash: S,
18
- unavailable: B,
19
- reason: O(S)
20
- });
21
- const apiContracts = (0, _agimon_ai_po_core_apiContracts.defineApiContract)({
22
- version: 1,
23
- sockets: [],
24
- dynamic: [],
25
- http: [{
26
- id: "plan.current",
27
- scope: "session",
28
- basePath: "plans",
29
- path: "/current",
30
- method: "GET",
31
- authentication: "owner",
32
- description: "Read the current plan.",
33
- responses: (0, _agimon_ai_po_core_apiContracts.jsonApiResponses)(PlanDetailSchema)
34
- }, {
35
- id: "plan.save",
36
- scope: "session",
37
- basePath: "plans",
38
- path: "/content",
39
- method: "PUT",
40
- authentication: "owner",
41
- description: "Save the plan if its hash has not changed.",
42
- body: {
43
- required: true,
44
- contentType: "application/json",
45
- schema: typebox.Type.Object({
46
- expectedHash: S,
47
- content: S
48
- })
49
- },
50
- responses: (0, _agimon_ai_po_core_apiContracts.jsonApiResponses)(typebox.Type.Object({ hash: S }))
51
- }]
52
- });
53
- //#endregion
54
- exports.apiContracts = apiContracts;
55
- exports.default = apiContracts;
56
-
57
- //# sourceMappingURL=apiContracts.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"apiContracts.cjs","names":["Type","defineApiContract","jsonApiResponses"],"sources":["../src/schemas/apiContracts.ts"],"sourcesContent":["import { defineApiContract, jsonApiResponses } from '@agimon-ai/po-core/apiContracts';\nimport { Type } from 'typebox';\n\nconst S = Type.String();\nconst B = Type.Boolean();\nconst O = Type.Optional;\nexport const PlanDetailSchema = Type.Object({\n path: S,\n title: S,\n writtenAt: S,\n planId: O(S),\n content: S,\n hash: S,\n unavailable: B,\n reason: O(S),\n});\nexport const apiContracts = defineApiContract({\n version: 1,\n sockets: [],\n dynamic: [],\n http: [\n {\n id: 'plan.current',\n scope: 'session',\n basePath: 'plans',\n path: '/current',\n method: 'GET',\n authentication: 'owner',\n description: 'Read the current plan.',\n responses: jsonApiResponses(PlanDetailSchema),\n },\n {\n id: 'plan.save',\n scope: 'session',\n basePath: 'plans',\n path: '/content',\n method: 'PUT',\n authentication: 'owner',\n description: 'Save the plan if its hash has not changed.',\n body: { required: true, contentType: 'application/json', schema: Type.Object({ expectedHash: S, content: S }) },\n responses: jsonApiResponses(Type.Object({ hash: S })),\n },\n ],\n});\nexport default apiContracts;\n"],"mappings":";;;;;;;AAGA,MAAM,IAAIA,QAAAA,KAAK,OAAO;AACtB,MAAM,IAAIA,QAAAA,KAAK,QAAQ;AACvB,MAAM,IAAIA,QAAAA,KAAK;AACf,MAAa,mBAAmBA,QAAAA,KAAK,OAAO;CAC1C,MAAM;CACN,OAAO;CACP,WAAW;CACX,QAAQ,EAAE,CAAC;CACX,SAAS;CACT,MAAM;CACN,aAAa;CACb,QAAQ,EAAE,CAAC;AACb,CAAC;AACD,MAAa,gBAAA,GAAeC,gCAAAA,kBAAAA,CAAkB;CAC5C,SAAS;CACT,SAAS,CAAC;CACV,SAAS,CAAC;CACV,MAAM,CACJ;EACE,IAAI;EACJ,OAAO;EACP,UAAU;EACV,MAAM;EACN,QAAQ;EACR,gBAAgB;EAChB,aAAa;EACb,YAAA,GAAWC,gCAAAA,iBAAAA,CAAiB,gBAAgB;CAC9C,GACA;EACE,IAAI;EACJ,OAAO;EACP,UAAU;EACV,MAAM;EACN,QAAQ;EACR,gBAAgB;EAChB,aAAa;EACb,MAAM;GAAE,UAAU;GAAM,aAAa;GAAoB,QAAQF,QAAAA,KAAK,OAAO;IAAE,cAAc;IAAG,SAAS;GAAE,CAAC;EAAE;EAC9G,YAAA,GAAWE,gCAAAA,iBAAAA,CAAiBF,QAAAA,KAAK,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;CACtD,CACF;AACF,CAAC"}
@@ -1,53 +0,0 @@
1
- import { Type } from "typebox";
2
- //#region src/schemas/apiContracts.d.ts
3
- export declare const apiContracts: {
4
- version: 1;
5
- protocols?: Record<string, string> | undefined;
6
- schemas?: Record<string, boolean | object> | undefined;
7
- http: {
8
- id: string;
9
- scope: "global" | "session" | "workspace";
10
- basePath?: string | undefined;
11
- path: string;
12
- method: "DELETE" | "GET" | "HEAD" | "OPTIONS" | "PATCH" | "POST" | "PUT";
13
- description: string;
14
- availability?: string | undefined;
15
- authentication: "device" | "none" | "owner";
16
- parameters?: {
17
- name: string;
18
- in: "header" | "path" | "query";
19
- required: boolean;
20
- schema: boolean | object;
21
- }[] | undefined;
22
- body?: {
23
- contentType: string;
24
- contentTypes?: string[] | undefined;
25
- required: boolean;
26
- schema: boolean | object;
27
- } | undefined;
28
- responses: Record<string, {
29
- description: string;
30
- contentType?: string | undefined;
31
- schema?: boolean | object | undefined;
32
- events?: Record<string, boolean | object> | undefined;
33
- }>;
34
- }[];
35
- sockets: {
36
- id: string;
37
- scope: "global" | "session" | "workspace";
38
- description: string;
39
- availability?: string | undefined;
40
- service: string;
41
- member: string;
42
- direction: "client-to-server" | "server-to-client";
43
- kind: "channel" | "method" | "state";
44
- input: boolean | object;
45
- output?: boolean | object | undefined;
46
- errors?: boolean | object | undefined;
47
- }[];
48
- dynamic: string[];
49
- gaps?: string[] | undefined;
50
- };
51
- //#endregion
52
- export { apiContracts as default };
53
- //# sourceMappingURL=apiContracts.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"apiContracts.d.mts","names":[],"sources":["../src/schemas/apiContracts.ts"],"mappings":";;qBAgBa"}
@@ -1,52 +0,0 @@
1
- import { defineApiContract, jsonApiResponses } from "@agimon-ai/po-core/apiContracts";
2
- import { Type } from "typebox";
3
- //#region src/schemas/apiContracts.ts
4
- const S = Type.String();
5
- const B = Type.Boolean();
6
- const O = Type.Optional;
7
- const PlanDetailSchema = Type.Object({
8
- path: S,
9
- title: S,
10
- writtenAt: S,
11
- planId: O(S),
12
- content: S,
13
- hash: S,
14
- unavailable: B,
15
- reason: O(S)
16
- });
17
- const apiContracts = defineApiContract({
18
- version: 1,
19
- sockets: [],
20
- dynamic: [],
21
- http: [{
22
- id: "plan.current",
23
- scope: "session",
24
- basePath: "plans",
25
- path: "/current",
26
- method: "GET",
27
- authentication: "owner",
28
- description: "Read the current plan.",
29
- responses: jsonApiResponses(PlanDetailSchema)
30
- }, {
31
- id: "plan.save",
32
- scope: "session",
33
- basePath: "plans",
34
- path: "/content",
35
- method: "PUT",
36
- authentication: "owner",
37
- description: "Save the plan if its hash has not changed.",
38
- body: {
39
- required: true,
40
- contentType: "application/json",
41
- schema: Type.Object({
42
- expectedHash: S,
43
- content: S
44
- })
45
- },
46
- responses: jsonApiResponses(Type.Object({ hash: S }))
47
- }]
48
- });
49
- //#endregion
50
- export { apiContracts, apiContracts as default };
51
-
52
- //# sourceMappingURL=apiContracts.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"apiContracts.mjs","names":[],"sources":["../src/schemas/apiContracts.ts"],"sourcesContent":["import { defineApiContract, jsonApiResponses } from '@agimon-ai/po-core/apiContracts';\nimport { Type } from 'typebox';\n\nconst S = Type.String();\nconst B = Type.Boolean();\nconst O = Type.Optional;\nexport const PlanDetailSchema = Type.Object({\n path: S,\n title: S,\n writtenAt: S,\n planId: O(S),\n content: S,\n hash: S,\n unavailable: B,\n reason: O(S),\n});\nexport const apiContracts = defineApiContract({\n version: 1,\n sockets: [],\n dynamic: [],\n http: [\n {\n id: 'plan.current',\n scope: 'session',\n basePath: 'plans',\n path: '/current',\n method: 'GET',\n authentication: 'owner',\n description: 'Read the current plan.',\n responses: jsonApiResponses(PlanDetailSchema),\n },\n {\n id: 'plan.save',\n scope: 'session',\n basePath: 'plans',\n path: '/content',\n method: 'PUT',\n authentication: 'owner',\n description: 'Save the plan if its hash has not changed.',\n body: { required: true, contentType: 'application/json', schema: Type.Object({ expectedHash: S, content: S }) },\n responses: jsonApiResponses(Type.Object({ hash: S })),\n },\n ],\n});\nexport default apiContracts;\n"],"mappings":";;;AAGA,MAAM,IAAI,KAAK,OAAO;AACtB,MAAM,IAAI,KAAK,QAAQ;AACvB,MAAM,IAAI,KAAK;AACf,MAAa,mBAAmB,KAAK,OAAO;CAC1C,MAAM;CACN,OAAO;CACP,WAAW;CACX,QAAQ,EAAE,CAAC;CACX,SAAS;CACT,MAAM;CACN,aAAa;CACb,QAAQ,EAAE,CAAC;AACb,CAAC;AACD,MAAa,eAAe,kBAAkB;CAC5C,SAAS;CACT,SAAS,CAAC;CACV,SAAS,CAAC;CACV,MAAM,CACJ;EACE,IAAI;EACJ,OAAO;EACP,UAAU;EACV,MAAM;EACN,QAAQ;EACR,gBAAgB;EAChB,aAAa;EACb,WAAW,iBAAiB,gBAAgB;CAC9C,GACA;EACE,IAAI;EACJ,OAAO;EACP,UAAU;EACV,MAAM;EACN,QAAQ;EACR,gBAAgB;EAChB,aAAa;EACb,MAAM;GAAE,UAAU;GAAM,aAAa;GAAoB,QAAQ,KAAK,OAAO;IAAE,cAAc;IAAG,SAAS;GAAE,CAAC;EAAE;EAC9G,WAAW,iBAAiB,KAAK,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;CACtD,CACF;AACF,CAAC"}
@@ -1,25 +0,0 @@
1
- import { getHarnessState, globalDoomConfigPath, loadDoomConfig, loadHarnessState, mergeDoomConfigs, parseDoomConfig, parsePlanningModeConfig, repositoryDoomConfigPath, resolvePlanningPlansDirectory } from "@agimon-ai/po-config";
2
- //#region src/schemas/plan/config.ts
3
- const DEFAULT_PROJECT_TRUST = "ask";
4
- function parseDoomConfig$1(content, filePath) {
5
- const config = parseDoomConfig(content, filePath);
6
- return config.modes ? { modes: config.modes } : {};
7
- }
8
- function mergeDoomConfigs$1(globalConfig, repositoryConfig) {
9
- const merged = mergeDoomConfigs({
10
- ...globalConfig,
11
- projectTrust: DEFAULT_PROJECT_TRUST
12
- }, {
13
- ...repositoryConfig,
14
- projectTrust: DEFAULT_PROJECT_TRUST
15
- });
16
- return merged.modes ? { modes: merged.modes } : {};
17
- }
18
- function loadDoomConfig$1(repoRoot, homeDirectory) {
19
- const config = loadDoomConfig(repoRoot, homeDirectory);
20
- return config.modes ? { modes: config.modes } : {};
21
- }
22
- //#endregion
23
- export { mergeDoomConfigs$1 as a, repositoryDoomConfigPath as c, loadHarnessState as i, resolvePlanningPlansDirectory as l, globalDoomConfigPath as n, parseDoomConfig$1 as o, loadDoomConfig$1 as r, parsePlanningModeConfig as s, getHarnessState as t };
24
-
25
- //# sourceMappingURL=config-BC-Tou05.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config-BC-Tou05.mjs","names":["parseDoomConfig","parseSharedDoomConfig","mergeDoomConfigs","mergeSharedDoomConfigs","loadDoomConfig","loadSharedDoomConfig"],"sources":["../src/schemas/plan/config.ts"],"sourcesContent":["import {\n getHarnessState,\n globalDoomConfigPath,\n loadHarnessState,\n loadDoomConfig as loadSharedDoomConfig,\n mergeDoomConfigs as mergeSharedDoomConfigs,\n type PlanningAgentConfig,\n type PlanningModeConfig,\n type PlanningThinkingLevel,\n parsePlanningModeConfig,\n parseDoomConfig as parseSharedDoomConfig,\n repositoryDoomConfigPath,\n resolvePlanningPlansDirectory,\n} from '@agimon-ai/po-config';\n\nexport type { PlanningAgentConfig, PlanningModeConfig, PlanningThinkingLevel };\n\nexport interface DoomConfig {\n modes?: {\n planning?: PlanningModeConfig;\n };\n}\n\nconst DEFAULT_PROJECT_TRUST = 'ask' as const;\n\nexport {\n getHarnessState,\n globalDoomConfigPath,\n loadHarnessState,\n parsePlanningModeConfig,\n repositoryDoomConfigPath,\n resolvePlanningPlansDirectory,\n};\n\nexport function parseDoomConfig(content: string, filePath: string): DoomConfig {\n const config = parseSharedDoomConfig(content, filePath);\n return config.modes ? { modes: config.modes } : {};\n}\n\nexport function mergeDoomConfigs(globalConfig: DoomConfig, repositoryConfig: DoomConfig): DoomConfig {\n const merged = mergeSharedDoomConfigs(\n { ...globalConfig, projectTrust: DEFAULT_PROJECT_TRUST },\n { ...repositoryConfig, projectTrust: DEFAULT_PROJECT_TRUST },\n );\n return merged.modes ? { modes: merged.modes } : {};\n}\n\nexport function loadDoomConfig(repoRoot: string, homeDirectory?: string): DoomConfig {\n const config = loadSharedDoomConfig(repoRoot, homeDirectory);\n return config.modes ? { modes: config.modes } : {};\n}\n"],"mappings":";;AAuBA,MAAM,wBAAwB;AAW9B,SAAgBA,kBAAgB,SAAiB,UAA8B;CAC7E,MAAM,SAASC,gBAAsB,SAAS,QAAQ;CACtD,OAAO,OAAO,QAAQ,EAAE,OAAO,OAAO,MAAM,IAAI,CAAC;AACnD;AAEA,SAAgBC,mBAAiB,cAA0B,kBAA0C;CACnG,MAAM,SAASC,iBACb;EAAE,GAAG;EAAc,cAAc;CAAsB,GACvD;EAAE,GAAG;EAAkB,cAAc;CAAsB,CAC7D;CACA,OAAO,OAAO,QAAQ,EAAE,OAAO,OAAO,MAAM,IAAI,CAAC;AACnD;AAEA,SAAgBC,iBAAe,UAAkB,eAAoC;CACnF,MAAM,SAASC,eAAqB,UAAU,aAAa;CAC3D,OAAO,OAAO,QAAQ,EAAE,OAAO,OAAO,MAAM,IAAI,CAAC;AACnD"}
@@ -1,42 +0,0 @@
1
- let _agimon_ai_po_config = require("@agimon-ai/po-config");
2
- //#region src/schemas/plan/config.ts
3
- const DEFAULT_PROJECT_TRUST = "ask";
4
- function parseDoomConfig(content, filePath) {
5
- const config = (0, _agimon_ai_po_config.parseDoomConfig)(content, filePath);
6
- return config.modes ? { modes: config.modes } : {};
7
- }
8
- function mergeDoomConfigs(globalConfig, repositoryConfig) {
9
- const merged = (0, _agimon_ai_po_config.mergeDoomConfigs)({
10
- ...globalConfig,
11
- projectTrust: DEFAULT_PROJECT_TRUST
12
- }, {
13
- ...repositoryConfig,
14
- projectTrust: DEFAULT_PROJECT_TRUST
15
- });
16
- return merged.modes ? { modes: merged.modes } : {};
17
- }
18
- function loadDoomConfig(repoRoot, homeDirectory) {
19
- const config = (0, _agimon_ai_po_config.loadDoomConfig)(repoRoot, homeDirectory);
20
- return config.modes ? { modes: config.modes } : {};
21
- }
22
- //#endregion
23
- Object.defineProperty(exports, "loadDoomConfig", {
24
- enumerable: true,
25
- get: function() {
26
- return loadDoomConfig;
27
- }
28
- });
29
- Object.defineProperty(exports, "mergeDoomConfigs", {
30
- enumerable: true,
31
- get: function() {
32
- return mergeDoomConfigs;
33
- }
34
- });
35
- Object.defineProperty(exports, "parseDoomConfig", {
36
- enumerable: true,
37
- get: function() {
38
- return parseDoomConfig;
39
- }
40
- });
41
-
42
- //# sourceMappingURL=config-D0iTexGm.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config-D0iTexGm.cjs","names":["parseSharedDoomConfig","mergeSharedDoomConfigs","loadSharedDoomConfig"],"sources":["../src/schemas/plan/config.ts"],"sourcesContent":["import {\n getHarnessState,\n globalDoomConfigPath,\n loadHarnessState,\n loadDoomConfig as loadSharedDoomConfig,\n mergeDoomConfigs as mergeSharedDoomConfigs,\n type PlanningAgentConfig,\n type PlanningModeConfig,\n type PlanningThinkingLevel,\n parsePlanningModeConfig,\n parseDoomConfig as parseSharedDoomConfig,\n repositoryDoomConfigPath,\n resolvePlanningPlansDirectory,\n} from '@agimon-ai/po-config';\n\nexport type { PlanningAgentConfig, PlanningModeConfig, PlanningThinkingLevel };\n\nexport interface DoomConfig {\n modes?: {\n planning?: PlanningModeConfig;\n };\n}\n\nconst DEFAULT_PROJECT_TRUST = 'ask' as const;\n\nexport {\n getHarnessState,\n globalDoomConfigPath,\n loadHarnessState,\n parsePlanningModeConfig,\n repositoryDoomConfigPath,\n resolvePlanningPlansDirectory,\n};\n\nexport function parseDoomConfig(content: string, filePath: string): DoomConfig {\n const config = parseSharedDoomConfig(content, filePath);\n return config.modes ? { modes: config.modes } : {};\n}\n\nexport function mergeDoomConfigs(globalConfig: DoomConfig, repositoryConfig: DoomConfig): DoomConfig {\n const merged = mergeSharedDoomConfigs(\n { ...globalConfig, projectTrust: DEFAULT_PROJECT_TRUST },\n { ...repositoryConfig, projectTrust: DEFAULT_PROJECT_TRUST },\n );\n return merged.modes ? { modes: merged.modes } : {};\n}\n\nexport function loadDoomConfig(repoRoot: string, homeDirectory?: string): DoomConfig {\n const config = loadSharedDoomConfig(repoRoot, homeDirectory);\n return config.modes ? { modes: config.modes } : {};\n}\n"],"mappings":";;AAuBA,MAAM,wBAAwB;AAW9B,SAAgB,gBAAgB,SAAiB,UAA8B;CAC7E,MAAM,UAAA,GAASA,qBAAAA,gBAAAA,CAAsB,SAAS,QAAQ;CACtD,OAAO,OAAO,QAAQ,EAAE,OAAO,OAAO,MAAM,IAAI,CAAC;AACnD;AAEA,SAAgB,iBAAiB,cAA0B,kBAA0C;CACnG,MAAM,UAAA,GAASC,qBAAAA,iBAAAA,CACb;EAAE,GAAG;EAAc,cAAc;CAAsB,GACvD;EAAE,GAAG;EAAkB,cAAc;CAAsB,CAC7D;CACA,OAAO,OAAO,QAAQ,EAAE,OAAO,OAAO,MAAM,IAAI,CAAC;AACnD;AAEA,SAAgB,eAAe,UAAkB,eAAoC;CACnF,MAAM,UAAA,GAASC,qBAAAA,eAAAA,CAAqB,UAAU,aAAa;CAC3D,OAAO,OAAO,QAAQ,EAAE,OAAO,OAAO,MAAM,IAAI,CAAC;AACnD"}
@@ -1,13 +0,0 @@
1
- import { PlanningAgentConfig, PlanningModeConfig, PlanningThinkingLevel, getHarnessState, globalDoomConfigPath, loadHarnessState, parsePlanningModeConfig, repositoryDoomConfigPath, resolvePlanningPlansDirectory } from "@agimon-ai/po-config";
2
- //#region src/schemas/plan/config.d.ts
3
- interface DoomConfig {
4
- modes?: {
5
- planning?: PlanningModeConfig;
6
- };
7
- }
8
- declare function parseDoomConfig$1(content: string, filePath: string): DoomConfig;
9
- declare function mergeDoomConfigs$1(globalConfig: DoomConfig, repositoryConfig: DoomConfig): DoomConfig;
10
- declare function loadDoomConfig$1(repoRoot: string, homeDirectory?: string): DoomConfig;
11
- //#endregion
12
- export { getHarnessState as a, loadHarnessState as c, parsePlanningModeConfig as d, repositoryDoomConfigPath as f, PlanningThinkingLevel as i, mergeDoomConfigs$1 as l, PlanningAgentConfig as n, globalDoomConfigPath as o, resolvePlanningPlansDirectory as p, PlanningModeConfig as r, loadDoomConfig$1 as s, DoomConfig as t, parseDoomConfig$1 as u };
13
- //# sourceMappingURL=config-DWo57HKB.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config-DWo57HKB.d.mts","names":["parseDoomConfig","mergeDoomConfigs","loadDoomConfig"],"sources":["../src/schemas/plan/config.ts"],"mappings":";;UAiBiB;EACf;IACE,WAAW;;;iBAeCA,kBAAgB,iBAAiB,mBAAmB;iBAKpDC,mBAAiB,cAAc,YAAY,kBAAkB,aAAa;iBAQ1EC,iBAAe,kBAAkB,yBAAyB"}
package/dist/config.cjs DELETED
@@ -1,12 +0,0 @@
1
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_config = require("./config-D0iTexGm.cjs");
3
- let _agimon_ai_po_config = require("@agimon-ai/po-config");
4
- exports.getHarnessState = _agimon_ai_po_config.getHarnessState;
5
- exports.globalDoomConfigPath = _agimon_ai_po_config.globalDoomConfigPath;
6
- exports.loadDoomConfig = require_config.loadDoomConfig;
7
- exports.loadHarnessState = _agimon_ai_po_config.loadHarnessState;
8
- exports.mergeDoomConfigs = require_config.mergeDoomConfigs;
9
- exports.parseDoomConfig = require_config.parseDoomConfig;
10
- exports.parsePlanningModeConfig = _agimon_ai_po_config.parsePlanningModeConfig;
11
- exports.repositoryDoomConfigPath = _agimon_ai_po_config.repositoryDoomConfigPath;
12
- exports.resolvePlanningPlansDirectory = _agimon_ai_po_config.resolvePlanningPlansDirectory;
package/dist/config.d.mts DELETED
@@ -1,2 +0,0 @@
1
- import { a as getHarnessState, c as loadHarnessState, d as parsePlanningModeConfig, f as repositoryDoomConfigPath, i as PlanningThinkingLevel, l as mergeDoomConfigs, n as PlanningAgentConfig, o as globalDoomConfigPath, p as resolvePlanningPlansDirectory, r as PlanningModeConfig, s as loadDoomConfig, t as DoomConfig, u as parseDoomConfig } from "./config-DWo57HKB.mjs";
2
- export { DoomConfig, type PlanningAgentConfig, type PlanningModeConfig, type PlanningThinkingLevel, getHarnessState, globalDoomConfigPath, loadDoomConfig, loadHarnessState, mergeDoomConfigs, parseDoomConfig, parsePlanningModeConfig, repositoryDoomConfigPath, resolvePlanningPlansDirectory };
package/dist/config.mjs DELETED
@@ -1,2 +0,0 @@
1
- import { a as mergeDoomConfigs, c as repositoryDoomConfigPath, i as loadHarnessState, l as resolvePlanningPlansDirectory, n as globalDoomConfigPath, o as parseDoomConfig, r as loadDoomConfig, s as parsePlanningModeConfig, t as getHarnessState } from "./config-BC-Tou05.mjs";
2
- export { getHarnessState, globalDoomConfigPath, loadDoomConfig, loadHarnessState, mergeDoomConfigs, parseDoomConfig, parsePlanningModeConfig, repositoryDoomConfigPath, resolvePlanningPlansDirectory };
@@ -1,46 +0,0 @@
1
- import { defineMcpWidget } from "@agimon-ai/po-core/web";
2
- import { McpToolFields, McpToolFrame, McpToolOutput } from "@agimon-ai/po-web-components";
3
- import { jsx, jsxs } from "react/jsx-runtime";
4
- //#region src/extensions/workspaces/sessions/(frontend)/tool/complete_plan.mcp.tsx
5
- function CompletePlanMcpWidget(props) {
6
- return /* @__PURE__ */ jsx(McpToolFrame, {
7
- ...props,
8
- title: "Request plan approval",
9
- children: /* @__PURE__ */ jsx(McpToolOutput, { result: props.result })
10
- });
11
- }
12
- var complete_plan_mcp_default = defineMcpWidget(CompletePlanMcpWidget);
13
- //#endregion
14
- //#region src/extensions/workspaces/sessions/(frontend)/tool/record_debug_evidence.mcp.tsx
15
- function RecordDebugEvidenceMcpWidget(props) {
16
- return /* @__PURE__ */ jsxs(McpToolFrame, {
17
- ...props,
18
- title: "Record debug evidence",
19
- children: [/* @__PURE__ */ jsx(McpToolFields, { fields: [
20
- ["Issue", props.args.issue],
21
- ["Expected behavior", props.args.expectedBehavior],
22
- ["Observed behavior", props.args.actualBehavior]
23
- ] }), /* @__PURE__ */ jsx(McpToolOutput, { result: props.result })]
24
- });
25
- }
26
- var record_debug_evidence_mcp_default = defineMcpWidget(RecordDebugEvidenceMcpWidget);
27
- //#endregion
28
- //#region src/extensions/workspaces/sessions/(frontend)/tool/write_plan.mcp.tsx
29
- function WritePlanMcpWidget(props) {
30
- return /* @__PURE__ */ jsxs(McpToolFrame, {
31
- ...props,
32
- title: "Save plan",
33
- children: [/* @__PURE__ */ jsx(McpToolFields, { fields: [["Characters", typeof props.args.markdown === "string" ? props.args.markdown.length : void 0]] }), /* @__PURE__ */ jsx(McpToolOutput, { result: props.result })]
34
- });
35
- }
36
- //#endregion
37
- //#region generated/mcp-ui.ts
38
- const widgets = {
39
- "@agimon-ai/po-plan/complete_plan": complete_plan_mcp_default,
40
- "@agimon-ai/po-plan/record_debug_evidence": record_debug_evidence_mcp_default,
41
- "@agimon-ai/po-plan/write_plan": defineMcpWidget(WritePlanMcpWidget)
42
- };
43
- //#endregion
44
- export { widgets };
45
-
46
- //# sourceMappingURL=mcp-ui.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-ui.mjs","names":["Widget0","Widget1","Widget2"],"sources":["../../src/extensions/workspaces/sessions/(frontend)/tool/complete_plan.mcp.tsx","../../src/extensions/workspaces/sessions/(frontend)/tool/record_debug_evidence.mcp.tsx","../../src/extensions/workspaces/sessions/(frontend)/tool/write_plan.mcp.tsx","../../generated/mcp-ui.ts"],"sourcesContent":["import { defineMcpWidget, type DoomMcpWidgetProps } from '@agimon-ai/po-core/web';\nimport { McpToolFrame, McpToolOutput } from '@agimon-ai/po-web-components';\n\nfunction CompletePlanMcpWidget(props: DoomMcpWidgetProps) {\n return (\n <McpToolFrame {...props} title=\"Request plan approval\">\n <McpToolOutput result={props.result} />\n </McpToolFrame>\n );\n}\n\nexport default defineMcpWidget(CompletePlanMcpWidget);\n","import { defineMcpWidget, type DoomMcpWidgetProps } from '@agimon-ai/po-core/web';\nimport { McpToolFrame, McpToolFields, McpToolOutput } from '@agimon-ai/po-web-components';\n\nfunction RecordDebugEvidenceMcpWidget(props: DoomMcpWidgetProps) {\n return (\n <McpToolFrame {...props} title=\"Record debug evidence\">\n <McpToolFields\n fields={[\n ['Issue', props.args.issue],\n ['Expected behavior', props.args.expectedBehavior],\n ['Observed behavior', props.args.actualBehavior],\n ]}\n />\n <McpToolOutput result={props.result} />\n </McpToolFrame>\n );\n}\n\nexport default defineMcpWidget(RecordDebugEvidenceMcpWidget);\n","import { defineMcpWidget, type DoomMcpWidgetProps } from '@agimon-ai/po-core/web';\nimport { McpToolFrame, McpToolFields, McpToolOutput } from '@agimon-ai/po-web-components';\n\nfunction WritePlanMcpWidget(props: DoomMcpWidgetProps) {\n return (\n <McpToolFrame {...props} title=\"Save plan\">\n <McpToolFields\n fields={[['Characters', typeof props.args.markdown === 'string' ? props.args.markdown.length : undefined]]}\n />\n <McpToolOutput result={props.result} />\n </McpToolFrame>\n );\n}\n\nexport default defineMcpWidget(WritePlanMcpWidget);\n","// Generated by @agimon-ai/po-build. Do not edit by hand.\nimport type { ComponentType } from 'react';\nimport type { DoomMcpWidgetProps } from '@agimon-ai/po-core/mcpWidget';\nimport Widget0 from \"../src/extensions/workspaces/sessions/(frontend)/tool/complete_plan.mcp\";\nimport Widget1 from \"../src/extensions/workspaces/sessions/(frontend)/tool/record_debug_evidence.mcp\";\nimport Widget2 from \"../src/extensions/workspaces/sessions/(frontend)/tool/write_plan.mcp\";\n\nexport const widgets: Readonly<Record<string, ComponentType<DoomMcpWidgetProps>>> = {\n \"@agimon-ai/po-plan/complete_plan\": Widget0,\n \"@agimon-ai/po-plan/record_debug_evidence\": Widget1,\n \"@agimon-ai/po-plan/write_plan\": Widget2,\n};\n"],"mappings":";;;;AAGA,SAAS,sBAAsB,OAA2B;CACxD,OACE,oBAAC,cAAD;EAAc,GAAI;EAAO,OAAM;EAC7B,UAAA,oBAAC,eAAD,EAAe,QAAQ,MAAM,OAAS,CAAA;CAC1B,CAAA;AAElB;AAEA,IAAA,4BAAe,gBAAgB,qBAAqB;;;ACRpD,SAAS,6BAA6B,OAA2B;CAC/D,OACE,qBAAC,cAAD;EAAc,GAAI;EAAO,OAAM;EAA/B,UAAA,CACE,oBAAC,eAAD,EACE,QAAQ;GACN,CAAC,SAAS,MAAM,KAAK,KAAK;GAC1B,CAAC,qBAAqB,MAAM,KAAK,gBAAgB;GACjD,CAAC,qBAAqB,MAAM,KAAK,cAAc;EACjD,EACD,CAAA,GACD,oBAAC,eAAD,EAAe,QAAQ,MAAM,OAAS,CAAA,CAC1B;;AAElB;AAEA,IAAA,oCAAe,gBAAgB,4BAA4B;;;ACf3D,SAAS,mBAAmB,OAA2B;CACrD,OACE,qBAAC,cAAD;EAAc,GAAI;EAAO,OAAM;EAA/B,UAAA,CACE,oBAAC,eAAD,EACE,QAAQ,CAAC,CAAC,cAAc,OAAO,MAAM,KAAK,aAAa,WAAW,MAAM,KAAK,SAAS,SAAS,KAAA,CAAS,CAAC,EAC1G,CAAA,GACD,oBAAC,eAAD,EAAe,QAAQ,MAAM,OAAS,CAAA,CAC1B;;AAElB;;;ACLA,MAAa,UAAuE;CAClF,oCAAoCA;CACpC,4CAA4CC;CAC5C,iCDIa,gBAAgB,kBCJIC;AACnC"}