@agimon-ai/doompi-plan 0.0.1-alpha.9 → 0.0.1-alpha.90

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 (135) hide show
  1. package/README.md +108 -20
  2. package/dist/apiContracts.cjs +57 -0
  3. package/dist/apiContracts.cjs.map +1 -0
  4. package/dist/apiContracts.d.mts +53 -0
  5. package/dist/apiContracts.d.mts.map +1 -0
  6. package/dist/apiContracts.mjs +52 -0
  7. package/dist/apiContracts.mjs.map +1 -0
  8. package/dist/config-BdNUVev4.cjs +42 -0
  9. package/dist/config-BdNUVev4.cjs.map +1 -0
  10. package/dist/config-CYzUW54g.d.mts +13 -0
  11. package/dist/config-CYzUW54g.d.mts.map +1 -0
  12. package/dist/config-Y8TZgcXt.mjs +25 -0
  13. package/dist/config-Y8TZgcXt.mjs.map +1 -0
  14. package/dist/config.cjs +12 -2
  15. package/dist/config.d.mts +2 -14
  16. package/dist/config.mjs +2 -2
  17. package/dist/extensions/mcp-ui.mjs +57 -0
  18. package/dist/extensions/mcp-ui.mjs.map +1 -0
  19. package/dist/extensions/mcp.cjs +97 -0
  20. package/dist/extensions/mcp.cjs.map +1 -0
  21. package/dist/extensions/mcp.d.mts +5 -0
  22. package/dist/extensions/mcp.d.mts.map +1 -0
  23. package/dist/extensions/mcp.mjs +92 -0
  24. package/dist/extensions/mcp.mjs.map +1 -0
  25. package/dist/extensions/pi.cjs +94 -1
  26. package/dist/extensions/pi.cjs.map +1 -1
  27. package/dist/extensions/pi.d.mts +5 -2
  28. package/dist/extensions/pi.d.mts.map +1 -0
  29. package/dist/extensions/pi.mjs +89 -1
  30. package/dist/extensions/pi.mjs.map +1 -1
  31. package/dist/extensions/server.cjs +788 -0
  32. package/dist/extensions/server.cjs.map +1 -0
  33. package/dist/extensions/server.d.mts +5 -0
  34. package/dist/extensions/server.d.mts.map +1 -0
  35. package/dist/extensions/server.mjs +779 -0
  36. package/dist/extensions/server.mjs.map +1 -0
  37. package/dist/extensions/web.mjs +864 -0
  38. package/dist/extensions/web.mjs.map +1 -0
  39. package/dist/fableFlow-B7DJZSkP.mjs +214 -0
  40. package/dist/fableFlow-B7DJZSkP.mjs.map +1 -0
  41. package/dist/fableFlow-D4K01Whn.cjs +279 -0
  42. package/dist/fableFlow-D4K01Whn.cjs.map +1 -0
  43. package/dist/fableFlow.cjs +13 -3
  44. package/dist/fableFlow.d.mts +2 -66
  45. package/dist/fableFlow.mjs +2 -3
  46. package/dist/index-CtRRd34-.d.mts +34 -0
  47. package/dist/index-CtRRd34-.d.mts.map +1 -0
  48. package/dist/index-NVQtqXSM.d.mts +149 -0
  49. package/dist/index-NVQtqXSM.d.mts.map +1 -0
  50. package/dist/{fableFlow.d.cts → index-lbK8nFPy.d.mts} +5 -3
  51. package/dist/index-lbK8nFPy.d.mts.map +1 -0
  52. package/dist/index-svs1oI26.d.mts +52 -0
  53. package/dist/index-svs1oI26.d.mts.map +1 -0
  54. package/dist/index.cjs +51 -1
  55. package/dist/index.d.mts +5 -5
  56. package/dist/index.mjs +5 -1
  57. package/dist/logSinkTelemetry-CAUggQQ0.mjs +40 -0
  58. package/dist/logSinkTelemetry-CAUggQQ0.mjs.map +1 -0
  59. package/dist/logSinkTelemetry-DeENQ5r-.cjs +51 -0
  60. package/dist/logSinkTelemetry-DeENQ5r-.cjs.map +1 -0
  61. package/dist/logSinkTelemetry.cjs +4 -2
  62. package/dist/logSinkTelemetry.d.mts +2 -24
  63. package/dist/logSinkTelemetry.mjs +2 -2
  64. package/dist/planConfig-Cp6n3Ly_.mjs +186 -0
  65. package/dist/planConfig-Cp6n3Ly_.mjs.map +1 -0
  66. package/dist/planConfig-l1DuX_OI.cjs +209 -0
  67. package/dist/planConfig-l1DuX_OI.cjs.map +1 -0
  68. package/dist/planConfig.cjs +6 -2
  69. package/dist/planConfig.d.mts +47 -0
  70. package/dist/planConfig.d.mts.map +1 -0
  71. package/dist/planConfig.mjs +2 -2
  72. package/dist/planMode-D8UGqbWB.cjs +2175 -0
  73. package/dist/planMode-D8UGqbWB.cjs.map +1 -0
  74. package/dist/planMode-DROtM7Ha.mjs +1964 -0
  75. package/dist/planMode-DROtM7Ha.mjs.map +1 -0
  76. package/dist/planMode.cjs +22 -6
  77. package/dist/planMode.d.mts +3 -75
  78. package/dist/planMode.mjs +2 -6
  79. package/dist/prompts-2tIN8Ulh.mjs +67 -0
  80. package/dist/prompts-2tIN8Ulh.mjs.map +1 -0
  81. package/dist/prompts-Dere4Q0Z.cjs +96 -0
  82. package/dist/prompts-Dere4Q0Z.cjs.map +1 -0
  83. package/dist/prompts.cjs +7 -3
  84. package/dist/prompts.d.mts +2 -24
  85. package/dist/prompts.mjs +2 -3
  86. package/llms.txt +9 -0
  87. package/package.json +143 -24
  88. package/src/prompts/doompi-use-plan/SKILL.md +41 -0
  89. package/src/types/planApi.ts +125 -0
  90. package/src/types/planSettings.ts +78 -0
  91. package/dist/_virtual/_rolldown/runtime.cjs +0 -1
  92. package/dist/config.cjs.map +0 -1
  93. package/dist/config.d.cts +0 -14
  94. package/dist/config.d.cts.map +0 -1
  95. package/dist/config.d.mts.map +0 -1
  96. package/dist/config.mjs.map +0 -1
  97. package/dist/extension.cjs +0 -2
  98. package/dist/extension.cjs.map +0 -1
  99. package/dist/extension.d.cts +0 -8
  100. package/dist/extension.d.cts.map +0 -1
  101. package/dist/extension.d.mts +0 -8
  102. package/dist/extension.d.mts.map +0 -1
  103. package/dist/extension.mjs +0 -2
  104. package/dist/extension.mjs.map +0 -1
  105. package/dist/extensions/doom.cjs +0 -2
  106. package/dist/extensions/doom.cjs.map +0 -1
  107. package/dist/extensions/doom.d.cts +0 -8
  108. package/dist/extensions/doom.d.cts.map +0 -1
  109. package/dist/extensions/doom.d.mts +0 -8
  110. package/dist/extensions/doom.d.mts.map +0 -1
  111. package/dist/extensions/doom.mjs +0 -2
  112. package/dist/extensions/doom.mjs.map +0 -1
  113. package/dist/extensions/pi.d.cts +0 -2
  114. package/dist/fableFlow.cjs.map +0 -1
  115. package/dist/fableFlow.d.cts.map +0 -1
  116. package/dist/fableFlow.d.mts.map +0 -1
  117. package/dist/fableFlow.mjs.map +0 -1
  118. package/dist/index.d.cts +0 -5
  119. package/dist/logSinkTelemetry.cjs.map +0 -1
  120. package/dist/logSinkTelemetry.d.cts +0 -24
  121. package/dist/logSinkTelemetry.d.cts.map +0 -1
  122. package/dist/logSinkTelemetry.d.mts.map +0 -1
  123. package/dist/logSinkTelemetry.mjs.map +0 -1
  124. package/dist/planConfig.cjs.map +0 -1
  125. package/dist/planConfig.mjs.map +0 -1
  126. package/dist/planMode.cjs.map +0 -1
  127. package/dist/planMode.d.cts +0 -75
  128. package/dist/planMode.d.cts.map +0 -1
  129. package/dist/planMode.d.mts.map +0 -1
  130. package/dist/planMode.mjs.map +0 -1
  131. package/dist/prompts.cjs.map +0 -1
  132. package/dist/prompts.d.cts +0 -24
  133. package/dist/prompts.d.cts.map +0 -1
  134. package/dist/prompts.d.mts.map +0 -1
  135. package/dist/prompts.mjs.map +0 -1
package/README.md CHANGED
@@ -1,41 +1,129 @@
1
1
  # @agimon-ai/doompi-plan
2
2
 
3
- Reusable Pi read-only planning mode extension.
3
+ Create and review stored plans in Pi with file edits withheld, explicit completion, and normal, debug, or Fable-assisted flows.
4
4
 
5
- Repository read-only planning, plan persistence, and approval handoff. Plan is a minor mode:
6
- it toggles mid-session and reports itself on the shared `MODES` line.
5
+ Part of the [DoomPi distribution](https://www.npmjs.com/package/@agimon-ai/doompi).
7
6
 
8
- Part of [Doompi](https://www.npmjs.com/package/@agimon-ai/doompi), a coding agent that loads
9
- only the skills and tools you name. This package is composed by Doompi and is not usually
10
- installed on its own.
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 22.19.0 or newer
18
+ - Pi 0.85.0
11
19
 
12
20
  ## Install
13
21
 
22
+ The seeded `modes.yaml` selects Plan in `default.packages`. Keep it there or select it through a
23
+ layer; Plan remains inactive until requested. For standalone Pi:
24
+
14
25
  ```bash
15
- npm install @agimon-ai/doompi-plan
26
+ pi install npm:@agimon-ai/doompi-plan
16
27
  ```
17
28
 
18
- ## How it loads
29
+ DoomPi and standalone Pi use the same `@agimon-ai/doompi-plan/extensions/pi` extension.
19
30
 
20
- Name it in a layer in `.doom/modes.yaml`, then add that layer to a major mode:
31
+ ## Start and exit
21
32
 
22
- ```yaml
23
- layers:
24
- plan-mode:
25
- packages: ['@agimon-ai/doompi-plan/extensions/doom']
33
+ | Key | Flavor |
34
+ | --------- | ------------------------------------------------------ |
35
+ | `SPC p e` | Normal planning, and the way out once any flavor is on |
36
+ | `SPC p d` | Debug planning with a bounded evidence packet |
37
+ | `SPC p f` | Fable-assisted drafting followed by Pi verification |
38
+
39
+ `SPC p e` reads `enter` while the mode is off and `exit` while it is on, where exiting restores the
40
+ prior model, thinking level, and tool state.
41
+
42
+ Normal planning expects repository exploration and delegation where available. Debug planning
43
+ separates verified evidence from hypotheses. Fable is an optional Team-provided planning service.
44
+ When Team provides `doom/fable-plan`, Plan treats returned text as untrusted and requires Pi to
45
+ verify and synthesize the final plan. Its child capability ceiling comes from
46
+ `doom/subagent-policy` and is removed when either provider or Plan unloads.
47
+
48
+ A model restoration failure leaves Plan active and reports the failure rather than pretending
49
+ the session was restored.
50
+
51
+ ## Write and complete a plan
52
+
53
+ `write_plan` accepts visible Markdown plan content and writes a unique file under `~/.pi/plans` by
54
+ default. It refuses a plan that is empty or was not presented in visible assistant output, and it
55
+ validates the destination before writing. The plan path and content become visible session state.
56
+
57
+ After a plan exists, `complete_plan` asks whether to exit or continue planning. The user must
58
+ explicitly approve exit. If the selected mode already exposes `ask_user_question`, Plan reuses it;
59
+ it does not activate an omitted feedback layer.
60
+
61
+ In the TUI's autonomous Voice mode, review choices are narrated, the turn terminates, and the next
62
+ user message carries the decision. The headless server does not implement narrated plan review,
63
+ so autonomous Voice disables its UI-only `complete_plan` tool. `write_plan` remains available with
64
+ supplied or already presented Markdown and never falls back to a UI input dialog in that mode.
65
+ Stopping autonomous Voice restores UI review when Plan is still active. Neither path auto-approves implementation.
26
66
 
27
- majorMode:
28
- dev: [plan-mode]
67
+ ## Read and edit the plan in the cockpit
68
+
69
+ Once `write_plan` succeeds, a `plan` group appears in the cockpit's activity dock and stays for the
70
+ rest of the session, including after Plan mode is exited: that is when the agent starts
71
+ implementing, which is when the plan is most worth having open. The row opens a temporary tab that
72
+ renders the plan as Markdown, with a `source` view that edits it and saves back to the plan file.
73
+
74
+ The agent reads the plan file at the start of every turn, so a saved edit is what it implements. A
75
+ save carries the hash the reader loaded and is refused if the agent rewrote the plan in the
76
+ meantime, rather than overwriting it.
77
+
78
+ The cockpit reaches the plan through this package's session API, mounted at `/api/plugin/plans`.
79
+ Because a host imports the built entry, a change here needs `pnpm build` and `doompi sync` before a
80
+ running cockpit sees it.
81
+
82
+ ## Configure models and storage
83
+
84
+ Put planning settings in the repository's `.doom/config.yaml` or the global
85
+ `~/.pi/.doom/config.yaml`:
86
+
87
+ ```yaml
88
+ modes:
89
+ planning:
90
+ main:
91
+ model: provider/planning-model
92
+ thinking: high
93
+ subagents:
94
+ model: provider/research-model
95
+ thinking: medium
96
+ plansDirectory: ~/.pi/plans
29
97
  ```
30
98
 
31
- ## Leader
99
+ `main` controls the planning model, `subagents` controls delegated research defaults, and
100
+ `plansDirectory` can be absolute, repository-relative, or under `~`. Planning and delegated model
101
+ calls consume provider quota.
102
+
103
+ ## Public API
104
+
105
+ The root exports planning configuration schemas, prompts, Fable flow helpers, and the Plan mode
106
+ service. Focused exports include `/config`, `/plan-config`, `/plan-mode`, `/fable-flow`, and `/prompts`.
107
+ The session-scoped server plugin owns the cockpit plan API. Pi and server entries live in
108
+ `src/extensions`; their public modules are `/extensions/pi` and `/extensions/server`.
109
+ Controllers compose tools and services. Services live in named folders, and `src/exports`
110
+ contains only flat public exports.
32
111
 
33
- `SPC p p` plans, `SPC p c` cancels, `SPC p d` debugs, `SPC p f` runs the fable flow, once
34
- the extension is loaded.
112
+ The Pi plugin constructs declarations, installs optional Cordis services, and then becomes ready.
113
+ Its `onStop` hook cancels pending work and restores the previous agent configuration before
114
+ registrations are removed. `onDispose` also handles partial startup cleanup. Session events and
115
+ Plan flavor changes remain separate from plugin startup and shutdown.
35
116
 
36
- ## Entry points
117
+ ## Development
118
+
119
+ ```bash
120
+ pnpm build
121
+ pnpm typecheck
122
+ pnpm test
123
+ pnpm lint
124
+ ```
37
125
 
38
- 9 subpaths are declared in the `exports` field of `package.json`.
126
+ Maintained by [Agimon](https://agimon.ai/about).
39
127
 
40
128
  ## License
41
129
 
@@ -0,0 +1,57 @@
1
+ Object.defineProperties(exports, {
2
+ __esModule: { value: true },
3
+ [Symbol.toStringTag]: { value: "Module" }
4
+ });
5
+ let _agimon_ai_doompi_core_apiContracts = require("@agimon-ai/doompi-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_doompi_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_doompi_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_doompi_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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apiContracts.cjs","names":["Type","defineApiContract","jsonApiResponses"],"sources":["../src/schemas/apiContracts.ts"],"sourcesContent":["import { defineApiContract, jsonApiResponses } from '@agimon-ai/doompi-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,oCAAAA,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,oCAAAA,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,oCAAAA,iBAAAA,CAAiBF,QAAAA,KAAK,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;CACtD,CACF;AACF,CAAC"}
@@ -0,0 +1,53 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apiContracts.d.mts","names":[],"sources":["../src/schemas/apiContracts.ts"],"mappings":";;qBAgBa"}
@@ -0,0 +1,52 @@
1
+ import { defineApiContract, jsonApiResponses } from "@agimon-ai/doompi-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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apiContracts.mjs","names":[],"sources":["../src/schemas/apiContracts.ts"],"sourcesContent":["import { defineApiContract, jsonApiResponses } from '@agimon-ai/doompi-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"}
@@ -0,0 +1,42 @@
1
+ let _agimon_ai_doompi_config = require("@agimon-ai/doompi-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_doompi_config.parseDoomConfig)(content, filePath);
6
+ return config.modes ? { modes: config.modes } : {};
7
+ }
8
+ function mergeDoomConfigs(globalConfig, repositoryConfig) {
9
+ const merged = (0, _agimon_ai_doompi_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_doompi_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-BdNUVev4.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-BdNUVev4.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/doompi-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,yBAAAA,gBAAAA,CAAsB,SAAS,QAAQ;CACtD,OAAO,OAAO,QAAQ,EAAE,OAAO,OAAO,MAAM,IAAI,CAAC;AACnD;AAEA,SAAgB,iBAAiB,cAA0B,kBAA0C;CACnG,MAAM,UAAA,GAASC,yBAAAA,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,yBAAAA,eAAAA,CAAqB,UAAU,aAAa;CAC3D,OAAO,OAAO,QAAQ,EAAE,OAAO,OAAO,MAAM,IAAI,CAAC;AACnD"}
@@ -0,0 +1,13 @@
1
+ import { PlanningAgentConfig, PlanningModeConfig, PlanningThinkingLevel, getHarnessState, globalDoomConfigPath as globalDoomConfigPath$1, loadHarnessState, parsePlanningModeConfig, repositoryDoomConfigPath, resolvePlanningPlansDirectory } from "@agimon-ai/doompi-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$1 as o, resolvePlanningPlansDirectory as p, PlanningModeConfig as r, loadDoomConfig$1 as s, DoomConfig as t, parseDoomConfig$1 as u };
13
+ //# sourceMappingURL=config-CYzUW54g.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-CYzUW54g.d.mts","names":[],"sources":["../src/schemas/plan/config.ts"],"mappings":";;UAiBiB;EACf;IACE,WAAW;;;iBAeC,kBAAgB,iBAAiB,mBAAmB;iBAKpD,mBAAiB,cAAc,YAAY,kBAAkB,aAAa;iBAQ1E,iBAAe,kBAAkB,yBAAyB"}
@@ -0,0 +1,25 @@
1
+ import { getHarnessState, globalDoomConfigPath as globalDoomConfigPath$1, loadDoomConfig, loadHarnessState, mergeDoomConfigs, parseDoomConfig, parsePlanningModeConfig, repositoryDoomConfigPath, resolvePlanningPlansDirectory } from "@agimon-ai/doompi-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$1 as n, parseDoomConfig$1 as o, loadDoomConfig$1 as r, parsePlanningModeConfig as s, getHarnessState as t };
24
+
25
+ //# sourceMappingURL=config-Y8TZgcXt.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-Y8TZgcXt.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/doompi-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"}
package/dist/config.cjs CHANGED
@@ -1,2 +1,12 @@
1
- require(`./_virtual/_rolldown/runtime.cjs`);let e=require(`@agimon-ai/doompi-config`);function t(t,n){let r=(0,e.parseDoomConfig)(t,n);return r.modes?{modes:r.modes}:{}}function n(t,n){let r=(0,e.mergeDoomConfigs)({...t,projectTrust:`ask`},{...n,projectTrust:`ask`});return r.modes?{modes:r.modes}:{}}function r(t,n){let r=(0,e.loadDoomConfig)(t,n);return r.modes?{modes:r.modes}:{}}exports.loadDoomConfig=r,exports.mergeDoomConfigs=n,exports.parseDoomConfig=t;
2
- //# sourceMappingURL=config.cjs.map
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_config = require("./config-BdNUVev4.cjs");
3
+ let _agimon_ai_doompi_config = require("@agimon-ai/doompi-config");
4
+ exports.getHarnessState = _agimon_ai_doompi_config.getHarnessState;
5
+ exports.globalDoomConfigPath = _agimon_ai_doompi_config.globalDoomConfigPath;
6
+ exports.loadDoomConfig = require_config.loadDoomConfig;
7
+ exports.loadHarnessState = _agimon_ai_doompi_config.loadHarnessState;
8
+ exports.mergeDoomConfigs = require_config.mergeDoomConfigs;
9
+ exports.parseDoomConfig = require_config.parseDoomConfig;
10
+ exports.parsePlanningModeConfig = _agimon_ai_doompi_config.parsePlanningModeConfig;
11
+ exports.repositoryDoomConfigPath = _agimon_ai_doompi_config.repositoryDoomConfigPath;
12
+ exports.resolvePlanningPlansDirectory = _agimon_ai_doompi_config.resolvePlanningPlansDirectory;
package/dist/config.d.mts CHANGED
@@ -1,14 +1,2 @@
1
- import { PlanningAgentConfig, PlanningModeConfig, PlanningThinkingLevel, getHarnessState, globalDoomConfigPath as globalDoomConfigPath$1, loadHarnessState, parsePlanningModeConfig, repositoryDoomConfigPath, resolvePlanningPlansDirectory } from "@agimon-ai/doompi-config";
2
-
3
- //#region src/config.d.ts
4
- interface DoomConfig {
5
- modes?: {
6
- planning?: PlanningModeConfig;
7
- };
8
- }
9
- declare function parseDoomConfig$1(content: string, filePath: string): DoomConfig;
10
- declare function mergeDoomConfigs$1(globalConfig: DoomConfig, repositoryConfig: DoomConfig): DoomConfig;
11
- declare function loadDoomConfig$1(repoRoot: string, homeDirectory?: string): DoomConfig;
12
- //#endregion
13
- export { DoomConfig, type PlanningAgentConfig, type PlanningModeConfig, type PlanningThinkingLevel, getHarnessState, globalDoomConfigPath$1 as globalDoomConfigPath, loadDoomConfig$1 as loadDoomConfig, loadHarnessState, mergeDoomConfigs$1 as mergeDoomConfigs, parseDoomConfig$1 as parseDoomConfig, parsePlanningModeConfig, repositoryDoomConfigPath, resolvePlanningPlansDirectory };
14
- //# sourceMappingURL=config.d.mts.map
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-CYzUW54g.mjs";
2
+ export { DoomConfig, type PlanningAgentConfig, type PlanningModeConfig, type PlanningThinkingLevel, getHarnessState, globalDoomConfigPath, loadDoomConfig, loadHarnessState, mergeDoomConfigs, parseDoomConfig, parsePlanningModeConfig, repositoryDoomConfigPath, resolvePlanningPlansDirectory };
package/dist/config.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import{getHarnessState as e,globalDoomConfigPath as t,loadDoomConfig as n,loadHarnessState as r,mergeDoomConfigs as i,parseDoomConfig as a,parsePlanningModeConfig as o,repositoryDoomConfigPath as s,resolvePlanningPlansDirectory as c}from"@agimon-ai/doompi-config";function l(e,t){let n=a(e,t);return n.modes?{modes:n.modes}:{}}function u(e,t){let n=i({...e,projectTrust:`ask`},{...t,projectTrust:`ask`});return n.modes?{modes:n.modes}:{}}function d(e,t){let r=n(e,t);return r.modes?{modes:r.modes}:{}}export{e as getHarnessState,t as globalDoomConfigPath,d as loadDoomConfig,r as loadHarnessState,u as mergeDoomConfigs,l as parseDoomConfig,o as parsePlanningModeConfig,s as repositoryDoomConfigPath,c as resolvePlanningPlansDirectory};
2
- //# sourceMappingURL=config.mjs.map
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-Y8TZgcXt.mjs";
2
+ export { getHarnessState, globalDoomConfigPath, loadDoomConfig, loadHarnessState, mergeDoomConfigs, parseDoomConfig, parsePlanningModeConfig, repositoryDoomConfigPath, resolvePlanningPlansDirectory };
@@ -0,0 +1,57 @@
1
+ import { defineMcpWidget } from "@agimon-ai/doompi-core/web";
2
+ import { McpToolFields, McpToolFrame, McpToolOutput } from "@agimon-ai/doompi-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/run_fable_plan.mcp.tsx
29
+ function RunFablePlanMcpWidget(props) {
30
+ return /* @__PURE__ */ jsxs(McpToolFrame, {
31
+ ...props,
32
+ title: "Prepare plan",
33
+ children: [/* @__PURE__ */ jsx(McpToolFields, { fields: [["Goals", props.args.goal], ["Constraints", props.args.constraints]] }), /* @__PURE__ */ jsx(McpToolOutput, { result: props.result })]
34
+ });
35
+ }
36
+ var run_fable_plan_mcp_default = defineMcpWidget(RunFablePlanMcpWidget);
37
+ //#endregion
38
+ //#region src/extensions/workspaces/sessions/(frontend)/tool/write_plan.mcp.tsx
39
+ function WritePlanMcpWidget(props) {
40
+ return /* @__PURE__ */ jsxs(McpToolFrame, {
41
+ ...props,
42
+ title: "Save plan",
43
+ children: [/* @__PURE__ */ jsx(McpToolFields, { fields: [["Characters", typeof props.args.markdown === "string" ? props.args.markdown.length : void 0]] }), /* @__PURE__ */ jsx(McpToolOutput, { result: props.result })]
44
+ });
45
+ }
46
+ //#endregion
47
+ //#region generated/mcp-ui.ts
48
+ const widgets = {
49
+ "@agimon-ai/doompi-plan/complete_plan": complete_plan_mcp_default,
50
+ "@agimon-ai/doompi-plan/record_debug_evidence": record_debug_evidence_mcp_default,
51
+ "@agimon-ai/doompi-plan/run_fable_plan": run_fable_plan_mcp_default,
52
+ "@agimon-ai/doompi-plan/write_plan": defineMcpWidget(WritePlanMcpWidget)
53
+ };
54
+ //#endregion
55
+ export { widgets };
56
+
57
+ //# sourceMappingURL=mcp-ui.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-ui.mjs","names":["Widget0","Widget1","Widget2","Widget3"],"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/run_fable_plan.mcp.tsx","../../src/extensions/workspaces/sessions/(frontend)/tool/write_plan.mcp.tsx","../../generated/mcp-ui.ts"],"sourcesContent":["import { defineMcpWidget, type DoomMcpWidgetProps } from '@agimon-ai/doompi-core/web';\nimport { McpToolFrame, McpToolOutput } from '@agimon-ai/doompi-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/doompi-core/web';\nimport { McpToolFrame, McpToolFields, McpToolOutput } from '@agimon-ai/doompi-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/doompi-core/web';\nimport { McpToolFrame, McpToolFields, McpToolOutput } from '@agimon-ai/doompi-web-components';\n\nfunction RunFablePlanMcpWidget(props: DoomMcpWidgetProps) {\n return (\n <McpToolFrame {...props} title=\"Prepare plan\">\n <McpToolFields\n fields={[\n ['Goals', props.args.goal],\n ['Constraints', props.args.constraints],\n ]}\n />\n <McpToolOutput result={props.result} />\n </McpToolFrame>\n );\n}\n\nexport default defineMcpWidget(RunFablePlanMcpWidget);\n","import { defineMcpWidget, type DoomMcpWidgetProps } from '@agimon-ai/doompi-core/web';\nimport { McpToolFrame, McpToolFields, McpToolOutput } from '@agimon-ai/doompi-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/doompi-build. Do not edit by hand.\nimport type { ComponentType } from 'react';\nimport type { DoomMcpWidgetProps } from '@agimon-ai/doompi-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/run_fable_plan.mcp\";\nimport Widget3 from \"../src/extensions/workspaces/sessions/(frontend)/tool/write_plan.mcp\";\n\nexport const widgets: Readonly<Record<string, ComponentType<DoomMcpWidgetProps>>> = {\n \"@agimon-ai/doompi-plan/complete_plan\": Widget0,\n \"@agimon-ai/doompi-plan/record_debug_evidence\": Widget1,\n \"@agimon-ai/doompi-plan/run_fable_plan\": Widget2,\n \"@agimon-ai/doompi-plan/write_plan\": Widget3,\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,sBAAsB,OAA2B;CACxD,OACE,qBAAC,cAAD;EAAc,GAAI;EAAO,OAAM;EAA/B,UAAA,CACE,oBAAC,eAAD,EACE,QAAQ,CACN,CAAC,SAAS,MAAM,KAAK,IAAI,GACzB,CAAC,eAAe,MAAM,KAAK,WAAW,CACxC,EACD,CAAA,GACD,oBAAC,eAAD,EAAe,QAAQ,MAAM,OAAS,CAAA,CAC1B;;AAElB;AAEA,IAAA,6BAAe,gBAAgB,qBAAqB;;;ACdpD,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;;;ACJA,MAAa,UAAuE;CAClF,wCAAwCA;CACxC,gDAAgDC;CAChD,yCAAyCC;CACzC,qCDEa,gBAAgB,kBCFQC;AACvC"}