@agimon-ai/doompi-plan 0.0.1-alpha.95 → 0.0.1-alpha.97

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 (48) hide show
  1. package/README.md +11 -8
  2. package/dist/extensions/mcp-ui.mjs +0 -11
  3. package/dist/extensions/mcp-ui.mjs.map +1 -1
  4. package/dist/extensions/mcp.cjs +1 -5
  5. package/dist/extensions/mcp.cjs.map +1 -1
  6. package/dist/extensions/mcp.d.mts.map +1 -1
  7. package/dist/extensions/mcp.mjs +1 -5
  8. package/dist/extensions/mcp.mjs.map +1 -1
  9. package/dist/extensions/pi.cjs +4 -8
  10. package/dist/extensions/pi.cjs.map +1 -1
  11. package/dist/extensions/pi.d.mts.map +1 -1
  12. package/dist/extensions/pi.mjs +4 -8
  13. package/dist/extensions/pi.mjs.map +1 -1
  14. package/dist/extensions/server.cjs +12 -55
  15. package/dist/extensions/server.cjs.map +1 -1
  16. package/dist/extensions/server.d.mts.map +1 -1
  17. package/dist/extensions/server.mjs +12 -55
  18. package/dist/extensions/server.mjs.map +1 -1
  19. package/dist/{index-svs1oI26.d.mts → index-C9QBG9cw.d.mts} +7 -8
  20. package/dist/index-C9QBG9cw.d.mts.map +1 -0
  21. package/dist/{index-NVQtqXSM.d.mts → index-Dq4TZq_R.d.mts} +5 -4
  22. package/dist/index-Dq4TZq_R.d.mts.map +1 -0
  23. package/dist/index.cjs +3 -2
  24. package/dist/index.d.mts +3 -3
  25. package/dist/index.mjs +3 -3
  26. package/dist/{planMode-D8UGqbWB.cjs → planMode-Cmw5BU17.cjs} +27 -193
  27. package/dist/planMode-Cmw5BU17.cjs.map +1 -0
  28. package/dist/{planMode-DROtM7Ha.mjs → planMode-CsQds1DJ.mjs} +27 -193
  29. package/dist/planMode-CsQds1DJ.mjs.map +1 -0
  30. package/dist/planMode.cjs +1 -1
  31. package/dist/planMode.d.mts +2 -2
  32. package/dist/planMode.mjs +1 -1
  33. package/dist/{prompts-Dere4Q0Z.cjs → prompts-DUVUPNZd.cjs} +15 -8
  34. package/dist/prompts-DUVUPNZd.cjs.map +1 -0
  35. package/dist/{prompts-2tIN8Ulh.mjs → prompts-DnVJGtEC.mjs} +10 -9
  36. package/dist/prompts-DnVJGtEC.mjs.map +1 -0
  37. package/dist/prompts.cjs +2 -1
  38. package/dist/prompts.d.mts +2 -2
  39. package/dist/prompts.mjs +2 -2
  40. package/llms.txt +1 -1
  41. package/package.json +9 -10
  42. package/src/prompts/doompi-use-plan/SKILL.md +7 -4
  43. package/dist/index-NVQtqXSM.d.mts.map +0 -1
  44. package/dist/index-svs1oI26.d.mts.map +0 -1
  45. package/dist/planMode-D8UGqbWB.cjs.map +0 -1
  46. package/dist/planMode-DROtM7Ha.mjs.map +0 -1
  47. package/dist/prompts-2tIN8Ulh.mjs.map +0 -1
  48. package/dist/prompts-Dere4Q0Z.cjs.map +0 -1
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @agimon-ai/doompi-plan
2
2
 
3
- Create and review stored plans in Pi with file edits withheld, explicit completion, and normal, debug, or Fable-assisted flows.
3
+ Create and review stored plans in Pi with file edits withheld, explicit completion, and normal, debug, or code review flows.
4
4
 
5
5
  Part of the [DoomPi distribution](https://www.npmjs.com/package/@agimon-ai/doompi).
6
6
 
@@ -34,16 +34,18 @@ DoomPi and standalone Pi use the same `@agimon-ai/doompi-plan/extensions/pi` ext
34
34
  | --------- | ------------------------------------------------------ |
35
35
  | `SPC p e` | Normal planning, and the way out once any flavor is on |
36
36
  | `SPC p d` | Debug planning with a bounded evidence packet |
37
- | `SPC p f` | Fable-assisted drafting followed by Pi verification |
37
+ | `SPC p r` | Code Review planning with findings and proposed fixes |
38
38
 
39
39
  `SPC p e` reads `enter` while the mode is off and `exit` while it is on, where exiting restores the
40
40
  prior model, thinking level, and tool state.
41
41
 
42
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.
43
+ separates verified evidence from hypotheses. Code Review planning inspects changes read-only,
44
+ reports actionable findings with severity and file references, and proposes scoped fixes with
45
+ validation steps. All three flavors use the same stored-plan and explicit approval workflow.
46
+ Saved Fable sessions resume as normal planning while retaining their original model settings.
47
+ The child capability ceiling comes from `doom/subagent-policy` and is removed when either
48
+ provider or Plan unloads.
47
49
 
48
50
  A model restoration failure leaves Plan active and reports the failure rather than pretending
49
51
  the session was restored.
@@ -102,8 +104,9 @@ calls consume provider quota.
102
104
 
103
105
  ## Public API
104
106
 
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 root exports planning configuration schemas, prompts, and the Plan mode service.
108
+ Legacy Fable helpers remain exported for compatibility but are not registered as planning modes or tools.
109
+ Focused exports include `/config`, `/planConfig`, `/planMode`, `/fableFlow`, and `/prompts`.
107
110
  The session-scoped server plugin owns the cockpit plan API. Pi and server entries live in
108
111
  `src/extensions`; their public modules are `/extensions/pi` and `/extensions/server`.
109
112
  Controllers compose tools and services. Services live in named folders, and `src/exports`
@@ -25,16 +25,6 @@ function RecordDebugEvidenceMcpWidget(props) {
25
25
  }
26
26
  var record_debug_evidence_mcp_default = defineMcpWidget(RecordDebugEvidenceMcpWidget);
27
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
28
  //#region src/extensions/workspaces/sessions/(frontend)/tool/write_plan.mcp.tsx
39
29
  function WritePlanMcpWidget(props) {
40
30
  return /* @__PURE__ */ jsxs(McpToolFrame, {
@@ -48,7 +38,6 @@ function WritePlanMcpWidget(props) {
48
38
  const widgets = {
49
39
  "@agimon-ai/doompi-plan/complete_plan": complete_plan_mcp_default,
50
40
  "@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
41
  "@agimon-ai/doompi-plan/write_plan": defineMcpWidget(WritePlanMcpWidget)
53
42
  };
54
43
  //#endregion
@@ -1 +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"}
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/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 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/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/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,wCAAwCA;CACxC,gDAAgDC;CAChD,qCDIa,gBAAgB,kBCJQC;AACvC"}
@@ -8,7 +8,7 @@ let typebox = require("typebox");
8
8
  //#region src/extensions/workspaces/sessions/(backend)/skill/doompi-use-plan.mcp.ts
9
9
  var doompi_use_plan_mcp_default = (0, _agimon_ai_doompi_core_mcpFacet.defineMcpSkill)({
10
10
  name: "doompi-use-plan",
11
- description: "Use Doom Pi Plan to draft reviewable normal, debug, or Fable-assisted plans, persist them, and exit safely.",
11
+ description: "Use Doom Pi Plan to draft reviewable normal, debug, or code review plans, persist them, and exit safely.",
12
12
  read: () => (0, _agimon_ai_doompi_core_serverFacet.readPackageResource)(require("url").pathToFileURL(__filename).href, "src/prompts/doompi-use-plan/SKILL.md")
13
13
  });
14
14
  //#endregion
@@ -55,9 +55,6 @@ var complete_plan_mcp_default = (0, _agimon_ai_doompi_core_mcpFacet.defineMcpToo
55
55
  //#region src/extensions/workspaces/sessions/(backend)/tool/record_debug_evidence.mcp.ts
56
56
  var record_debug_evidence_mcp_default = (0, _agimon_ai_doompi_core_mcpFacet.defineMcpTool)((context) => bindMcpTool(context, "record_debug_evidence"));
57
57
  //#endregion
58
- //#region src/extensions/workspaces/sessions/(backend)/tool/run_fable_plan.mcp.ts
59
- var run_fable_plan_mcp_default = (0, _agimon_ai_doompi_core_mcpFacet.defineMcpTool)((context) => bindMcpTool(context, "run_fable_plan"));
60
- //#endregion
61
58
  //#region src/extensions/workspaces/sessions/(backend)/tool/write_plan.mcp.ts
62
59
  var write_plan_mcp_default = (0, _agimon_ai_doompi_core_mcpFacet.defineMcpTool)((context) => bindMcpTool(context, "write_plan"));
63
60
  //#endregion
@@ -84,7 +81,6 @@ const mcp = (0, _agimon_ai_doompi_core_mcpFacet.defineMcpPlugin)({
84
81
  return [
85
82
  withWidget("@agimon-ai/doompi-plan/complete_plan", via({ name: "complete_plan" }, at(complete_plan_mcp_default, context))),
86
83
  withWidget("@agimon-ai/doompi-plan/record_debug_evidence", via({ name: "record_debug_evidence" }, at(record_debug_evidence_mcp_default, context))),
87
- withWidget("@agimon-ai/doompi-plan/run_fable_plan", via({ name: "run_fable_plan" }, at(run_fable_plan_mcp_default, context))),
88
84
  withWidget("@agimon-ai/doompi-plan/write_plan", via({ name: "write_plan" }, at(write_plan_mcp_default, context)))
89
85
  ];
90
86
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.cjs","names":["defineMcpSkill","readPackageResource","Type","defineMcpTool","defineMcpTool","defineMcpTool","defineMcpTool","defineMcpPlugin","skillDoompiUsePlan","toolCompletePlan","toolRecordDebugEvidence","toolRunFablePlan","toolWritePlan"],"sources":["../../src/extensions/workspaces/sessions/(backend)/skill/doompi-use-plan.mcp.ts","../../src/schemas/mcpTools.ts","../../src/services/mcpTools/index.ts","../../src/extensions/workspaces/sessions/(backend)/tool/complete_plan.mcp.ts","../../src/extensions/workspaces/sessions/(backend)/tool/record_debug_evidence.mcp.ts","../../src/extensions/workspaces/sessions/(backend)/tool/run_fable_plan.mcp.ts","../../src/extensions/workspaces/sessions/(backend)/tool/write_plan.mcp.ts","../../generated/mcp.ts"],"sourcesContent":["import { defineMcpSkill } from '@agimon-ai/doompi-core/mcpFacet';\nimport { readPackageResource } from '@agimon-ai/doompi-core/serverFacet';\n\nexport default defineMcpSkill({\n name: 'doompi-use-plan',\n description:\n 'Use Doom Pi Plan to draft reviewable normal, debug, or Fable-assisted plans, persist them, and exit safely.',\n read: () => readPackageResource(import.meta.url, 'src/prompts/doompi-use-plan/SKILL.md'),\n});\n","import { Type } from 'typebox';\n\nconst markdown = Type.String({ minLength: 1 });\n\nexport const remoteWritePlanParameters = Type.Object({ markdown }, { additionalProperties: false });\nexport const writePlanParameters = Type.Object({ markdown: Type.Optional(markdown) }, { additionalProperties: false });\n","import type { DoomHeadlessTool } from '@agimon-ai/doompi-core/headless';\nimport type { DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcpFacet';\nimport type { Context } from '@deepseek-ai/cordis';\n\nimport { remoteWritePlanParameters } from '../../schemas/mcpTools';\n\nexport const PLAN_MCP_TOOLS_SERVICE = 'doom/plan-mcp-tools';\n\nconst MODE_ID = 'plan';\nconst MODE_LABEL = 'Plan';\n\nexport interface McpToolCatalog {\n get(name: string): DoomHeadlessTool | undefined;\n names(): readonly string[];\n}\n\nexport function mountMcpTools(tools: readonly DoomHeadlessTool[]) {\n return (context: Context): void => {\n context.plugin((providerContext) => {\n providerContext.provide(PLAN_MCP_TOOLS_SERVICE, {\n get: (name) => tools.find((tool) => tool.name === name),\n names: () => tools.map((tool) => tool.name),\n } satisfies McpToolCatalog);\n });\n };\n}\n\nexport function bindMcpTool(context: DoomMcpPluginContext, name: string): DoomHeadlessTool {\n const catalog = context.services.get<McpToolCatalog>(PLAN_MCP_TOOLS_SERVICE);\n const tool = catalog?.get(name);\n if (!tool || !catalog) throw new Error(`Plan tool is unavailable: ${name}`);\n const writesPlan = name === 'write_plan';\n return {\n ...tool,\n ...(writesPlan\n ? {\n description:\n 'Save the supplied Markdown plan in the bound session. Requires active Plan mode. Saving does not approve implementation.',\n parameters: remoteWritePlanParameters,\n annotations: { readOnlyHint: false, destructiveHint: false, openWorldHint: false },\n }\n : {}),\n execute(toolCallId, parameters, signal, onUpdate) {\n const activeModes = context.selection.read().state?.['minor-mode'] ?? [];\n if (!activeModes.includes(MODE_ID)) {\n const inactiveTools = [...catalog.names()].sort().join(', ');\n throw new Error(`${MODE_LABEL} minor mode is inactive. Inactive ${MODE_LABEL} tools: ${inactiveTools}.`);\n }\n if (\n writesPlan &&\n (typeof parameters !== 'object' ||\n parameters === null ||\n !('markdown' in parameters) ||\n typeof parameters.markdown !== 'string' ||\n !parameters.markdown.trim())\n ) {\n throw new Error(\n 'Supply the complete visible plan in the markdown argument. Remote calls cannot read the ChatGPT transcript.',\n );\n }\n const executionSignal = AbortSignal.any([context.signal, signal ?? context.signal]);\n return tool.execute(toolCallId, parameters, executionSignal, onUpdate, context.execution);\n },\n };\n}\n","import { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcpFacet';\n\nimport { bindMcpTool } from '../../../../../services/mcpTools';\n\nexport default defineMcpTool((context: DoomMcpPluginContext) => bindMcpTool(context, 'complete_plan'));\n","import { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcpFacet';\n\nimport { bindMcpTool } from '../../../../../services/mcpTools';\n\nexport default defineMcpTool((context: DoomMcpPluginContext) => bindMcpTool(context, 'record_debug_evidence'));\n","import { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcpFacet';\n\nimport { bindMcpTool } from '../../../../../services/mcpTools';\n\nexport default defineMcpTool((context: DoomMcpPluginContext) => bindMcpTool(context, 'run_fable_plan'));\n","import { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcpFacet';\n\nimport { bindMcpTool } from '../../../../../services/mcpTools';\n\nexport default defineMcpTool((context: DoomMcpPluginContext) => bindMcpTool(context, 'write_plan'));\n","// Generated by @agimon-ai/doompi-build. Do not edit by hand.\nimport { defineMcpPlugin, type DoomMcpSessionPlugin } from '@agimon-ai/doompi-core/mcpFacet';\n\nimport skillDoompiUsePlan from '../src/extensions/workspaces/sessions/(backend)/skill/doompi-use-plan.mcp';\nimport toolCompletePlan from '../src/extensions/workspaces/sessions/(backend)/tool/complete_plan.mcp';\nimport toolRecordDebugEvidence from '../src/extensions/workspaces/sessions/(backend)/tool/record_debug_evidence.mcp';\nimport toolRunFablePlan from '../src/extensions/workspaces/sessions/(backend)/tool/run_fable_plan.mcp';\nimport toolWritePlan from '../src/extensions/workspaces/sessions/(backend)/tool/write_plan.mcp';\n\ntype Factory<T, C> = (context: C) => T;\nconst at = <T, C>(value: T | Factory<T, C>, context: C): T =>\n typeof value === 'function' ? (value as Factory<T, C>)(context) : value;\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nconst withWidget = <T>(key: string, value: T): T => value === undefined ? value : ({\n ...value, _meta: { ...(value as { _meta?: object })._meta, [\"doompi/widget\"]: key },\n});\n\nexport const mcp = defineMcpPlugin({\n name: '@agimon-ai/doompi-plan',\n session: (context) => ({\n get skills(): DoomMcpSessionPlugin['skills'] { return [at(skillDoompiUsePlan, context)]; },\n get tools(): DoomMcpSessionPlugin['tools'] { return [withWidget(\"@agimon-ai/doompi-plan/complete_plan\", via({ name: 'complete_plan' }, at(toolCompletePlan, context))), withWidget(\"@agimon-ai/doompi-plan/record_debug_evidence\", via({ name: 'record_debug_evidence' }, at(toolRecordDebugEvidence, context))), withWidget(\"@agimon-ai/doompi-plan/run_fable_plan\", via({ name: 'run_fable_plan' }, at(toolRunFablePlan, context))), withWidget(\"@agimon-ai/doompi-plan/write_plan\", via({ name: 'write_plan' }, at(toolWritePlan, context)))]; },\n }) satisfies DoomMcpSessionPlugin,\n});\n\nexport default mcp;\n"],"mappings":"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"}
1
+ {"version":3,"file":"mcp.cjs","names":["defineMcpSkill","readPackageResource","Type","defineMcpTool","defineMcpTool","defineMcpTool","defineMcpPlugin","skillDoompiUsePlan","toolCompletePlan","toolRecordDebugEvidence","toolWritePlan"],"sources":["../../src/extensions/workspaces/sessions/(backend)/skill/doompi-use-plan.mcp.ts","../../src/schemas/mcpTools.ts","../../src/services/mcpTools/index.ts","../../src/extensions/workspaces/sessions/(backend)/tool/complete_plan.mcp.ts","../../src/extensions/workspaces/sessions/(backend)/tool/record_debug_evidence.mcp.ts","../../src/extensions/workspaces/sessions/(backend)/tool/write_plan.mcp.ts","../../generated/mcp.ts"],"sourcesContent":["import { defineMcpSkill } from '@agimon-ai/doompi-core/mcpFacet';\nimport { readPackageResource } from '@agimon-ai/doompi-core/serverFacet';\n\nexport default defineMcpSkill({\n name: 'doompi-use-plan',\n description:\n 'Use Doom Pi Plan to draft reviewable normal, debug, or code review plans, persist them, and exit safely.',\n read: () => readPackageResource(import.meta.url, 'src/prompts/doompi-use-plan/SKILL.md'),\n});\n","import { Type } from 'typebox';\n\nconst markdown = Type.String({ minLength: 1 });\n\nexport const remoteWritePlanParameters = Type.Object({ markdown }, { additionalProperties: false });\nexport const writePlanParameters = Type.Object({ markdown: Type.Optional(markdown) }, { additionalProperties: false });\n","import type { DoomHeadlessTool } from '@agimon-ai/doompi-core/headless';\nimport type { DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcpFacet';\nimport type { Context } from '@deepseek-ai/cordis';\n\nimport { remoteWritePlanParameters } from '../../schemas/mcpTools';\n\nexport const PLAN_MCP_TOOLS_SERVICE = 'doom/plan-mcp-tools';\n\nconst MODE_ID = 'plan';\nconst MODE_LABEL = 'Plan';\n\nexport interface McpToolCatalog {\n get(name: string): DoomHeadlessTool | undefined;\n names(): readonly string[];\n}\n\nexport function mountMcpTools(tools: readonly DoomHeadlessTool[]) {\n return (context: Context): void => {\n context.plugin((providerContext) => {\n providerContext.provide(PLAN_MCP_TOOLS_SERVICE, {\n get: (name) => tools.find((tool) => tool.name === name),\n names: () => tools.map((tool) => tool.name),\n } satisfies McpToolCatalog);\n });\n };\n}\n\nexport function bindMcpTool(context: DoomMcpPluginContext, name: string): DoomHeadlessTool {\n const catalog = context.services.get<McpToolCatalog>(PLAN_MCP_TOOLS_SERVICE);\n const tool = catalog?.get(name);\n if (!tool || !catalog) throw new Error(`Plan tool is unavailable: ${name}`);\n const writesPlan = name === 'write_plan';\n return {\n ...tool,\n ...(writesPlan\n ? {\n description:\n 'Save the supplied Markdown plan in the bound session. Requires active Plan mode. Saving does not approve implementation.',\n parameters: remoteWritePlanParameters,\n annotations: { readOnlyHint: false, destructiveHint: false, openWorldHint: false },\n }\n : {}),\n execute(toolCallId, parameters, signal, onUpdate) {\n const activeModes = context.selection.read().state?.['minor-mode'] ?? [];\n if (!activeModes.includes(MODE_ID)) {\n const inactiveTools = [...catalog.names()].sort().join(', ');\n throw new Error(`${MODE_LABEL} minor mode is inactive. Inactive ${MODE_LABEL} tools: ${inactiveTools}.`);\n }\n if (\n writesPlan &&\n (typeof parameters !== 'object' ||\n parameters === null ||\n !('markdown' in parameters) ||\n typeof parameters.markdown !== 'string' ||\n !parameters.markdown.trim())\n ) {\n throw new Error(\n 'Supply the complete visible plan in the markdown argument. Remote calls cannot read the ChatGPT transcript.',\n );\n }\n const executionSignal = AbortSignal.any([context.signal, signal ?? context.signal]);\n return tool.execute(toolCallId, parameters, executionSignal, onUpdate, context.execution);\n },\n };\n}\n","import { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcpFacet';\n\nimport { bindMcpTool } from '../../../../../services/mcpTools';\n\nexport default defineMcpTool((context: DoomMcpPluginContext) => bindMcpTool(context, 'complete_plan'));\n","import { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcpFacet';\n\nimport { bindMcpTool } from '../../../../../services/mcpTools';\n\nexport default defineMcpTool((context: DoomMcpPluginContext) => bindMcpTool(context, 'record_debug_evidence'));\n","import { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcpFacet';\n\nimport { bindMcpTool } from '../../../../../services/mcpTools';\n\nexport default defineMcpTool((context: DoomMcpPluginContext) => bindMcpTool(context, 'write_plan'));\n","// Generated by @agimon-ai/doompi-build. Do not edit by hand.\nimport { defineMcpPlugin, type DoomMcpSessionPlugin } from '@agimon-ai/doompi-core/mcpFacet';\n\nimport skillDoompiUsePlan from '../src/extensions/workspaces/sessions/(backend)/skill/doompi-use-plan.mcp';\nimport toolCompletePlan from '../src/extensions/workspaces/sessions/(backend)/tool/complete_plan.mcp';\nimport toolRecordDebugEvidence from '../src/extensions/workspaces/sessions/(backend)/tool/record_debug_evidence.mcp';\nimport toolWritePlan from '../src/extensions/workspaces/sessions/(backend)/tool/write_plan.mcp';\n\ntype Factory<T, C> = (context: C) => T;\nconst at = <T, C>(value: T | Factory<T, C>, context: C): T =>\n typeof value === 'function' ? (value as Factory<T, C>)(context) : value;\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nconst withWidget = <T>(key: string, value: T): T => value === undefined ? value : ({\n ...value, _meta: { ...(value as { _meta?: object })._meta, [\"doompi/widget\"]: key },\n});\n\nexport const mcp = defineMcpPlugin({\n name: '@agimon-ai/doompi-plan',\n session: (context) => ({\n get skills(): DoomMcpSessionPlugin['skills'] { return [at(skillDoompiUsePlan, context)]; },\n get tools(): DoomMcpSessionPlugin['tools'] { return [withWidget(\"@agimon-ai/doompi-plan/complete_plan\", via({ name: 'complete_plan' }, at(toolCompletePlan, context))), withWidget(\"@agimon-ai/doompi-plan/record_debug_evidence\", via({ name: 'record_debug_evidence' }, at(toolRecordDebugEvidence, context))), withWidget(\"@agimon-ai/doompi-plan/write_plan\", via({ name: 'write_plan' }, at(toolWritePlan, context)))]; },\n }) satisfies DoomMcpSessionPlugin,\n});\n\nexport default mcp;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.d.mts","names":[],"sources":["../../generated/mcp.ts"],"mappings":";qBAmBa,+CAAG"}
1
+ {"version":3,"file":"mcp.d.mts","names":[],"sources":["../../generated/mcp.ts"],"mappings":";qBAkBa,+CAAG"}
@@ -4,7 +4,7 @@ import { Type } from "typebox";
4
4
  //#region src/extensions/workspaces/sessions/(backend)/skill/doompi-use-plan.mcp.ts
5
5
  var doompi_use_plan_mcp_default = defineMcpSkill({
6
6
  name: "doompi-use-plan",
7
- description: "Use Doom Pi Plan to draft reviewable normal, debug, or Fable-assisted plans, persist them, and exit safely.",
7
+ description: "Use Doom Pi Plan to draft reviewable normal, debug, or code review plans, persist them, and exit safely.",
8
8
  read: () => readPackageResource(import.meta.url, "src/prompts/doompi-use-plan/SKILL.md")
9
9
  });
10
10
  //#endregion
@@ -51,9 +51,6 @@ var complete_plan_mcp_default = defineMcpTool((context) => bindMcpTool(context,
51
51
  //#region src/extensions/workspaces/sessions/(backend)/tool/record_debug_evidence.mcp.ts
52
52
  var record_debug_evidence_mcp_default = defineMcpTool((context) => bindMcpTool(context, "record_debug_evidence"));
53
53
  //#endregion
54
- //#region src/extensions/workspaces/sessions/(backend)/tool/run_fable_plan.mcp.ts
55
- var run_fable_plan_mcp_default = defineMcpTool((context) => bindMcpTool(context, "run_fable_plan"));
56
- //#endregion
57
54
  //#region src/extensions/workspaces/sessions/(backend)/tool/write_plan.mcp.ts
58
55
  var write_plan_mcp_default = defineMcpTool((context) => bindMcpTool(context, "write_plan"));
59
56
  //#endregion
@@ -80,7 +77,6 @@ const mcp = defineMcpPlugin({
80
77
  return [
81
78
  withWidget("@agimon-ai/doompi-plan/complete_plan", via({ name: "complete_plan" }, at(complete_plan_mcp_default, context))),
82
79
  withWidget("@agimon-ai/doompi-plan/record_debug_evidence", via({ name: "record_debug_evidence" }, at(record_debug_evidence_mcp_default, context))),
83
- withWidget("@agimon-ai/doompi-plan/run_fable_plan", via({ name: "run_fable_plan" }, at(run_fable_plan_mcp_default, context))),
84
80
  withWidget("@agimon-ai/doompi-plan/write_plan", via({ name: "write_plan" }, at(write_plan_mcp_default, context)))
85
81
  ];
86
82
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.mjs","names":["skillDoompiUsePlan","toolCompletePlan","toolRecordDebugEvidence","toolRunFablePlan","toolWritePlan"],"sources":["../../src/extensions/workspaces/sessions/(backend)/skill/doompi-use-plan.mcp.ts","../../src/schemas/mcpTools.ts","../../src/services/mcpTools/index.ts","../../src/extensions/workspaces/sessions/(backend)/tool/complete_plan.mcp.ts","../../src/extensions/workspaces/sessions/(backend)/tool/record_debug_evidence.mcp.ts","../../src/extensions/workspaces/sessions/(backend)/tool/run_fable_plan.mcp.ts","../../src/extensions/workspaces/sessions/(backend)/tool/write_plan.mcp.ts","../../generated/mcp.ts"],"sourcesContent":["import { defineMcpSkill } from '@agimon-ai/doompi-core/mcpFacet';\nimport { readPackageResource } from '@agimon-ai/doompi-core/serverFacet';\n\nexport default defineMcpSkill({\n name: 'doompi-use-plan',\n description:\n 'Use Doom Pi Plan to draft reviewable normal, debug, or Fable-assisted plans, persist them, and exit safely.',\n read: () => readPackageResource(import.meta.url, 'src/prompts/doompi-use-plan/SKILL.md'),\n});\n","import { Type } from 'typebox';\n\nconst markdown = Type.String({ minLength: 1 });\n\nexport const remoteWritePlanParameters = Type.Object({ markdown }, { additionalProperties: false });\nexport const writePlanParameters = Type.Object({ markdown: Type.Optional(markdown) }, { additionalProperties: false });\n","import type { DoomHeadlessTool } from '@agimon-ai/doompi-core/headless';\nimport type { DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcpFacet';\nimport type { Context } from '@deepseek-ai/cordis';\n\nimport { remoteWritePlanParameters } from '../../schemas/mcpTools';\n\nexport const PLAN_MCP_TOOLS_SERVICE = 'doom/plan-mcp-tools';\n\nconst MODE_ID = 'plan';\nconst MODE_LABEL = 'Plan';\n\nexport interface McpToolCatalog {\n get(name: string): DoomHeadlessTool | undefined;\n names(): readonly string[];\n}\n\nexport function mountMcpTools(tools: readonly DoomHeadlessTool[]) {\n return (context: Context): void => {\n context.plugin((providerContext) => {\n providerContext.provide(PLAN_MCP_TOOLS_SERVICE, {\n get: (name) => tools.find((tool) => tool.name === name),\n names: () => tools.map((tool) => tool.name),\n } satisfies McpToolCatalog);\n });\n };\n}\n\nexport function bindMcpTool(context: DoomMcpPluginContext, name: string): DoomHeadlessTool {\n const catalog = context.services.get<McpToolCatalog>(PLAN_MCP_TOOLS_SERVICE);\n const tool = catalog?.get(name);\n if (!tool || !catalog) throw new Error(`Plan tool is unavailable: ${name}`);\n const writesPlan = name === 'write_plan';\n return {\n ...tool,\n ...(writesPlan\n ? {\n description:\n 'Save the supplied Markdown plan in the bound session. Requires active Plan mode. Saving does not approve implementation.',\n parameters: remoteWritePlanParameters,\n annotations: { readOnlyHint: false, destructiveHint: false, openWorldHint: false },\n }\n : {}),\n execute(toolCallId, parameters, signal, onUpdate) {\n const activeModes = context.selection.read().state?.['minor-mode'] ?? [];\n if (!activeModes.includes(MODE_ID)) {\n const inactiveTools = [...catalog.names()].sort().join(', ');\n throw new Error(`${MODE_LABEL} minor mode is inactive. Inactive ${MODE_LABEL} tools: ${inactiveTools}.`);\n }\n if (\n writesPlan &&\n (typeof parameters !== 'object' ||\n parameters === null ||\n !('markdown' in parameters) ||\n typeof parameters.markdown !== 'string' ||\n !parameters.markdown.trim())\n ) {\n throw new Error(\n 'Supply the complete visible plan in the markdown argument. Remote calls cannot read the ChatGPT transcript.',\n );\n }\n const executionSignal = AbortSignal.any([context.signal, signal ?? context.signal]);\n return tool.execute(toolCallId, parameters, executionSignal, onUpdate, context.execution);\n },\n };\n}\n","import { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcpFacet';\n\nimport { bindMcpTool } from '../../../../../services/mcpTools';\n\nexport default defineMcpTool((context: DoomMcpPluginContext) => bindMcpTool(context, 'complete_plan'));\n","import { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcpFacet';\n\nimport { bindMcpTool } from '../../../../../services/mcpTools';\n\nexport default defineMcpTool((context: DoomMcpPluginContext) => bindMcpTool(context, 'record_debug_evidence'));\n","import { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcpFacet';\n\nimport { bindMcpTool } from '../../../../../services/mcpTools';\n\nexport default defineMcpTool((context: DoomMcpPluginContext) => bindMcpTool(context, 'run_fable_plan'));\n","import { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcpFacet';\n\nimport { bindMcpTool } from '../../../../../services/mcpTools';\n\nexport default defineMcpTool((context: DoomMcpPluginContext) => bindMcpTool(context, 'write_plan'));\n","// Generated by @agimon-ai/doompi-build. Do not edit by hand.\nimport { defineMcpPlugin, type DoomMcpSessionPlugin } from '@agimon-ai/doompi-core/mcpFacet';\n\nimport skillDoompiUsePlan from '../src/extensions/workspaces/sessions/(backend)/skill/doompi-use-plan.mcp';\nimport toolCompletePlan from '../src/extensions/workspaces/sessions/(backend)/tool/complete_plan.mcp';\nimport toolRecordDebugEvidence from '../src/extensions/workspaces/sessions/(backend)/tool/record_debug_evidence.mcp';\nimport toolRunFablePlan from '../src/extensions/workspaces/sessions/(backend)/tool/run_fable_plan.mcp';\nimport toolWritePlan from '../src/extensions/workspaces/sessions/(backend)/tool/write_plan.mcp';\n\ntype Factory<T, C> = (context: C) => T;\nconst at = <T, C>(value: T | Factory<T, C>, context: C): T =>\n typeof value === 'function' ? (value as Factory<T, C>)(context) : value;\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nconst withWidget = <T>(key: string, value: T): T => value === undefined ? value : ({\n ...value, _meta: { ...(value as { _meta?: object })._meta, [\"doompi/widget\"]: key },\n});\n\nexport const mcp = defineMcpPlugin({\n name: '@agimon-ai/doompi-plan',\n session: (context) => ({\n get skills(): DoomMcpSessionPlugin['skills'] { return [at(skillDoompiUsePlan, context)]; },\n get tools(): DoomMcpSessionPlugin['tools'] { return [withWidget(\"@agimon-ai/doompi-plan/complete_plan\", via({ name: 'complete_plan' }, at(toolCompletePlan, context))), withWidget(\"@agimon-ai/doompi-plan/record_debug_evidence\", via({ name: 'record_debug_evidence' }, at(toolRecordDebugEvidence, context))), withWidget(\"@agimon-ai/doompi-plan/run_fable_plan\", via({ name: 'run_fable_plan' }, at(toolRunFablePlan, context))), withWidget(\"@agimon-ai/doompi-plan/write_plan\", via({ name: 'write_plan' }, at(toolWritePlan, context)))]; },\n }) satisfies DoomMcpSessionPlugin,\n});\n\nexport default mcp;\n"],"mappings":"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"}
1
+ {"version":3,"file":"mcp.mjs","names":["skillDoompiUsePlan","toolCompletePlan","toolRecordDebugEvidence","toolWritePlan"],"sources":["../../src/extensions/workspaces/sessions/(backend)/skill/doompi-use-plan.mcp.ts","../../src/schemas/mcpTools.ts","../../src/services/mcpTools/index.ts","../../src/extensions/workspaces/sessions/(backend)/tool/complete_plan.mcp.ts","../../src/extensions/workspaces/sessions/(backend)/tool/record_debug_evidence.mcp.ts","../../src/extensions/workspaces/sessions/(backend)/tool/write_plan.mcp.ts","../../generated/mcp.ts"],"sourcesContent":["import { defineMcpSkill } from '@agimon-ai/doompi-core/mcpFacet';\nimport { readPackageResource } from '@agimon-ai/doompi-core/serverFacet';\n\nexport default defineMcpSkill({\n name: 'doompi-use-plan',\n description:\n 'Use Doom Pi Plan to draft reviewable normal, debug, or code review plans, persist them, and exit safely.',\n read: () => readPackageResource(import.meta.url, 'src/prompts/doompi-use-plan/SKILL.md'),\n});\n","import { Type } from 'typebox';\n\nconst markdown = Type.String({ minLength: 1 });\n\nexport const remoteWritePlanParameters = Type.Object({ markdown }, { additionalProperties: false });\nexport const writePlanParameters = Type.Object({ markdown: Type.Optional(markdown) }, { additionalProperties: false });\n","import type { DoomHeadlessTool } from '@agimon-ai/doompi-core/headless';\nimport type { DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcpFacet';\nimport type { Context } from '@deepseek-ai/cordis';\n\nimport { remoteWritePlanParameters } from '../../schemas/mcpTools';\n\nexport const PLAN_MCP_TOOLS_SERVICE = 'doom/plan-mcp-tools';\n\nconst MODE_ID = 'plan';\nconst MODE_LABEL = 'Plan';\n\nexport interface McpToolCatalog {\n get(name: string): DoomHeadlessTool | undefined;\n names(): readonly string[];\n}\n\nexport function mountMcpTools(tools: readonly DoomHeadlessTool[]) {\n return (context: Context): void => {\n context.plugin((providerContext) => {\n providerContext.provide(PLAN_MCP_TOOLS_SERVICE, {\n get: (name) => tools.find((tool) => tool.name === name),\n names: () => tools.map((tool) => tool.name),\n } satisfies McpToolCatalog);\n });\n };\n}\n\nexport function bindMcpTool(context: DoomMcpPluginContext, name: string): DoomHeadlessTool {\n const catalog = context.services.get<McpToolCatalog>(PLAN_MCP_TOOLS_SERVICE);\n const tool = catalog?.get(name);\n if (!tool || !catalog) throw new Error(`Plan tool is unavailable: ${name}`);\n const writesPlan = name === 'write_plan';\n return {\n ...tool,\n ...(writesPlan\n ? {\n description:\n 'Save the supplied Markdown plan in the bound session. Requires active Plan mode. Saving does not approve implementation.',\n parameters: remoteWritePlanParameters,\n annotations: { readOnlyHint: false, destructiveHint: false, openWorldHint: false },\n }\n : {}),\n execute(toolCallId, parameters, signal, onUpdate) {\n const activeModes = context.selection.read().state?.['minor-mode'] ?? [];\n if (!activeModes.includes(MODE_ID)) {\n const inactiveTools = [...catalog.names()].sort().join(', ');\n throw new Error(`${MODE_LABEL} minor mode is inactive. Inactive ${MODE_LABEL} tools: ${inactiveTools}.`);\n }\n if (\n writesPlan &&\n (typeof parameters !== 'object' ||\n parameters === null ||\n !('markdown' in parameters) ||\n typeof parameters.markdown !== 'string' ||\n !parameters.markdown.trim())\n ) {\n throw new Error(\n 'Supply the complete visible plan in the markdown argument. Remote calls cannot read the ChatGPT transcript.',\n );\n }\n const executionSignal = AbortSignal.any([context.signal, signal ?? context.signal]);\n return tool.execute(toolCallId, parameters, executionSignal, onUpdate, context.execution);\n },\n };\n}\n","import { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcpFacet';\n\nimport { bindMcpTool } from '../../../../../services/mcpTools';\n\nexport default defineMcpTool((context: DoomMcpPluginContext) => bindMcpTool(context, 'complete_plan'));\n","import { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcpFacet';\n\nimport { bindMcpTool } from '../../../../../services/mcpTools';\n\nexport default defineMcpTool((context: DoomMcpPluginContext) => bindMcpTool(context, 'record_debug_evidence'));\n","import { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcpFacet';\n\nimport { bindMcpTool } from '../../../../../services/mcpTools';\n\nexport default defineMcpTool((context: DoomMcpPluginContext) => bindMcpTool(context, 'write_plan'));\n","// Generated by @agimon-ai/doompi-build. Do not edit by hand.\nimport { defineMcpPlugin, type DoomMcpSessionPlugin } from '@agimon-ai/doompi-core/mcpFacet';\n\nimport skillDoompiUsePlan from '../src/extensions/workspaces/sessions/(backend)/skill/doompi-use-plan.mcp';\nimport toolCompletePlan from '../src/extensions/workspaces/sessions/(backend)/tool/complete_plan.mcp';\nimport toolRecordDebugEvidence from '../src/extensions/workspaces/sessions/(backend)/tool/record_debug_evidence.mcp';\nimport toolWritePlan from '../src/extensions/workspaces/sessions/(backend)/tool/write_plan.mcp';\n\ntype Factory<T, C> = (context: C) => T;\nconst at = <T, C>(value: T | Factory<T, C>, context: C): T =>\n typeof value === 'function' ? (value as Factory<T, C>)(context) : value;\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nconst withWidget = <T>(key: string, value: T): T => value === undefined ? value : ({\n ...value, _meta: { ...(value as { _meta?: object })._meta, [\"doompi/widget\"]: key },\n});\n\nexport const mcp = defineMcpPlugin({\n name: '@agimon-ai/doompi-plan',\n session: (context) => ({\n get skills(): DoomMcpSessionPlugin['skills'] { return [at(skillDoompiUsePlan, context)]; },\n get tools(): DoomMcpSessionPlugin['tools'] { return [withWidget(\"@agimon-ai/doompi-plan/complete_plan\", via({ name: 'complete_plan' }, at(toolCompletePlan, context))), withWidget(\"@agimon-ai/doompi-plan/record_debug_evidence\", via({ name: 'record_debug_evidence' }, at(toolRecordDebugEvidence, context))), withWidget(\"@agimon-ai/doompi-plan/write_plan\", via({ name: 'write_plan' }, at(toolWritePlan, context)))]; },\n }) satisfies DoomMcpSessionPlugin,\n});\n\nexport default mcp;\n"],"mappings":";;;;AAGA,IAAA,8BAAe,eAAe;CAC5B,MAAM;CACN,aACE;CACF,YAAY,oBAAoB,YAAY,KAAK,sCAAsC;AACzF,CAAC;;;ACND,MAAM,WAAW,KAAK,OAAO,EAAE,WAAW,EAAE,CAAC;AAE7C,MAAa,4BAA4B,KAAK,OAAO,EAAE,SAAS,GAAG,EAAE,sBAAsB,MAAM,CAAC;AAC/D,KAAK,OAAO,EAAE,UAAU,KAAK,SAAS,QAAQ,EAAE,GAAG,EAAE,sBAAsB,MAAM,CAAC;;;ACCrH,MAAa,yBAAyB;AAEtC,MAAM,UAAU;AAChB,MAAM,aAAa;AAkBnB,SAAgB,YAAY,SAA+B,MAAgC;CACzF,MAAM,UAAU,QAAQ,SAAS,IAAoB,sBAAsB;CAC3E,MAAM,OAAO,SAAS,IAAI,IAAI;CAC9B,IAAI,CAAC,QAAQ,CAAC,SAAS,MAAM,IAAI,MAAM,6BAA6B,MAAM;CAC1E,MAAM,aAAa,SAAS;CAC5B,OAAO;EACL,GAAG;EACH,GAAI,aACA;GACE,aACE;GACF,YAAY;GACZ,aAAa;IAAE,cAAc;IAAO,iBAAiB;IAAO,eAAe;GAAM;EACnF,IACA,CAAC;EACL,QAAQ,YAAY,YAAY,QAAQ,UAAU;GAEhD,IAAI,EADgB,QAAQ,UAAU,KAAK,CAAC,CAAC,QAAQ,iBAAiB,CAAC,EAAA,CACtD,SAAS,OAAO,GAAG;IAClC,MAAM,gBAAgB,CAAC,GAAG,QAAQ,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI;IAC3D,MAAM,IAAI,MAAM,GAAG,WAAW,oCAAoC,WAAW,UAAU,cAAc,EAAE;GACzG;GACA,IACE,eACC,OAAO,eAAe,YACrB,eAAe,QACf,EAAE,cAAc,eAChB,OAAO,WAAW,aAAa,YAC/B,CAAC,WAAW,SAAS,KAAK,IAE5B,MAAM,IAAI,MACR,6GACF;GAEF,MAAM,kBAAkB,YAAY,IAAI,CAAC,QAAQ,QAAQ,UAAU,QAAQ,MAAM,CAAC;GAClF,OAAO,KAAK,QAAQ,YAAY,YAAY,iBAAiB,UAAU,QAAQ,SAAS;EAC1F;CACF;AACF;;;AC5DA,IAAA,4BAAe,eAAe,YAAkC,YAAY,SAAS,eAAe,CAAC;;;ACArG,IAAA,oCAAe,eAAe,YAAkC,YAAY,SAAS,uBAAuB,CAAC;;;ACA7G,IAAA,yBAAe,eAAe,YAAkC,YAAY,SAAS,YAAY,CAAC;;;ACKlG,MAAM,MAAY,OAA0B,YAC1C,OAAO,UAAU,aAAc,MAAwB,OAAO,IAAI;AACpE,MAAM,OAAU,UAAmC,UAChD,UAAU,KAAA,IAAY,KAAA,IAAY;CAAE,GAAG;CAAU,GAAI;AAAiB;AAEzE,MAAM,cAAiB,KAAa,UAAgB,UAAU,KAAA,IAAY,QAAS;CACjF,GAAG;CAAO,OAAO;EAAE,GAAI,MAA6B;GAAQ,kBAAkB;CAAI;AACpF;AAEA,MAAa,MAAM,gBAAgB;CACjC,MAAM;CACN,UAAU,aAAa;EACrB,IAAI,SAAyC;GAAE,OAAO,CAAC,GAAGA,6BAAoB,OAAO,CAAC;EAAG;EACzF,IAAI,QAAuC;GAAE,OAAO;IAAC,WAAW,wCAAwC,IAAI,EAAE,MAAM,gBAAgB,GAAG,GAAGC,2BAAkB,OAAO,CAAC,CAAC;IAAG,WAAW,gDAAgD,IAAI,EAAE,MAAM,wBAAwB,GAAG,GAAGC,mCAAyB,OAAO,CAAC,CAAC;IAAG,WAAW,qCAAqC,IAAI,EAAE,MAAM,aAAa,GAAG,GAAGC,wBAAe,OAAO,CAAC,CAAC;GAAC;EAAG;CAC/Z;AACF,CAAC"}
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_planMode = require("../planMode-D8UGqbWB.cjs");
5
+ const require_planMode = require("../planMode-Cmw5BU17.cjs");
6
6
  let _agimon_ai_doompi_core_piExtension = require("@agimon-ai/doompi-core/piExtension");
7
7
  let _agimon_ai_doompi_core_extensionFile = require("@agimon-ai/doompi-core/extensionFile");
8
8
  //#region src/extensions/workspaces/sessions/(backend)/root.cli.ts
@@ -16,7 +16,7 @@ var root_cli_default = (0, _agimon_ai_doompi_core_extensionFile.defineRoot)((con
16
16
  moduleUrl: require("url").pathToFileURL(__filename).href,
17
17
  skills: [{
18
18
  name: "doompi-use-plan",
19
- description: "Use Doom Pi Plan to draft reviewable normal, debug, or Fable-assisted plans, persist them, and exit safely."
19
+ description: "Use Doom Pi Plan to draft reviewable normal, debug, or code review plans, persist them, and exit safely."
20
20
  }]
21
21
  }]
22
22
  };
@@ -45,16 +45,13 @@ var toolCall_cli_default = (0, _agimon_ai_doompi_core_extensionFile.defineCliHoo
45
45
  var plan_cli_default = (0, _agimon_ai_doompi_core_extensionFile.defineResource)((context) => context.root.resources[0]);
46
46
  //#endregion
47
47
  //#region src/extensions/workspaces/sessions/(backend)/tool/completePlan.cli.ts
48
- var completePlan_cli_default = (0, _agimon_ai_doompi_core_extensionFile.defineCliTool)((context) => context.root.tools[3]);
48
+ var completePlan_cli_default = (0, _agimon_ai_doompi_core_extensionFile.defineCliTool)((context) => context.root.tools[2]);
49
49
  //#endregion
50
50
  //#region src/extensions/workspaces/sessions/(backend)/tool/recordDebugEvidence.cli.ts
51
51
  var recordDebugEvidence_cli_default = (0, _agimon_ai_doompi_core_extensionFile.defineCliTool)((context) => context.root.tools[0]);
52
52
  //#endregion
53
- //#region src/extensions/workspaces/sessions/(backend)/tool/runFablePlan.cli.ts
54
- var runFablePlan_cli_default = (0, _agimon_ai_doompi_core_extensionFile.defineCliTool)((context) => context.root.tools[1]);
55
- //#endregion
56
53
  //#region src/extensions/workspaces/sessions/(backend)/tool/writePlan.cli.ts
57
- var writePlan_cli_default = (0, _agimon_ai_doompi_core_extensionFile.defineCliTool)((context) => context.root.tools[2]);
54
+ var writePlan_cli_default = (0, _agimon_ai_doompi_core_extensionFile.defineCliTool)((context) => context.root.tools[1]);
58
55
  //#endregion
59
56
  //#region generated/pi.ts
60
57
  const at = (value, context) => typeof value === "function" ? value(context) : value;
@@ -82,7 +79,6 @@ const extension = (0, _agimon_ai_doompi_core_piExtension.definePiExtension)("@ag
82
79
  ...(0, _agimon_ai_doompi_core_piExtension.piToolContributions)("@agimon-ai/doompi-plan", [
83
80
  via({ name: "complete_plan" }, at(completePlan_cli_default, contextSession)),
84
81
  via({ name: "record_debug_evidence" }, at(recordDebugEvidence_cli_default, contextSession)),
85
- via({ name: "run_fable_plan" }, at(runFablePlan_cli_default, contextSession)),
86
82
  via({ name: "write_plan" }, at(writePlan_cli_default, contextSession))
87
83
  ]),
88
84
  services: [...scopeSession.services ?? []]
@@ -1 +1 @@
1
- {"version":3,"file":"pi.cjs","names":["defineRoot","createPlanModeRuntime","definePiTool","defineCliHook","defineCliHook","defineCliHook","defineCliHook","defineResource","defineCliTool","defineCliTool","defineCliTool","defineCliTool","definePiExtension","rootSession","composeRootHooks","hookBeforeAgentStart","hookContext","hookSessionStart","hookToolCall","resourcePlan","piToolContributions","toolCompletePlan","toolRecordDebugEvidence","toolRunFablePlan","toolWritePlan"],"sources":["../../src/extensions/workspaces/sessions/(backend)/root.cli.ts","../../src/extensions/workspaces/sessions/(backend)/hook/beforeAgentStart.cli.ts","../../src/extensions/workspaces/sessions/(backend)/hook/context.cli.ts","../../src/extensions/workspaces/sessions/(backend)/hook/sessionStart.cli.ts","../../src/extensions/workspaces/sessions/(backend)/hook/toolCall.cli.ts","../../src/extensions/workspaces/sessions/(backend)/resource/plan.cli.ts","../../src/extensions/workspaces/sessions/(backend)/tool/completePlan.cli.ts","../../src/extensions/workspaces/sessions/(backend)/tool/recordDebugEvidence.cli.ts","../../src/extensions/workspaces/sessions/(backend)/tool/runFablePlan.cli.ts","../../src/extensions/workspaces/sessions/(backend)/tool/writePlan.cli.ts","../../generated/pi.ts"],"sourcesContent":["import { defineRoot, type RootDeclaration } from '@agimon-ai/doompi-core/extensionFile';\nimport {\n definePiTool,\n type PiPluginContext,\n type PiPluginContributions,\n type PiToolDeclaration,\n} from '@agimon-ai/doompi-core/piExtension';\n\nimport { createPlanModeRuntime } from '../../../../services/planMode';\n\ntype Scope = Omit<ReturnType<typeof createPlanModeRuntime>, 'tools'> & {\n readonly tools: readonly PiToolDeclaration[];\n readonly resources: NonNullable<PiPluginContributions['resources']>;\n};\n\nexport default defineRoot((context: PiPluginContext<undefined>): RootDeclaration<Scope, PiPluginContext<undefined>> => {\n const runtime = createPlanModeRuntime(context.pi);\n const value = {\n ...runtime,\n tools: runtime.tools.map((tool) => definePiTool(tool)),\n resources: [\n {\n source: '@agimon-ai/doompi-plan',\n moduleUrl: import.meta.url,\n skills: [\n {\n name: 'doompi-use-plan',\n description:\n 'Use Doom Pi Plan to draft reviewable normal, debug, or Fable-assisted plans, persist them, and exit safely.',\n },\n ],\n },\n ],\n };\n return {\n value,\n services: value.services,\n onStart: value.onStart,\n onStop: value.onStop,\n onDispose: value.onDispose,\n };\n});\n","import { defineCliHook, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\n\ntype Root = Awaited<ReturnType<typeof import('../root.cli').default>>['value'];\n\nexport default defineCliHook((context: WithRoot<unknown, Root>) => context.root.events!.before_agent_start!);\n","import { defineCliHook, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\nimport type { PiEventHandlers } from '@agimon-ai/doompi-core/piExtension';\n\ntype Root = Awaited<ReturnType<typeof import('../root.cli').default>>['value'];\n\nexport default defineCliHook(\n (context: WithRoot<unknown, Root>): NonNullable<PiEventHandlers['context']> => context.root.events!.context!,\n);\n","import { defineCliHook, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\n\ntype Root = Awaited<ReturnType<typeof import('../root.cli').default>>['value'];\n\nexport default defineCliHook((context: WithRoot<unknown, Root>) => context.root.events!.session_start!);\n","import { defineCliHook, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\n\ntype Root = Awaited<ReturnType<typeof import('../root.cli').default>>['value'];\n\nexport default defineCliHook((context: WithRoot<unknown, Root>) => context.root.events!.tool_call!);\n","import { defineResource, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\n\ntype Root = Awaited<ReturnType<typeof import('../root.cli').default>>['value'];\n\nexport default defineResource((context: WithRoot<unknown, Root>) => context.root.resources![0]!);\n","import { defineCliTool, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\n\ntype Root = Awaited<ReturnType<typeof import('../root.cli').default>>['value'];\n\nexport default defineCliTool((context: WithRoot<unknown, Root>) => context.root.tools![3]!);\n","import { defineCliTool, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\n\ntype Root = Awaited<ReturnType<typeof import('../root.cli').default>>['value'];\n\nexport default defineCliTool((context: WithRoot<unknown, Root>) => context.root.tools![0]!);\n","import { defineCliTool, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\n\ntype Root = Awaited<ReturnType<typeof import('../root.cli').default>>['value'];\n\nexport default defineCliTool((context: WithRoot<unknown, Root>) => context.root.tools![1]!);\n","import { defineCliTool, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\n\ntype Root = Awaited<ReturnType<typeof import('../root.cli').default>>['value'];\n\nexport default defineCliTool((context: WithRoot<unknown, Root>) => context.root.tools![2]!);\n","// Generated by @agimon-ai/doompi-build. Do not edit by hand.\nimport { definePiExtension, piToolContributions, type PiPluginContext, type PiPluginContributions } from '@agimon-ai/doompi-core/piExtension';\nimport { composeRootHooks } from '@agimon-ai/doompi-core/extensionFile';\n\nimport rootSession from '../src/extensions/workspaces/sessions/(backend)/root.cli';\nimport hookBeforeAgentStart from '../src/extensions/workspaces/sessions/(backend)/hook/beforeAgentStart.cli';\nimport hookContext from '../src/extensions/workspaces/sessions/(backend)/hook/context.cli';\nimport hookSessionStart from '../src/extensions/workspaces/sessions/(backend)/hook/sessionStart.cli';\nimport hookToolCall from '../src/extensions/workspaces/sessions/(backend)/hook/toolCall.cli';\nimport resourcePlan from '../src/extensions/workspaces/sessions/(backend)/resource/plan.cli';\nimport toolCompletePlan from '../src/extensions/workspaces/sessions/(backend)/tool/completePlan.cli';\nimport toolRecordDebugEvidence from '../src/extensions/workspaces/sessions/(backend)/tool/recordDebugEvidence.cli';\nimport toolRunFablePlan from '../src/extensions/workspaces/sessions/(backend)/tool/runFablePlan.cli';\nimport toolWritePlan from '../src/extensions/workspaces/sessions/(backend)/tool/writePlan.cli';\n\ntype OptionsOf<T> = T extends (context: PiPluginContext<infer Options>) => unknown ? Options : never;\ntype InferredOptions = Exclude<OptionsOf<typeof rootSession> | OptionsOf<typeof hookBeforeAgentStart> | OptionsOf<typeof hookContext> | OptionsOf<typeof hookSessionStart> | OptionsOf<typeof hookToolCall> | OptionsOf<typeof resourcePlan> | OptionsOf<typeof toolCompletePlan> | OptionsOf<typeof toolRecordDebugEvidence> | OptionsOf<typeof toolRunFablePlan> | OptionsOf<typeof toolWritePlan>, undefined>;\ntype Intersect<Union> =\n (Union extends unknown ? (value: Union) => void : never) extends (value: infer Value) => void ? Value : never;\ntype ExtensionOptions = [InferredOptions] extends [never] ? undefined : Intersect<InferredOptions>;\n\ntype Factory<T, C> = (context: C) => T;\nconst at = <T, C>(value: T | Factory<T, C>, context: C): T =>\n typeof value === 'function' ? (value as Factory<T, C>)(context) : value;\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nexport const extension = definePiExtension<ExtensionOptions>('@agimon-ai/doompi-plan', async (context) => {\n const scopeSession = await rootSession(context);\n const contextSession = { ...context, root: scopeSession.value };\n return {\n ...composeRootHooks(scopeSession),\n events: {\n before_agent_start: at(hookBeforeAgentStart, contextSession) as NonNullable<PiPluginContributions['events']>['before_agent_start'],\n context: at(hookContext, contextSession) as NonNullable<PiPluginContributions['events']>['context'],\n session_start: at(hookSessionStart, contextSession) as NonNullable<PiPluginContributions['events']>['session_start'],\n tool_call: at(hookToolCall, contextSession) as NonNullable<PiPluginContributions['events']>['tool_call'],\n },\n get resources(): PiPluginContributions['resources'] { return [at(resourcePlan, contextSession)]; },\n ...piToolContributions('@agimon-ai/doompi-plan', [via({ name: 'complete_plan' }, at(toolCompletePlan, contextSession)), via({ name: 'record_debug_evidence' }, at(toolRecordDebugEvidence, contextSession)), via({ name: 'run_fable_plan' }, at(toolRunFablePlan, contextSession)), via({ name: 'write_plan' }, at(toolWritePlan, contextSession))]),\n services: [...(scopeSession.services ?? [])],\n };\n});\n\nexport default extension;\n"],"mappings":";;;;;;;;AAeA,IAAA,oBAAA,GAAeA,qCAAAA,WAAAA,EAAY,YAA4F;CACrH,MAAM,UAAUC,iBAAAA,sBAAsB,QAAQ,EAAE;CAChD,MAAM,QAAQ;EACZ,GAAG;EACH,OAAO,QAAQ,MAAM,KAAK,UAAA,GAASC,mCAAAA,aAAAA,CAAa,IAAI,CAAC;EACrD,WAAW,CACT;GACE,QAAQ;GACR,WAAA,QAAA,KAAA,CAAA,CAAA,cAAA,UAAA,CAAA,CAAA;GACA,QAAQ,CACN;IACE,MAAM;IACN,aACE;GACJ,CACF;EACF,CACF;CACF;CACA,OAAO;EACL;EACA,UAAU,MAAM;EAChB,SAAS,MAAM;EACf,QAAQ,MAAM;EACd,WAAW,MAAM;CACnB;AACF,CAAC;;;ACrCD,IAAA,gCAAA,GAAeC,qCAAAA,cAAAA,EAAe,YAAqC,QAAQ,KAAK,OAAQ,kBAAmB;;;ACC3G,IAAA,uBAAA,GAAeC,qCAAAA,cAAAA,EACZ,YAA8E,QAAQ,KAAK,OAAQ,OACtG;;;ACHA,IAAA,4BAAA,GAAeC,qCAAAA,cAAAA,EAAe,YAAqC,QAAQ,KAAK,OAAQ,aAAc;;;ACAtG,IAAA,wBAAA,GAAeC,qCAAAA,cAAAA,EAAe,YAAqC,QAAQ,KAAK,OAAQ,SAAU;;;ACAlG,IAAA,oBAAA,GAAeC,qCAAAA,eAAAA,EAAgB,YAAqC,QAAQ,KAAK,UAAW,EAAG;;;ACA/F,IAAA,4BAAA,GAAeC,qCAAAA,cAAAA,EAAe,YAAqC,QAAQ,KAAK,MAAO,EAAG;;;ACA1F,IAAA,mCAAA,GAAeC,qCAAAA,cAAAA,EAAe,YAAqC,QAAQ,KAAK,MAAO,EAAG;;;ACA1F,IAAA,4BAAA,GAAeC,qCAAAA,cAAAA,EAAe,YAAqC,QAAQ,KAAK,MAAO,EAAG;;;ACA1F,IAAA,yBAAA,GAAeC,qCAAAA,cAAAA,EAAe,YAAqC,QAAQ,KAAK,MAAO,EAAG;;;ACkB1F,MAAM,MAAY,OAA0B,YAC1C,OAAO,UAAU,aAAc,MAAwB,OAAO,IAAI;AACpE,MAAM,OAAU,UAAmC,UAChD,UAAU,KAAA,IAAY,KAAA,IAAY;CAAE,GAAG;CAAU,GAAI;AAAiB;AAEzE,MAAa,aAAA,GAAYC,mCAAAA,kBAAAA,CAAoC,0BAA0B,OAAO,YAAY;CACxG,MAAM,eAAe,MAAMC,iBAAY,OAAO;CAC9C,MAAM,iBAAiB;EAAE,GAAG;EAAS,MAAM,aAAa;CAAM;CAC9D,OAAO;EACL,IAAA,GAAGC,qCAAAA,iBAAAA,CAAiB,YAAY;EAChC,QAAQ;GACN,oBAAoB,GAAGC,8BAAsB,cAAc;GAC3D,SAAS,GAAGC,qBAAa,cAAc;GACvC,eAAe,GAAGC,0BAAkB,cAAc;GAClD,WAAW,GAAGC,sBAAc,cAAc;EAC5C;EACA,IAAI,YAAgD;GAAE,OAAO,CAAC,GAAGC,kBAAc,cAAc,CAAC;EAAG;EACjG,IAAA,GAAGC,mCAAAA,oBAAAA,CAAoB,0BAA0B;GAAC,IAAI,EAAE,MAAM,gBAAgB,GAAG,GAAGC,0BAAkB,cAAc,CAAC;GAAG,IAAI,EAAE,MAAM,wBAAwB,GAAG,GAAGC,iCAAyB,cAAc,CAAC;GAAG,IAAI,EAAE,MAAM,iBAAiB,GAAG,GAAGC,0BAAkB,cAAc,CAAC;GAAG,IAAI,EAAE,MAAM,aAAa,GAAG,GAAGC,uBAAe,cAAc,CAAC;EAAC,CAAC;EACnV,UAAU,CAAC,GAAI,aAAa,YAAY,CAAC,CAAE;CAC7C;AACF,CAAC"}
1
+ {"version":3,"file":"pi.cjs","names":["defineRoot","createPlanModeRuntime","definePiTool","defineCliHook","defineCliHook","defineCliHook","defineCliHook","defineResource","defineCliTool","defineCliTool","defineCliTool","definePiExtension","rootSession","composeRootHooks","hookBeforeAgentStart","hookContext","hookSessionStart","hookToolCall","resourcePlan","piToolContributions","toolCompletePlan","toolRecordDebugEvidence","toolWritePlan"],"sources":["../../src/extensions/workspaces/sessions/(backend)/root.cli.ts","../../src/extensions/workspaces/sessions/(backend)/hook/beforeAgentStart.cli.ts","../../src/extensions/workspaces/sessions/(backend)/hook/context.cli.ts","../../src/extensions/workspaces/sessions/(backend)/hook/sessionStart.cli.ts","../../src/extensions/workspaces/sessions/(backend)/hook/toolCall.cli.ts","../../src/extensions/workspaces/sessions/(backend)/resource/plan.cli.ts","../../src/extensions/workspaces/sessions/(backend)/tool/completePlan.cli.ts","../../src/extensions/workspaces/sessions/(backend)/tool/recordDebugEvidence.cli.ts","../../src/extensions/workspaces/sessions/(backend)/tool/writePlan.cli.ts","../../generated/pi.ts"],"sourcesContent":["import { defineRoot, type RootDeclaration } from '@agimon-ai/doompi-core/extensionFile';\nimport {\n definePiTool,\n type PiPluginContext,\n type PiPluginContributions,\n type PiToolDeclaration,\n} from '@agimon-ai/doompi-core/piExtension';\n\nimport { createPlanModeRuntime } from '../../../../services/planMode';\n\ntype Scope = Omit<ReturnType<typeof createPlanModeRuntime>, 'tools'> & {\n readonly tools: readonly PiToolDeclaration[];\n readonly resources: NonNullable<PiPluginContributions['resources']>;\n};\n\nexport default defineRoot((context: PiPluginContext<undefined>): RootDeclaration<Scope, PiPluginContext<undefined>> => {\n const runtime = createPlanModeRuntime(context.pi);\n const value = {\n ...runtime,\n tools: runtime.tools.map((tool) => definePiTool(tool)),\n resources: [\n {\n source: '@agimon-ai/doompi-plan',\n moduleUrl: import.meta.url,\n skills: [\n {\n name: 'doompi-use-plan',\n description:\n 'Use Doom Pi Plan to draft reviewable normal, debug, or code review plans, persist them, and exit safely.',\n },\n ],\n },\n ],\n };\n return {\n value,\n services: value.services,\n onStart: value.onStart,\n onStop: value.onStop,\n onDispose: value.onDispose,\n };\n});\n","import { defineCliHook, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\n\ntype Root = Awaited<ReturnType<typeof import('../root.cli').default>>['value'];\n\nexport default defineCliHook((context: WithRoot<unknown, Root>) => context.root.events!.before_agent_start!);\n","import { defineCliHook, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\nimport type { PiEventHandlers } from '@agimon-ai/doompi-core/piExtension';\n\ntype Root = Awaited<ReturnType<typeof import('../root.cli').default>>['value'];\n\nexport default defineCliHook(\n (context: WithRoot<unknown, Root>): NonNullable<PiEventHandlers['context']> => context.root.events!.context!,\n);\n","import { defineCliHook, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\n\ntype Root = Awaited<ReturnType<typeof import('../root.cli').default>>['value'];\n\nexport default defineCliHook((context: WithRoot<unknown, Root>) => context.root.events!.session_start!);\n","import { defineCliHook, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\n\ntype Root = Awaited<ReturnType<typeof import('../root.cli').default>>['value'];\n\nexport default defineCliHook((context: WithRoot<unknown, Root>) => context.root.events!.tool_call!);\n","import { defineResource, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\n\ntype Root = Awaited<ReturnType<typeof import('../root.cli').default>>['value'];\n\nexport default defineResource((context: WithRoot<unknown, Root>) => context.root.resources![0]!);\n","import { defineCliTool, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\n\ntype Root = Awaited<ReturnType<typeof import('../root.cli').default>>['value'];\n\nexport default defineCliTool((context: WithRoot<unknown, Root>) => context.root.tools![2]!);\n","import { defineCliTool, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\n\ntype Root = Awaited<ReturnType<typeof import('../root.cli').default>>['value'];\n\nexport default defineCliTool((context: WithRoot<unknown, Root>) => context.root.tools![0]!);\n","import { defineCliTool, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\n\ntype Root = Awaited<ReturnType<typeof import('../root.cli').default>>['value'];\n\nexport default defineCliTool((context: WithRoot<unknown, Root>) => context.root.tools![1]!);\n","// Generated by @agimon-ai/doompi-build. Do not edit by hand.\nimport { definePiExtension, piToolContributions, type PiPluginContext, type PiPluginContributions } from '@agimon-ai/doompi-core/piExtension';\nimport { composeRootHooks } from '@agimon-ai/doompi-core/extensionFile';\n\nimport rootSession from '../src/extensions/workspaces/sessions/(backend)/root.cli';\nimport hookBeforeAgentStart from '../src/extensions/workspaces/sessions/(backend)/hook/beforeAgentStart.cli';\nimport hookContext from '../src/extensions/workspaces/sessions/(backend)/hook/context.cli';\nimport hookSessionStart from '../src/extensions/workspaces/sessions/(backend)/hook/sessionStart.cli';\nimport hookToolCall from '../src/extensions/workspaces/sessions/(backend)/hook/toolCall.cli';\nimport resourcePlan from '../src/extensions/workspaces/sessions/(backend)/resource/plan.cli';\nimport toolCompletePlan from '../src/extensions/workspaces/sessions/(backend)/tool/completePlan.cli';\nimport toolRecordDebugEvidence from '../src/extensions/workspaces/sessions/(backend)/tool/recordDebugEvidence.cli';\nimport toolWritePlan from '../src/extensions/workspaces/sessions/(backend)/tool/writePlan.cli';\n\ntype OptionsOf<T> = T extends (context: PiPluginContext<infer Options>) => unknown ? Options : never;\ntype InferredOptions = Exclude<OptionsOf<typeof rootSession> | OptionsOf<typeof hookBeforeAgentStart> | OptionsOf<typeof hookContext> | OptionsOf<typeof hookSessionStart> | OptionsOf<typeof hookToolCall> | OptionsOf<typeof resourcePlan> | OptionsOf<typeof toolCompletePlan> | OptionsOf<typeof toolRecordDebugEvidence> | OptionsOf<typeof toolWritePlan>, undefined>;\ntype Intersect<Union> =\n (Union extends unknown ? (value: Union) => void : never) extends (value: infer Value) => void ? Value : never;\ntype ExtensionOptions = [InferredOptions] extends [never] ? undefined : Intersect<InferredOptions>;\n\ntype Factory<T, C> = (context: C) => T;\nconst at = <T, C>(value: T | Factory<T, C>, context: C): T =>\n typeof value === 'function' ? (value as Factory<T, C>)(context) : value;\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nexport const extension = definePiExtension<ExtensionOptions>('@agimon-ai/doompi-plan', async (context) => {\n const scopeSession = await rootSession(context);\n const contextSession = { ...context, root: scopeSession.value };\n return {\n ...composeRootHooks(scopeSession),\n events: {\n before_agent_start: at(hookBeforeAgentStart, contextSession) as NonNullable<PiPluginContributions['events']>['before_agent_start'],\n context: at(hookContext, contextSession) as NonNullable<PiPluginContributions['events']>['context'],\n session_start: at(hookSessionStart, contextSession) as NonNullable<PiPluginContributions['events']>['session_start'],\n tool_call: at(hookToolCall, contextSession) as NonNullable<PiPluginContributions['events']>['tool_call'],\n },\n get resources(): PiPluginContributions['resources'] { return [at(resourcePlan, contextSession)]; },\n ...piToolContributions('@agimon-ai/doompi-plan', [via({ name: 'complete_plan' }, at(toolCompletePlan, contextSession)), via({ name: 'record_debug_evidence' }, at(toolRecordDebugEvidence, contextSession)), via({ name: 'write_plan' }, at(toolWritePlan, contextSession))]),\n services: [...(scopeSession.services ?? [])],\n };\n});\n\nexport default extension;\n"],"mappings":";;;;;;;;AAeA,IAAA,oBAAA,GAAeA,qCAAAA,WAAAA,EAAY,YAA4F;CACrH,MAAM,UAAUC,iBAAAA,sBAAsB,QAAQ,EAAE;CAChD,MAAM,QAAQ;EACZ,GAAG;EACH,OAAO,QAAQ,MAAM,KAAK,UAAA,GAASC,mCAAAA,aAAAA,CAAa,IAAI,CAAC;EACrD,WAAW,CACT;GACE,QAAQ;GACR,WAAA,QAAA,KAAA,CAAA,CAAA,cAAA,UAAA,CAAA,CAAA;GACA,QAAQ,CACN;IACE,MAAM;IACN,aACE;GACJ,CACF;EACF,CACF;CACF;CACA,OAAO;EACL;EACA,UAAU,MAAM;EAChB,SAAS,MAAM;EACf,QAAQ,MAAM;EACd,WAAW,MAAM;CACnB;AACF,CAAC;;;ACrCD,IAAA,gCAAA,GAAeC,qCAAAA,cAAAA,EAAe,YAAqC,QAAQ,KAAK,OAAQ,kBAAmB;;;ACC3G,IAAA,uBAAA,GAAeC,qCAAAA,cAAAA,EACZ,YAA8E,QAAQ,KAAK,OAAQ,OACtG;;;ACHA,IAAA,4BAAA,GAAeC,qCAAAA,cAAAA,EAAe,YAAqC,QAAQ,KAAK,OAAQ,aAAc;;;ACAtG,IAAA,wBAAA,GAAeC,qCAAAA,cAAAA,EAAe,YAAqC,QAAQ,KAAK,OAAQ,SAAU;;;ACAlG,IAAA,oBAAA,GAAeC,qCAAAA,eAAAA,EAAgB,YAAqC,QAAQ,KAAK,UAAW,EAAG;;;ACA/F,IAAA,4BAAA,GAAeC,qCAAAA,cAAAA,EAAe,YAAqC,QAAQ,KAAK,MAAO,EAAG;;;ACA1F,IAAA,mCAAA,GAAeC,qCAAAA,cAAAA,EAAe,YAAqC,QAAQ,KAAK,MAAO,EAAG;;;ACA1F,IAAA,yBAAA,GAAeC,qCAAAA,cAAAA,EAAe,YAAqC,QAAQ,KAAK,MAAO,EAAG;;;ACiB1F,MAAM,MAAY,OAA0B,YAC1C,OAAO,UAAU,aAAc,MAAwB,OAAO,IAAI;AACpE,MAAM,OAAU,UAAmC,UAChD,UAAU,KAAA,IAAY,KAAA,IAAY;CAAE,GAAG;CAAU,GAAI;AAAiB;AAEzE,MAAa,aAAA,GAAYC,mCAAAA,kBAAAA,CAAoC,0BAA0B,OAAO,YAAY;CACxG,MAAM,eAAe,MAAMC,iBAAY,OAAO;CAC9C,MAAM,iBAAiB;EAAE,GAAG;EAAS,MAAM,aAAa;CAAM;CAC9D,OAAO;EACL,IAAA,GAAGC,qCAAAA,iBAAAA,CAAiB,YAAY;EAChC,QAAQ;GACN,oBAAoB,GAAGC,8BAAsB,cAAc;GAC3D,SAAS,GAAGC,qBAAa,cAAc;GACvC,eAAe,GAAGC,0BAAkB,cAAc;GAClD,WAAW,GAAGC,sBAAc,cAAc;EAC5C;EACA,IAAI,YAAgD;GAAE,OAAO,CAAC,GAAGC,kBAAc,cAAc,CAAC;EAAG;EACjG,IAAA,GAAGC,mCAAAA,oBAAAA,CAAoB,0BAA0B;GAAC,IAAI,EAAE,MAAM,gBAAgB,GAAG,GAAGC,0BAAkB,cAAc,CAAC;GAAG,IAAI,EAAE,MAAM,wBAAwB,GAAG,GAAGC,iCAAyB,cAAc,CAAC;GAAG,IAAI,EAAE,MAAM,aAAa,GAAG,GAAGC,uBAAe,cAAc,CAAC;EAAC,CAAC;EAC5Q,UAAU,CAAC,GAAI,aAAa,YAAY,CAAC,CAAE;CAC7C;AACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"pi.d.mts","names":[],"sources":["../../generated/pi.ts"],"mappings":";qBA2Ba,+DAAS"}
1
+ {"version":3,"file":"pi.d.mts","names":[],"sources":["../../generated/pi.ts"],"mappings":";qBA0Ba,+DAAS"}
@@ -1,4 +1,4 @@
1
- import { l as createPlanModeRuntime } from "../planMode-DROtM7Ha.mjs";
1
+ import { l as createPlanModeRuntime } from "../planMode-CsQds1DJ.mjs";
2
2
  import { definePiExtension, definePiTool, piToolContributions } from "@agimon-ai/doompi-core/piExtension";
3
3
  import { composeRootHooks, defineCliHook, defineCliTool, defineResource, defineRoot } from "@agimon-ai/doompi-core/extensionFile";
4
4
  //#region src/extensions/workspaces/sessions/(backend)/root.cli.ts
@@ -12,7 +12,7 @@ var root_cli_default = defineRoot((context) => {
12
12
  moduleUrl: import.meta.url,
13
13
  skills: [{
14
14
  name: "doompi-use-plan",
15
- description: "Use Doom Pi Plan to draft reviewable normal, debug, or Fable-assisted plans, persist them, and exit safely."
15
+ description: "Use Doom Pi Plan to draft reviewable normal, debug, or code review plans, persist them, and exit safely."
16
16
  }]
17
17
  }]
18
18
  };
@@ -41,16 +41,13 @@ var toolCall_cli_default = defineCliHook((context) => context.root.events.tool_c
41
41
  var plan_cli_default = defineResource((context) => context.root.resources[0]);
42
42
  //#endregion
43
43
  //#region src/extensions/workspaces/sessions/(backend)/tool/completePlan.cli.ts
44
- var completePlan_cli_default = defineCliTool((context) => context.root.tools[3]);
44
+ var completePlan_cli_default = defineCliTool((context) => context.root.tools[2]);
45
45
  //#endregion
46
46
  //#region src/extensions/workspaces/sessions/(backend)/tool/recordDebugEvidence.cli.ts
47
47
  var recordDebugEvidence_cli_default = defineCliTool((context) => context.root.tools[0]);
48
48
  //#endregion
49
- //#region src/extensions/workspaces/sessions/(backend)/tool/runFablePlan.cli.ts
50
- var runFablePlan_cli_default = defineCliTool((context) => context.root.tools[1]);
51
- //#endregion
52
49
  //#region src/extensions/workspaces/sessions/(backend)/tool/writePlan.cli.ts
53
- var writePlan_cli_default = defineCliTool((context) => context.root.tools[2]);
50
+ var writePlan_cli_default = defineCliTool((context) => context.root.tools[1]);
54
51
  //#endregion
55
52
  //#region generated/pi.ts
56
53
  const at = (value, context) => typeof value === "function" ? value(context) : value;
@@ -78,7 +75,6 @@ const extension = definePiExtension("@agimon-ai/doompi-plan", async (context) =>
78
75
  ...piToolContributions("@agimon-ai/doompi-plan", [
79
76
  via({ name: "complete_plan" }, at(completePlan_cli_default, contextSession)),
80
77
  via({ name: "record_debug_evidence" }, at(recordDebugEvidence_cli_default, contextSession)),
81
- via({ name: "run_fable_plan" }, at(runFablePlan_cli_default, contextSession)),
82
78
  via({ name: "write_plan" }, at(writePlan_cli_default, contextSession))
83
79
  ]),
84
80
  services: [...scopeSession.services ?? []]
@@ -1 +1 @@
1
- {"version":3,"file":"pi.mjs","names":["rootSession","hookBeforeAgentStart","hookContext","hookSessionStart","hookToolCall","resourcePlan","toolCompletePlan","toolRecordDebugEvidence","toolRunFablePlan","toolWritePlan"],"sources":["../../src/extensions/workspaces/sessions/(backend)/root.cli.ts","../../src/extensions/workspaces/sessions/(backend)/hook/beforeAgentStart.cli.ts","../../src/extensions/workspaces/sessions/(backend)/hook/context.cli.ts","../../src/extensions/workspaces/sessions/(backend)/hook/sessionStart.cli.ts","../../src/extensions/workspaces/sessions/(backend)/hook/toolCall.cli.ts","../../src/extensions/workspaces/sessions/(backend)/resource/plan.cli.ts","../../src/extensions/workspaces/sessions/(backend)/tool/completePlan.cli.ts","../../src/extensions/workspaces/sessions/(backend)/tool/recordDebugEvidence.cli.ts","../../src/extensions/workspaces/sessions/(backend)/tool/runFablePlan.cli.ts","../../src/extensions/workspaces/sessions/(backend)/tool/writePlan.cli.ts","../../generated/pi.ts"],"sourcesContent":["import { defineRoot, type RootDeclaration } from '@agimon-ai/doompi-core/extensionFile';\nimport {\n definePiTool,\n type PiPluginContext,\n type PiPluginContributions,\n type PiToolDeclaration,\n} from '@agimon-ai/doompi-core/piExtension';\n\nimport { createPlanModeRuntime } from '../../../../services/planMode';\n\ntype Scope = Omit<ReturnType<typeof createPlanModeRuntime>, 'tools'> & {\n readonly tools: readonly PiToolDeclaration[];\n readonly resources: NonNullable<PiPluginContributions['resources']>;\n};\n\nexport default defineRoot((context: PiPluginContext<undefined>): RootDeclaration<Scope, PiPluginContext<undefined>> => {\n const runtime = createPlanModeRuntime(context.pi);\n const value = {\n ...runtime,\n tools: runtime.tools.map((tool) => definePiTool(tool)),\n resources: [\n {\n source: '@agimon-ai/doompi-plan',\n moduleUrl: import.meta.url,\n skills: [\n {\n name: 'doompi-use-plan',\n description:\n 'Use Doom Pi Plan to draft reviewable normal, debug, or Fable-assisted plans, persist them, and exit safely.',\n },\n ],\n },\n ],\n };\n return {\n value,\n services: value.services,\n onStart: value.onStart,\n onStop: value.onStop,\n onDispose: value.onDispose,\n };\n});\n","import { defineCliHook, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\n\ntype Root = Awaited<ReturnType<typeof import('../root.cli').default>>['value'];\n\nexport default defineCliHook((context: WithRoot<unknown, Root>) => context.root.events!.before_agent_start!);\n","import { defineCliHook, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\nimport type { PiEventHandlers } from '@agimon-ai/doompi-core/piExtension';\n\ntype Root = Awaited<ReturnType<typeof import('../root.cli').default>>['value'];\n\nexport default defineCliHook(\n (context: WithRoot<unknown, Root>): NonNullable<PiEventHandlers['context']> => context.root.events!.context!,\n);\n","import { defineCliHook, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\n\ntype Root = Awaited<ReturnType<typeof import('../root.cli').default>>['value'];\n\nexport default defineCliHook((context: WithRoot<unknown, Root>) => context.root.events!.session_start!);\n","import { defineCliHook, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\n\ntype Root = Awaited<ReturnType<typeof import('../root.cli').default>>['value'];\n\nexport default defineCliHook((context: WithRoot<unknown, Root>) => context.root.events!.tool_call!);\n","import { defineResource, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\n\ntype Root = Awaited<ReturnType<typeof import('../root.cli').default>>['value'];\n\nexport default defineResource((context: WithRoot<unknown, Root>) => context.root.resources![0]!);\n","import { defineCliTool, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\n\ntype Root = Awaited<ReturnType<typeof import('../root.cli').default>>['value'];\n\nexport default defineCliTool((context: WithRoot<unknown, Root>) => context.root.tools![3]!);\n","import { defineCliTool, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\n\ntype Root = Awaited<ReturnType<typeof import('../root.cli').default>>['value'];\n\nexport default defineCliTool((context: WithRoot<unknown, Root>) => context.root.tools![0]!);\n","import { defineCliTool, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\n\ntype Root = Awaited<ReturnType<typeof import('../root.cli').default>>['value'];\n\nexport default defineCliTool((context: WithRoot<unknown, Root>) => context.root.tools![1]!);\n","import { defineCliTool, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\n\ntype Root = Awaited<ReturnType<typeof import('../root.cli').default>>['value'];\n\nexport default defineCliTool((context: WithRoot<unknown, Root>) => context.root.tools![2]!);\n","// Generated by @agimon-ai/doompi-build. Do not edit by hand.\nimport { definePiExtension, piToolContributions, type PiPluginContext, type PiPluginContributions } from '@agimon-ai/doompi-core/piExtension';\nimport { composeRootHooks } from '@agimon-ai/doompi-core/extensionFile';\n\nimport rootSession from '../src/extensions/workspaces/sessions/(backend)/root.cli';\nimport hookBeforeAgentStart from '../src/extensions/workspaces/sessions/(backend)/hook/beforeAgentStart.cli';\nimport hookContext from '../src/extensions/workspaces/sessions/(backend)/hook/context.cli';\nimport hookSessionStart from '../src/extensions/workspaces/sessions/(backend)/hook/sessionStart.cli';\nimport hookToolCall from '../src/extensions/workspaces/sessions/(backend)/hook/toolCall.cli';\nimport resourcePlan from '../src/extensions/workspaces/sessions/(backend)/resource/plan.cli';\nimport toolCompletePlan from '../src/extensions/workspaces/sessions/(backend)/tool/completePlan.cli';\nimport toolRecordDebugEvidence from '../src/extensions/workspaces/sessions/(backend)/tool/recordDebugEvidence.cli';\nimport toolRunFablePlan from '../src/extensions/workspaces/sessions/(backend)/tool/runFablePlan.cli';\nimport toolWritePlan from '../src/extensions/workspaces/sessions/(backend)/tool/writePlan.cli';\n\ntype OptionsOf<T> = T extends (context: PiPluginContext<infer Options>) => unknown ? Options : never;\ntype InferredOptions = Exclude<OptionsOf<typeof rootSession> | OptionsOf<typeof hookBeforeAgentStart> | OptionsOf<typeof hookContext> | OptionsOf<typeof hookSessionStart> | OptionsOf<typeof hookToolCall> | OptionsOf<typeof resourcePlan> | OptionsOf<typeof toolCompletePlan> | OptionsOf<typeof toolRecordDebugEvidence> | OptionsOf<typeof toolRunFablePlan> | OptionsOf<typeof toolWritePlan>, undefined>;\ntype Intersect<Union> =\n (Union extends unknown ? (value: Union) => void : never) extends (value: infer Value) => void ? Value : never;\ntype ExtensionOptions = [InferredOptions] extends [never] ? undefined : Intersect<InferredOptions>;\n\ntype Factory<T, C> = (context: C) => T;\nconst at = <T, C>(value: T | Factory<T, C>, context: C): T =>\n typeof value === 'function' ? (value as Factory<T, C>)(context) : value;\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nexport const extension = definePiExtension<ExtensionOptions>('@agimon-ai/doompi-plan', async (context) => {\n const scopeSession = await rootSession(context);\n const contextSession = { ...context, root: scopeSession.value };\n return {\n ...composeRootHooks(scopeSession),\n events: {\n before_agent_start: at(hookBeforeAgentStart, contextSession) as NonNullable<PiPluginContributions['events']>['before_agent_start'],\n context: at(hookContext, contextSession) as NonNullable<PiPluginContributions['events']>['context'],\n session_start: at(hookSessionStart, contextSession) as NonNullable<PiPluginContributions['events']>['session_start'],\n tool_call: at(hookToolCall, contextSession) as NonNullable<PiPluginContributions['events']>['tool_call'],\n },\n get resources(): PiPluginContributions['resources'] { return [at(resourcePlan, contextSession)]; },\n ...piToolContributions('@agimon-ai/doompi-plan', [via({ name: 'complete_plan' }, at(toolCompletePlan, contextSession)), via({ name: 'record_debug_evidence' }, at(toolRecordDebugEvidence, contextSession)), via({ name: 'run_fable_plan' }, at(toolRunFablePlan, contextSession)), via({ name: 'write_plan' }, at(toolWritePlan, contextSession))]),\n services: [...(scopeSession.services ?? [])],\n };\n});\n\nexport default extension;\n"],"mappings":";;;;AAeA,IAAA,mBAAe,YAAY,YAA4F;CACrH,MAAM,UAAU,sBAAsB,QAAQ,EAAE;CAChD,MAAM,QAAQ;EACZ,GAAG;EACH,OAAO,QAAQ,MAAM,KAAK,SAAS,aAAa,IAAI,CAAC;EACrD,WAAW,CACT;GACE,QAAQ;GACR,WAAW,YAAY;GACvB,QAAQ,CACN;IACE,MAAM;IACN,aACE;GACJ,CACF;EACF,CACF;CACF;CACA,OAAO;EACL;EACA,UAAU,MAAM;EAChB,SAAS,MAAM;EACf,QAAQ,MAAM;EACd,WAAW,MAAM;CACnB;AACF,CAAC;;;ACrCD,IAAA,+BAAe,eAAe,YAAqC,QAAQ,KAAK,OAAQ,kBAAmB;;;ACC3G,IAAA,sBAAe,eACZ,YAA8E,QAAQ,KAAK,OAAQ,OACtG;;;ACHA,IAAA,2BAAe,eAAe,YAAqC,QAAQ,KAAK,OAAQ,aAAc;;;ACAtG,IAAA,uBAAe,eAAe,YAAqC,QAAQ,KAAK,OAAQ,SAAU;;;ACAlG,IAAA,mBAAe,gBAAgB,YAAqC,QAAQ,KAAK,UAAW,EAAG;;;ACA/F,IAAA,2BAAe,eAAe,YAAqC,QAAQ,KAAK,MAAO,EAAG;;;ACA1F,IAAA,kCAAe,eAAe,YAAqC,QAAQ,KAAK,MAAO,EAAG;;;ACA1F,IAAA,2BAAe,eAAe,YAAqC,QAAQ,KAAK,MAAO,EAAG;;;ACA1F,IAAA,wBAAe,eAAe,YAAqC,QAAQ,KAAK,MAAO,EAAG;;;ACkB1F,MAAM,MAAY,OAA0B,YAC1C,OAAO,UAAU,aAAc,MAAwB,OAAO,IAAI;AACpE,MAAM,OAAU,UAAmC,UAChD,UAAU,KAAA,IAAY,KAAA,IAAY;CAAE,GAAG;CAAU,GAAI;AAAiB;AAEzE,MAAa,YAAY,kBAAoC,0BAA0B,OAAO,YAAY;CACxG,MAAM,eAAe,MAAMA,iBAAY,OAAO;CAC9C,MAAM,iBAAiB;EAAE,GAAG;EAAS,MAAM,aAAa;CAAM;CAC9D,OAAO;EACL,GAAG,iBAAiB,YAAY;EAChC,QAAQ;GACN,oBAAoB,GAAGC,8BAAsB,cAAc;GAC3D,SAAS,GAAGC,qBAAa,cAAc;GACvC,eAAe,GAAGC,0BAAkB,cAAc;GAClD,WAAW,GAAGC,sBAAc,cAAc;EAC5C;EACA,IAAI,YAAgD;GAAE,OAAO,CAAC,GAAGC,kBAAc,cAAc,CAAC;EAAG;EACjG,GAAG,oBAAoB,0BAA0B;GAAC,IAAI,EAAE,MAAM,gBAAgB,GAAG,GAAGC,0BAAkB,cAAc,CAAC;GAAG,IAAI,EAAE,MAAM,wBAAwB,GAAG,GAAGC,iCAAyB,cAAc,CAAC;GAAG,IAAI,EAAE,MAAM,iBAAiB,GAAG,GAAGC,0BAAkB,cAAc,CAAC;GAAG,IAAI,EAAE,MAAM,aAAa,GAAG,GAAGC,uBAAe,cAAc,CAAC;EAAC,CAAC;EACnV,UAAU,CAAC,GAAI,aAAa,YAAY,CAAC,CAAE;CAC7C;AACF,CAAC"}
1
+ {"version":3,"file":"pi.mjs","names":["rootSession","hookBeforeAgentStart","hookContext","hookSessionStart","hookToolCall","resourcePlan","toolCompletePlan","toolRecordDebugEvidence","toolWritePlan"],"sources":["../../src/extensions/workspaces/sessions/(backend)/root.cli.ts","../../src/extensions/workspaces/sessions/(backend)/hook/beforeAgentStart.cli.ts","../../src/extensions/workspaces/sessions/(backend)/hook/context.cli.ts","../../src/extensions/workspaces/sessions/(backend)/hook/sessionStart.cli.ts","../../src/extensions/workspaces/sessions/(backend)/hook/toolCall.cli.ts","../../src/extensions/workspaces/sessions/(backend)/resource/plan.cli.ts","../../src/extensions/workspaces/sessions/(backend)/tool/completePlan.cli.ts","../../src/extensions/workspaces/sessions/(backend)/tool/recordDebugEvidence.cli.ts","../../src/extensions/workspaces/sessions/(backend)/tool/writePlan.cli.ts","../../generated/pi.ts"],"sourcesContent":["import { defineRoot, type RootDeclaration } from '@agimon-ai/doompi-core/extensionFile';\nimport {\n definePiTool,\n type PiPluginContext,\n type PiPluginContributions,\n type PiToolDeclaration,\n} from '@agimon-ai/doompi-core/piExtension';\n\nimport { createPlanModeRuntime } from '../../../../services/planMode';\n\ntype Scope = Omit<ReturnType<typeof createPlanModeRuntime>, 'tools'> & {\n readonly tools: readonly PiToolDeclaration[];\n readonly resources: NonNullable<PiPluginContributions['resources']>;\n};\n\nexport default defineRoot((context: PiPluginContext<undefined>): RootDeclaration<Scope, PiPluginContext<undefined>> => {\n const runtime = createPlanModeRuntime(context.pi);\n const value = {\n ...runtime,\n tools: runtime.tools.map((tool) => definePiTool(tool)),\n resources: [\n {\n source: '@agimon-ai/doompi-plan',\n moduleUrl: import.meta.url,\n skills: [\n {\n name: 'doompi-use-plan',\n description:\n 'Use Doom Pi Plan to draft reviewable normal, debug, or code review plans, persist them, and exit safely.',\n },\n ],\n },\n ],\n };\n return {\n value,\n services: value.services,\n onStart: value.onStart,\n onStop: value.onStop,\n onDispose: value.onDispose,\n };\n});\n","import { defineCliHook, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\n\ntype Root = Awaited<ReturnType<typeof import('../root.cli').default>>['value'];\n\nexport default defineCliHook((context: WithRoot<unknown, Root>) => context.root.events!.before_agent_start!);\n","import { defineCliHook, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\nimport type { PiEventHandlers } from '@agimon-ai/doompi-core/piExtension';\n\ntype Root = Awaited<ReturnType<typeof import('../root.cli').default>>['value'];\n\nexport default defineCliHook(\n (context: WithRoot<unknown, Root>): NonNullable<PiEventHandlers['context']> => context.root.events!.context!,\n);\n","import { defineCliHook, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\n\ntype Root = Awaited<ReturnType<typeof import('../root.cli').default>>['value'];\n\nexport default defineCliHook((context: WithRoot<unknown, Root>) => context.root.events!.session_start!);\n","import { defineCliHook, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\n\ntype Root = Awaited<ReturnType<typeof import('../root.cli').default>>['value'];\n\nexport default defineCliHook((context: WithRoot<unknown, Root>) => context.root.events!.tool_call!);\n","import { defineResource, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\n\ntype Root = Awaited<ReturnType<typeof import('../root.cli').default>>['value'];\n\nexport default defineResource((context: WithRoot<unknown, Root>) => context.root.resources![0]!);\n","import { defineCliTool, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\n\ntype Root = Awaited<ReturnType<typeof import('../root.cli').default>>['value'];\n\nexport default defineCliTool((context: WithRoot<unknown, Root>) => context.root.tools![2]!);\n","import { defineCliTool, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\n\ntype Root = Awaited<ReturnType<typeof import('../root.cli').default>>['value'];\n\nexport default defineCliTool((context: WithRoot<unknown, Root>) => context.root.tools![0]!);\n","import { defineCliTool, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\n\ntype Root = Awaited<ReturnType<typeof import('../root.cli').default>>['value'];\n\nexport default defineCliTool((context: WithRoot<unknown, Root>) => context.root.tools![1]!);\n","// Generated by @agimon-ai/doompi-build. Do not edit by hand.\nimport { definePiExtension, piToolContributions, type PiPluginContext, type PiPluginContributions } from '@agimon-ai/doompi-core/piExtension';\nimport { composeRootHooks } from '@agimon-ai/doompi-core/extensionFile';\n\nimport rootSession from '../src/extensions/workspaces/sessions/(backend)/root.cli';\nimport hookBeforeAgentStart from '../src/extensions/workspaces/sessions/(backend)/hook/beforeAgentStart.cli';\nimport hookContext from '../src/extensions/workspaces/sessions/(backend)/hook/context.cli';\nimport hookSessionStart from '../src/extensions/workspaces/sessions/(backend)/hook/sessionStart.cli';\nimport hookToolCall from '../src/extensions/workspaces/sessions/(backend)/hook/toolCall.cli';\nimport resourcePlan from '../src/extensions/workspaces/sessions/(backend)/resource/plan.cli';\nimport toolCompletePlan from '../src/extensions/workspaces/sessions/(backend)/tool/completePlan.cli';\nimport toolRecordDebugEvidence from '../src/extensions/workspaces/sessions/(backend)/tool/recordDebugEvidence.cli';\nimport toolWritePlan from '../src/extensions/workspaces/sessions/(backend)/tool/writePlan.cli';\n\ntype OptionsOf<T> = T extends (context: PiPluginContext<infer Options>) => unknown ? Options : never;\ntype InferredOptions = Exclude<OptionsOf<typeof rootSession> | OptionsOf<typeof hookBeforeAgentStart> | OptionsOf<typeof hookContext> | OptionsOf<typeof hookSessionStart> | OptionsOf<typeof hookToolCall> | OptionsOf<typeof resourcePlan> | OptionsOf<typeof toolCompletePlan> | OptionsOf<typeof toolRecordDebugEvidence> | OptionsOf<typeof toolWritePlan>, undefined>;\ntype Intersect<Union> =\n (Union extends unknown ? (value: Union) => void : never) extends (value: infer Value) => void ? Value : never;\ntype ExtensionOptions = [InferredOptions] extends [never] ? undefined : Intersect<InferredOptions>;\n\ntype Factory<T, C> = (context: C) => T;\nconst at = <T, C>(value: T | Factory<T, C>, context: C): T =>\n typeof value === 'function' ? (value as Factory<T, C>)(context) : value;\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nexport const extension = definePiExtension<ExtensionOptions>('@agimon-ai/doompi-plan', async (context) => {\n const scopeSession = await rootSession(context);\n const contextSession = { ...context, root: scopeSession.value };\n return {\n ...composeRootHooks(scopeSession),\n events: {\n before_agent_start: at(hookBeforeAgentStart, contextSession) as NonNullable<PiPluginContributions['events']>['before_agent_start'],\n context: at(hookContext, contextSession) as NonNullable<PiPluginContributions['events']>['context'],\n session_start: at(hookSessionStart, contextSession) as NonNullable<PiPluginContributions['events']>['session_start'],\n tool_call: at(hookToolCall, contextSession) as NonNullable<PiPluginContributions['events']>['tool_call'],\n },\n get resources(): PiPluginContributions['resources'] { return [at(resourcePlan, contextSession)]; },\n ...piToolContributions('@agimon-ai/doompi-plan', [via({ name: 'complete_plan' }, at(toolCompletePlan, contextSession)), via({ name: 'record_debug_evidence' }, at(toolRecordDebugEvidence, contextSession)), via({ name: 'write_plan' }, at(toolWritePlan, contextSession))]),\n services: [...(scopeSession.services ?? [])],\n };\n});\n\nexport default extension;\n"],"mappings":";;;;AAeA,IAAA,mBAAe,YAAY,YAA4F;CACrH,MAAM,UAAU,sBAAsB,QAAQ,EAAE;CAChD,MAAM,QAAQ;EACZ,GAAG;EACH,OAAO,QAAQ,MAAM,KAAK,SAAS,aAAa,IAAI,CAAC;EACrD,WAAW,CACT;GACE,QAAQ;GACR,WAAW,YAAY;GACvB,QAAQ,CACN;IACE,MAAM;IACN,aACE;GACJ,CACF;EACF,CACF;CACF;CACA,OAAO;EACL;EACA,UAAU,MAAM;EAChB,SAAS,MAAM;EACf,QAAQ,MAAM;EACd,WAAW,MAAM;CACnB;AACF,CAAC;;;ACrCD,IAAA,+BAAe,eAAe,YAAqC,QAAQ,KAAK,OAAQ,kBAAmB;;;ACC3G,IAAA,sBAAe,eACZ,YAA8E,QAAQ,KAAK,OAAQ,OACtG;;;ACHA,IAAA,2BAAe,eAAe,YAAqC,QAAQ,KAAK,OAAQ,aAAc;;;ACAtG,IAAA,uBAAe,eAAe,YAAqC,QAAQ,KAAK,OAAQ,SAAU;;;ACAlG,IAAA,mBAAe,gBAAgB,YAAqC,QAAQ,KAAK,UAAW,EAAG;;;ACA/F,IAAA,2BAAe,eAAe,YAAqC,QAAQ,KAAK,MAAO,EAAG;;;ACA1F,IAAA,kCAAe,eAAe,YAAqC,QAAQ,KAAK,MAAO,EAAG;;;ACA1F,IAAA,wBAAe,eAAe,YAAqC,QAAQ,KAAK,MAAO,EAAG;;;ACiB1F,MAAM,MAAY,OAA0B,YAC1C,OAAO,UAAU,aAAc,MAAwB,OAAO,IAAI;AACpE,MAAM,OAAU,UAAmC,UAChD,UAAU,KAAA,IAAY,KAAA,IAAY;CAAE,GAAG;CAAU,GAAI;AAAiB;AAEzE,MAAa,YAAY,kBAAoC,0BAA0B,OAAO,YAAY;CACxG,MAAM,eAAe,MAAMA,iBAAY,OAAO;CAC9C,MAAM,iBAAiB;EAAE,GAAG;EAAS,MAAM,aAAa;CAAM;CAC9D,OAAO;EACL,GAAG,iBAAiB,YAAY;EAChC,QAAQ;GACN,oBAAoB,GAAGC,8BAAsB,cAAc;GAC3D,SAAS,GAAGC,qBAAa,cAAc;GACvC,eAAe,GAAGC,0BAAkB,cAAc;GAClD,WAAW,GAAGC,sBAAc,cAAc;EAC5C;EACA,IAAI,YAAgD;GAAE,OAAO,CAAC,GAAGC,kBAAc,cAAc,CAAC;EAAG;EACjG,GAAG,oBAAoB,0BAA0B;GAAC,IAAI,EAAE,MAAM,gBAAgB,GAAG,GAAGC,0BAAkB,cAAc,CAAC;GAAG,IAAI,EAAE,MAAM,wBAAwB,GAAG,GAAGC,iCAAyB,cAAc,CAAC;GAAG,IAAI,EAAE,MAAM,aAAa,GAAG,GAAGC,uBAAe,cAAc,CAAC;EAAC,CAAC;EAC5Q,UAAU,CAAC,GAAI,aAAa,YAAY,CAAC,CAAE;CAC7C;AACF,CAAC"}