@agimon-ai/doompi-plan 0.0.1-alpha.27 → 0.0.1-alpha.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_virtual/_rolldown/runtime.cjs +1 -0
- package/dist/adapters/pi/extension.cjs +2 -0
- package/dist/adapters/pi/extension.cjs.map +1 -0
- package/dist/adapters/pi/extension.d.cts +8 -0
- package/dist/adapters/pi/extension.d.cts.map +1 -0
- package/dist/adapters/pi/extension.d.mts +8 -0
- package/dist/adapters/pi/extension.d.mts.map +1 -0
- package/dist/adapters/pi/extension.mjs +2 -0
- package/dist/adapters/pi/extension.mjs.map +1 -0
- package/dist/adapters/telemetry/logSinkTelemetry.cjs +2 -0
- package/dist/adapters/telemetry/logSinkTelemetry.cjs.map +1 -0
- package/dist/adapters/telemetry/logSinkTelemetry.d.cts +33 -0
- package/dist/adapters/telemetry/logSinkTelemetry.d.cts.map +1 -0
- package/dist/adapters/telemetry/logSinkTelemetry.d.mts +33 -0
- package/dist/adapters/telemetry/logSinkTelemetry.d.mts.map +1 -0
- package/dist/adapters/telemetry/logSinkTelemetry.mjs +2 -0
- package/dist/adapters/telemetry/logSinkTelemetry.mjs.map +1 -0
- package/dist/config.cjs +1 -0
- package/dist/config.d.cts +2 -0
- package/dist/config.d.mts +2 -0
- package/dist/config.mjs +1 -0
- package/dist/extensions/pi.cjs +1 -0
- package/dist/extensions/pi.d.cts +2 -0
- package/dist/extensions/pi.d.mts +2 -0
- package/dist/extensions/pi.mjs +1 -0
- package/dist/fableFlow.cjs +1 -0
- package/dist/fableFlow.d.cts +2 -0
- package/dist/fableFlow.d.mts +2 -0
- package/dist/fableFlow.mjs +1 -0
- package/dist/index.cjs +1 -0
- package/dist/index.d.cts +5 -0
- package/dist/index.d.mts +5 -0
- package/dist/index.mjs +1 -0
- package/dist/logSinkTelemetry.cjs +1 -0
- package/dist/logSinkTelemetry.d.cts +2 -0
- package/dist/logSinkTelemetry.d.mts +2 -0
- package/dist/logSinkTelemetry.mjs +1 -0
- package/dist/planConfig.cjs +1 -0
- package/dist/planConfig.d.cts +2 -0
- package/dist/planConfig.d.mts +2 -0
- package/dist/planConfig.mjs +1 -0
- package/dist/planMode.cjs +1 -0
- package/dist/planMode.d.cts +3 -0
- package/dist/planMode.d.mts +3 -0
- package/dist/planMode.mjs +1 -0
- package/dist/prompts.cjs +1 -0
- package/dist/prompts.d.cts +2 -0
- package/dist/prompts.d.mts +2 -0
- package/dist/prompts.mjs +1 -0
- package/dist/schemas/plan/config.cjs +2 -0
- package/dist/schemas/plan/config.cjs.map +1 -0
- package/dist/schemas/plan/config.d.cts +13 -0
- package/dist/schemas/plan/config.d.cts.map +1 -0
- package/dist/schemas/plan/config.d.mts +13 -0
- package/dist/schemas/plan/config.d.mts.map +1 -0
- package/dist/schemas/plan/config.mjs +2 -0
- package/dist/schemas/plan/config.mjs.map +1 -0
- package/dist/schemas/plan/planConfig.cjs +2 -0
- package/dist/schemas/plan/planConfig.cjs.map +1 -0
- package/dist/schemas/plan/planConfig.d.cts +20 -0
- package/dist/schemas/plan/planConfig.d.cts.map +1 -0
- package/dist/schemas/plan/planConfig.d.mts +20 -0
- package/dist/schemas/plan/planConfig.d.mts.map +1 -0
- package/dist/schemas/plan/planConfig.mjs +2 -0
- package/dist/schemas/plan/planConfig.mjs.map +1 -0
- package/dist/services/fableFlow.cjs +3 -0
- package/dist/services/fableFlow.cjs.map +1 -0
- package/dist/services/fableFlow.d.cts +68 -0
- package/dist/services/fableFlow.d.cts.map +1 -0
- package/dist/services/fableFlow.d.mts +68 -0
- package/dist/services/fableFlow.d.mts.map +1 -0
- package/dist/services/fableFlow.mjs +3 -0
- package/dist/services/fableFlow.mjs.map +1 -0
- package/dist/services/planMode.cjs +7 -0
- package/dist/services/planMode.cjs.map +1 -0
- package/dist/services/planMode.d.cts +79 -0
- package/dist/services/planMode.d.cts.map +1 -0
- package/dist/services/planMode.d.mts +79 -0
- package/dist/services/planMode.d.mts.map +1 -0
- package/dist/services/planMode.mjs +7 -0
- package/dist/services/planMode.mjs.map +1 -0
- package/dist/services/prompts.cjs +3 -0
- package/dist/services/prompts.cjs.map +1 -0
- package/dist/services/prompts.d.cts +24 -0
- package/dist/services/prompts.d.cts.map +1 -0
- package/dist/services/prompts.d.mts +24 -0
- package/dist/services/prompts.d.mts.map +1 -0
- package/dist/services/prompts.mjs +3 -0
- package/dist/services/prompts.mjs.map +1 -0
- package/package.json +8 -8
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,s)=>(s=n==null?{}:e(i(n)),o(r||!n||!n.__esModule||!a.call(n,`default`)?t(s,`default`,{value:n,enumerable:!0}):s,n));exports.__toESM=s;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require("../../services/planMode.cjs");let t=require("@agimon-ai/doompi-extension-contracts/cordis-host");function n(t,n){e.planModeExtension(t,n)}async function r(e){let n=await(0,t.connectDoomCordisHost)(e,`@agimon-ai/doompi-plan`),r=n.root.plugin(i,{pi:e});try{await r}catch(e){try{await r.dispose()}finally{await n.dispose()}throw e}let a;e.on(`session_shutdown`,()=>a??=(async()=>{try{await r.dispose()}finally{await n.dispose()}})())}function i(e,t){n(e,t.pi)}exports.activatePlanExtension=r,exports.default=r,exports.installPlanRuntime=n;
|
|
2
|
+
//# sourceMappingURL=extension.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension.cjs","names":["connectDoomCordisHost"],"sources":["../../../src/adapters/pi/extension.ts"],"sourcesContent":["import { connectDoomCordisHost } from '@agimon-ai/doompi-extension-contracts/cordis-host';\nimport type { Context } from '@deepseek-ai/cordis';\nimport type { ExtensionAPI } from '@earendil-works/pi-coding-agent';\nimport { planModeExtension } from '../../services/planMode.ts';\n\nconst PACKAGE_SOURCE = '@agimon-ai/doompi-plan';\n\n/** Install Plan state and external resources into its host-owned Cordis plugin fiber. */\nexport function installPlanRuntime(cordis: Context, pi: ExtensionAPI): void {\n planModeExtension(cordis, pi);\n}\n\n/** The package's single standard Pi factory, including all optional typed Doom integrations. */\nexport async function activatePlanExtension(pi: ExtensionAPI): Promise<void> {\n const connection = await connectDoomCordisHost(pi, PACKAGE_SOURCE);\n const fiber = connection.root.plugin(planPlugin, { pi });\n try {\n await fiber;\n } catch (error) {\n try {\n await fiber.dispose();\n } finally {\n await connection.dispose();\n }\n throw error;\n }\n let disposal: Promise<void> | undefined;\n pi.on(\n 'session_shutdown',\n () =>\n (disposal ??= (async () => {\n try {\n await fiber.dispose();\n } finally {\n await connection.dispose();\n }\n })()),\n );\n}\n\ninterface PlanPluginConfig {\n readonly pi: ExtensionAPI;\n}\n\nfunction planPlugin(cordis: Context, config: PlanPluginConfig): void {\n installPlanRuntime(cordis, config.pi);\n}\n\nexport default activatePlanExtension;\n"],"mappings":"kHAQA,SAAgB,EAAmB,EAAiB,EAAwB,CAC1E,EAAA,kBAAkB,EAAQ,CAAE,CAC9B,CAGA,eAAsB,EAAsB,EAAiC,CAC3E,IAAM,EAAa,MAAA,EAAMA,EAAAA,sBAAAA,CAAsB,EAAI,wBAAc,EAC3D,EAAQ,EAAW,KAAK,OAAO,EAAY,CAAE,IAAG,CAAC,EACvD,GAAI,CACF,MAAM,CACR,OAAS,EAAO,CACd,GAAI,CACF,MAAM,EAAM,QAAQ,CACtB,QAAU,CACR,MAAM,EAAW,QAAQ,CAC3B,CACA,MAAM,CACR,CACA,IAAI,EACJ,EAAG,GACD,uBAEG,KAAc,SAAY,CACzB,GAAI,CACF,MAAM,EAAM,QAAQ,CACtB,QAAU,CACR,MAAM,EAAW,QAAQ,CAC3B,CACF,EAAA,CAAG,CACP,CACF,CAMA,SAAS,EAAW,EAAiB,EAAgC,CACnE,EAAmB,EAAQ,EAAO,EAAE,CACtC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Context } from "@deepseek-ai/cordis";
|
|
2
|
+
import { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
3
|
+
//#region src/adapters/pi/extension.d.ts
|
|
4
|
+
/** The package's single standard Pi factory, including all optional typed Doom integrations. */
|
|
5
|
+
declare function activatePlanExtension(pi: ExtensionAPI): Promise<void>;
|
|
6
|
+
//#endregion
|
|
7
|
+
export { activatePlanExtension, activatePlanExtension as default };
|
|
8
|
+
//# sourceMappingURL=extension.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension.d.cts","names":[],"sources":["../../../src/adapters/pi/extension.ts"],"mappings":";;;;iBAasB,sBAAsB,IAAI,eAAe"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Context } from "@deepseek-ai/cordis";
|
|
2
|
+
import { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
3
|
+
//#region src/adapters/pi/extension.d.ts
|
|
4
|
+
/** The package's single standard Pi factory, including all optional typed Doom integrations. */
|
|
5
|
+
declare function activatePlanExtension(pi: ExtensionAPI): Promise<void>;
|
|
6
|
+
//#endregion
|
|
7
|
+
export { activatePlanExtension, activatePlanExtension as default };
|
|
8
|
+
//# sourceMappingURL=extension.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension.d.mts","names":[],"sources":["../../../src/adapters/pi/extension.ts"],"mappings":";;;;iBAasB,sBAAsB,IAAI,eAAe"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{planModeExtension as e}from"../../services/planMode.mjs";import{connectDoomCordisHost as t}from"@agimon-ai/doompi-extension-contracts/cordis-host";function n(t,n){e(t,n)}async function r(e){let n=await t(e,`@agimon-ai/doompi-plan`),r=n.root.plugin(i,{pi:e});try{await r}catch(e){try{await r.dispose()}finally{await n.dispose()}throw e}let a;e.on(`session_shutdown`,()=>a??=(async()=>{try{await r.dispose()}finally{await n.dispose()}})())}function i(e,t){n(e,t.pi)}export{r as activatePlanExtension,r as default,n as installPlanRuntime};
|
|
2
|
+
//# sourceMappingURL=extension.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension.mjs","names":[],"sources":["../../../src/adapters/pi/extension.ts"],"sourcesContent":["import { connectDoomCordisHost } from '@agimon-ai/doompi-extension-contracts/cordis-host';\nimport type { Context } from '@deepseek-ai/cordis';\nimport type { ExtensionAPI } from '@earendil-works/pi-coding-agent';\nimport { planModeExtension } from '../../services/planMode.ts';\n\nconst PACKAGE_SOURCE = '@agimon-ai/doompi-plan';\n\n/** Install Plan state and external resources into its host-owned Cordis plugin fiber. */\nexport function installPlanRuntime(cordis: Context, pi: ExtensionAPI): void {\n planModeExtension(cordis, pi);\n}\n\n/** The package's single standard Pi factory, including all optional typed Doom integrations. */\nexport async function activatePlanExtension(pi: ExtensionAPI): Promise<void> {\n const connection = await connectDoomCordisHost(pi, PACKAGE_SOURCE);\n const fiber = connection.root.plugin(planPlugin, { pi });\n try {\n await fiber;\n } catch (error) {\n try {\n await fiber.dispose();\n } finally {\n await connection.dispose();\n }\n throw error;\n }\n let disposal: Promise<void> | undefined;\n pi.on(\n 'session_shutdown',\n () =>\n (disposal ??= (async () => {\n try {\n await fiber.dispose();\n } finally {\n await connection.dispose();\n }\n })()),\n );\n}\n\ninterface PlanPluginConfig {\n readonly pi: ExtensionAPI;\n}\n\nfunction planPlugin(cordis: Context, config: PlanPluginConfig): void {\n installPlanRuntime(cordis, config.pi);\n}\n\nexport default activatePlanExtension;\n"],"mappings":"0JAQA,SAAgB,EAAmB,EAAiB,EAAwB,CAC1E,EAAkB,EAAQ,CAAE,CAC9B,CAGA,eAAsB,EAAsB,EAAiC,CAC3E,IAAM,EAAa,MAAM,EAAsB,EAAI,wBAAc,EAC3D,EAAQ,EAAW,KAAK,OAAO,EAAY,CAAE,IAAG,CAAC,EACvD,GAAI,CACF,MAAM,CACR,OAAS,EAAO,CACd,GAAI,CACF,MAAM,EAAM,QAAQ,CACtB,QAAU,CACR,MAAM,EAAW,QAAQ,CAC3B,CACA,MAAM,CACR,CACA,IAAI,EACJ,EAAG,GACD,uBAEG,KAAc,SAAY,CACzB,GAAI,CACF,MAAM,EAAM,QAAQ,CACtB,QAAU,CACR,MAAM,EAAW,QAAQ,CAC3B,CACF,EAAA,CAAG,CACP,CACF,CAMA,SAAS,EAAW,EAAiB,EAAgC,CACnE,EAAmB,EAAQ,EAAO,EAAE,CACtC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
let e=require("@agimon-ai/doompi-telemetry");const t={configLoadFailed:`doom_plan.config_load_failed`,writePlanFailed:`doom_plan.write_plan_failed`,writePlanTimedOut:`doom_plan.write_plan_timed_out`,writePlanUnsafePath:`doom_plan.write_plan_unsafe_path`,modelResolveFailed:`doom_plan.model_resolve_failed`,modeEnabled:`doom_plan.mode_enabled`,modeDisabled:`doom_plan.mode_disabled`,planWritten:`doom_plan.plan_written`,planReviewCompleted:`doom_plan.plan_review_completed`};function n(t={}){let n=(0,e.createDoomTelemetry)({serviceName:`doom-plan`,packageName:`@agimon-ai/doompi-plan`,cwd:t.cwd,workspaceRoot:t.workspaceRoot,env:t.env,telemetryFactory:t.telemetryFactory,warn:t.warn,enableLogs:!0,enableTraces:!0});return{recordError:(e,t,r)=>n.recordError(e,t,r),recordWarning:(e,t,r)=>n.recordWarning(e,t,r),recordEvent:(e,t)=>n.recordEvent(e,t),flush:()=>n.flush(),shutdown:()=>n.shutdown()}}exports.PLAN_EVENT=t,exports.createPlanTelemetry=n;
|
|
2
|
+
//# sourceMappingURL=logSinkTelemetry.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logSinkTelemetry.cjs","names":["createDoomTelemetry"],"sources":["../../../src/adapters/telemetry/logSinkTelemetry.ts"],"sourcesContent":["import { createDoomTelemetry, type DoomTelemetry, type DoomTelemetryOptions } from '@agimon-ai/doompi-telemetry';\n\nconst SERVICE_NAME = 'doom-plan';\nconst PACKAGE_NAME = '@agimon-ai/doompi-plan';\n\nexport const PLAN_EVENT = {\n configLoadFailed: 'doom_plan.config_load_failed',\n writePlanFailed: 'doom_plan.write_plan_failed',\n writePlanTimedOut: 'doom_plan.write_plan_timed_out',\n writePlanUnsafePath: 'doom_plan.write_plan_unsafe_path',\n modelResolveFailed: 'doom_plan.model_resolve_failed',\n modeEnabled: 'doom_plan.mode_enabled',\n modeDisabled: 'doom_plan.mode_disabled',\n planWritten: 'doom_plan.plan_written',\n planReviewCompleted: 'doom_plan.plan_review_completed',\n} as const;\n\nexport type PlanEventName = (typeof PLAN_EVENT)[keyof typeof PLAN_EVENT];\nexport type PlanEventAttributes = Record<string, string | number | boolean>;\n\nexport interface PlanTelemetryOptions {\n cwd?: string;\n workspaceRoot?: string;\n env?: NodeJS.ProcessEnv;\n telemetryFactory?: NonNullable<DoomTelemetryOptions['telemetryFactory']>;\n warn?: (message: string) => void;\n}\n\nexport interface PlanTelemetry {\n recordError(event: PlanEventName, error: unknown, attributes?: PlanEventAttributes): Promise<void>;\n recordWarning(event: PlanEventName, error: unknown, attributes?: PlanEventAttributes): Promise<void>;\n recordEvent(event: PlanEventName, attributes?: PlanEventAttributes): Promise<void>;\n flush(): Promise<void>;\n shutdown(): Promise<void>;\n}\n\nexport function createPlanTelemetry(options: PlanTelemetryOptions = {}): PlanTelemetry {\n const telemetry: DoomTelemetry = createDoomTelemetry({\n serviceName: SERVICE_NAME,\n packageName: PACKAGE_NAME,\n cwd: options.cwd,\n workspaceRoot: options.workspaceRoot,\n env: options.env,\n telemetryFactory: options.telemetryFactory,\n warn: options.warn,\n enableLogs: true,\n enableTraces: true,\n });\n return {\n recordError: (event, error, attributes) => telemetry.recordError(event, error, attributes),\n recordWarning: (event, error, attributes) => telemetry.recordWarning(event, error, attributes),\n recordEvent: (event, attributes) => telemetry.recordEvent(event, attributes),\n flush: () => telemetry.flush(),\n shutdown: () => telemetry.shutdown(),\n };\n}\n"],"mappings":"6CAEA,MAGa,EAAa,CACxB,iBAAkB,+BAClB,gBAAiB,8BACjB,kBAAmB,iCACnB,oBAAqB,mCACrB,mBAAoB,iCACpB,YAAa,yBACb,aAAc,0BACd,YAAa,yBACb,oBAAqB,iCACvB,EAqBA,SAAgB,EAAoB,EAAgC,CAAC,EAAkB,CACrF,IAAM,GAAA,EAA2BA,EAAAA,oBAAAA,CAAoB,CACnD,YAAa,YACb,YAAa,yBACb,IAAK,EAAQ,IACb,cAAe,EAAQ,cACvB,IAAK,EAAQ,IACb,iBAAkB,EAAQ,iBAC1B,KAAM,EAAQ,KACd,WAAY,GACZ,aAAc,EAChB,CAAC,EACD,MAAO,CACL,aAAc,EAAO,EAAO,IAAe,EAAU,YAAY,EAAO,EAAO,CAAU,EACzF,eAAgB,EAAO,EAAO,IAAe,EAAU,cAAc,EAAO,EAAO,CAAU,EAC7F,aAAc,EAAO,IAAe,EAAU,YAAY,EAAO,CAAU,EAC3E,UAAa,EAAU,MAAM,EAC7B,aAAgB,EAAU,SAAS,CACrC,CACF"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { DoomTelemetryOptions } from "@agimon-ai/doompi-telemetry";
|
|
2
|
+
//#region src/adapters/telemetry/logSinkTelemetry.d.ts
|
|
3
|
+
declare const PLAN_EVENT: {
|
|
4
|
+
readonly configLoadFailed: 'doom_plan.config_load_failed';
|
|
5
|
+
readonly writePlanFailed: 'doom_plan.write_plan_failed';
|
|
6
|
+
readonly writePlanTimedOut: 'doom_plan.write_plan_timed_out';
|
|
7
|
+
readonly writePlanUnsafePath: 'doom_plan.write_plan_unsafe_path';
|
|
8
|
+
readonly modelResolveFailed: 'doom_plan.model_resolve_failed';
|
|
9
|
+
readonly modeEnabled: 'doom_plan.mode_enabled';
|
|
10
|
+
readonly modeDisabled: 'doom_plan.mode_disabled';
|
|
11
|
+
readonly planWritten: 'doom_plan.plan_written';
|
|
12
|
+
readonly planReviewCompleted: 'doom_plan.plan_review_completed';
|
|
13
|
+
};
|
|
14
|
+
type PlanEventName = (typeof PLAN_EVENT)[keyof typeof PLAN_EVENT];
|
|
15
|
+
type PlanEventAttributes = Record<string, string | number | boolean>;
|
|
16
|
+
interface PlanTelemetryOptions {
|
|
17
|
+
cwd?: string;
|
|
18
|
+
workspaceRoot?: string;
|
|
19
|
+
env?: NodeJS.ProcessEnv;
|
|
20
|
+
telemetryFactory?: NonNullable<DoomTelemetryOptions['telemetryFactory']>;
|
|
21
|
+
warn?: (message: string) => void;
|
|
22
|
+
}
|
|
23
|
+
interface PlanTelemetry {
|
|
24
|
+
recordError(event: PlanEventName, error: unknown, attributes?: PlanEventAttributes): Promise<void>;
|
|
25
|
+
recordWarning(event: PlanEventName, error: unknown, attributes?: PlanEventAttributes): Promise<void>;
|
|
26
|
+
recordEvent(event: PlanEventName, attributes?: PlanEventAttributes): Promise<void>;
|
|
27
|
+
flush(): Promise<void>;
|
|
28
|
+
shutdown(): Promise<void>;
|
|
29
|
+
}
|
|
30
|
+
declare function createPlanTelemetry(options?: PlanTelemetryOptions): PlanTelemetry;
|
|
31
|
+
//#endregion
|
|
32
|
+
export { PLAN_EVENT, PlanEventAttributes, PlanEventName, PlanTelemetry, PlanTelemetryOptions, createPlanTelemetry };
|
|
33
|
+
//# sourceMappingURL=logSinkTelemetry.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logSinkTelemetry.d.cts","names":[],"sources":["../../../src/adapters/telemetry/logSinkTelemetry.ts"],"mappings":";;cAKa;WACX;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;KAGU,wBAAwB,yBAAyB;KACjD,sBAAsB;UAEjB;EACf;EACA;EACA,MAAM,OAAO;EACb,mBAAmB,YAAY;EAC/B,QAAQ;;UAGO;EACf,YAAY,OAAO,eAAe,gBAAgB,aAAa,sBAAsB;EACrF,cAAc,OAAO,eAAe,gBAAgB,aAAa,sBAAsB;EACvF,YAAY,OAAO,eAAe,aAAa,sBAAsB;EACrE,SAAS;EACT,YAAY;;iBAGE,oBAAoB,UAAS,uBAA4B"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { DoomTelemetryOptions } from "@agimon-ai/doompi-telemetry";
|
|
2
|
+
//#region src/adapters/telemetry/logSinkTelemetry.d.ts
|
|
3
|
+
declare const PLAN_EVENT: {
|
|
4
|
+
readonly configLoadFailed: 'doom_plan.config_load_failed';
|
|
5
|
+
readonly writePlanFailed: 'doom_plan.write_plan_failed';
|
|
6
|
+
readonly writePlanTimedOut: 'doom_plan.write_plan_timed_out';
|
|
7
|
+
readonly writePlanUnsafePath: 'doom_plan.write_plan_unsafe_path';
|
|
8
|
+
readonly modelResolveFailed: 'doom_plan.model_resolve_failed';
|
|
9
|
+
readonly modeEnabled: 'doom_plan.mode_enabled';
|
|
10
|
+
readonly modeDisabled: 'doom_plan.mode_disabled';
|
|
11
|
+
readonly planWritten: 'doom_plan.plan_written';
|
|
12
|
+
readonly planReviewCompleted: 'doom_plan.plan_review_completed';
|
|
13
|
+
};
|
|
14
|
+
type PlanEventName = (typeof PLAN_EVENT)[keyof typeof PLAN_EVENT];
|
|
15
|
+
type PlanEventAttributes = Record<string, string | number | boolean>;
|
|
16
|
+
interface PlanTelemetryOptions {
|
|
17
|
+
cwd?: string;
|
|
18
|
+
workspaceRoot?: string;
|
|
19
|
+
env?: NodeJS.ProcessEnv;
|
|
20
|
+
telemetryFactory?: NonNullable<DoomTelemetryOptions['telemetryFactory']>;
|
|
21
|
+
warn?: (message: string) => void;
|
|
22
|
+
}
|
|
23
|
+
interface PlanTelemetry {
|
|
24
|
+
recordError(event: PlanEventName, error: unknown, attributes?: PlanEventAttributes): Promise<void>;
|
|
25
|
+
recordWarning(event: PlanEventName, error: unknown, attributes?: PlanEventAttributes): Promise<void>;
|
|
26
|
+
recordEvent(event: PlanEventName, attributes?: PlanEventAttributes): Promise<void>;
|
|
27
|
+
flush(): Promise<void>;
|
|
28
|
+
shutdown(): Promise<void>;
|
|
29
|
+
}
|
|
30
|
+
declare function createPlanTelemetry(options?: PlanTelemetryOptions): PlanTelemetry;
|
|
31
|
+
//#endregion
|
|
32
|
+
export { PLAN_EVENT, PlanEventAttributes, PlanEventName, PlanTelemetry, PlanTelemetryOptions, createPlanTelemetry };
|
|
33
|
+
//# sourceMappingURL=logSinkTelemetry.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logSinkTelemetry.d.mts","names":[],"sources":["../../../src/adapters/telemetry/logSinkTelemetry.ts"],"mappings":";;cAKa;WACX;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;KAGU,wBAAwB,yBAAyB;KACjD,sBAAsB;UAEjB;EACf;EACA;EACA,MAAM,OAAO;EACb,mBAAmB,YAAY;EAC/B,QAAQ;;UAGO;EACf,YAAY,OAAO,eAAe,gBAAgB,aAAa,sBAAsB;EACrF,cAAc,OAAO,eAAe,gBAAgB,aAAa,sBAAsB;EACvF,YAAY,OAAO,eAAe,aAAa,sBAAsB;EACrE,SAAS;EACT,YAAY;;iBAGE,oBAAoB,UAAS,uBAA4B"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{createDoomTelemetry as e}from"@agimon-ai/doompi-telemetry";const t={configLoadFailed:`doom_plan.config_load_failed`,writePlanFailed:`doom_plan.write_plan_failed`,writePlanTimedOut:`doom_plan.write_plan_timed_out`,writePlanUnsafePath:`doom_plan.write_plan_unsafe_path`,modelResolveFailed:`doom_plan.model_resolve_failed`,modeEnabled:`doom_plan.mode_enabled`,modeDisabled:`doom_plan.mode_disabled`,planWritten:`doom_plan.plan_written`,planReviewCompleted:`doom_plan.plan_review_completed`};function n(t={}){let n=e({serviceName:`doom-plan`,packageName:`@agimon-ai/doompi-plan`,cwd:t.cwd,workspaceRoot:t.workspaceRoot,env:t.env,telemetryFactory:t.telemetryFactory,warn:t.warn,enableLogs:!0,enableTraces:!0});return{recordError:(e,t,r)=>n.recordError(e,t,r),recordWarning:(e,t,r)=>n.recordWarning(e,t,r),recordEvent:(e,t)=>n.recordEvent(e,t),flush:()=>n.flush(),shutdown:()=>n.shutdown()}}export{t as PLAN_EVENT,n as createPlanTelemetry};
|
|
2
|
+
//# sourceMappingURL=logSinkTelemetry.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logSinkTelemetry.mjs","names":[],"sources":["../../../src/adapters/telemetry/logSinkTelemetry.ts"],"sourcesContent":["import { createDoomTelemetry, type DoomTelemetry, type DoomTelemetryOptions } from '@agimon-ai/doompi-telemetry';\n\nconst SERVICE_NAME = 'doom-plan';\nconst PACKAGE_NAME = '@agimon-ai/doompi-plan';\n\nexport const PLAN_EVENT = {\n configLoadFailed: 'doom_plan.config_load_failed',\n writePlanFailed: 'doom_plan.write_plan_failed',\n writePlanTimedOut: 'doom_plan.write_plan_timed_out',\n writePlanUnsafePath: 'doom_plan.write_plan_unsafe_path',\n modelResolveFailed: 'doom_plan.model_resolve_failed',\n modeEnabled: 'doom_plan.mode_enabled',\n modeDisabled: 'doom_plan.mode_disabled',\n planWritten: 'doom_plan.plan_written',\n planReviewCompleted: 'doom_plan.plan_review_completed',\n} as const;\n\nexport type PlanEventName = (typeof PLAN_EVENT)[keyof typeof PLAN_EVENT];\nexport type PlanEventAttributes = Record<string, string | number | boolean>;\n\nexport interface PlanTelemetryOptions {\n cwd?: string;\n workspaceRoot?: string;\n env?: NodeJS.ProcessEnv;\n telemetryFactory?: NonNullable<DoomTelemetryOptions['telemetryFactory']>;\n warn?: (message: string) => void;\n}\n\nexport interface PlanTelemetry {\n recordError(event: PlanEventName, error: unknown, attributes?: PlanEventAttributes): Promise<void>;\n recordWarning(event: PlanEventName, error: unknown, attributes?: PlanEventAttributes): Promise<void>;\n recordEvent(event: PlanEventName, attributes?: PlanEventAttributes): Promise<void>;\n flush(): Promise<void>;\n shutdown(): Promise<void>;\n}\n\nexport function createPlanTelemetry(options: PlanTelemetryOptions = {}): PlanTelemetry {\n const telemetry: DoomTelemetry = createDoomTelemetry({\n serviceName: SERVICE_NAME,\n packageName: PACKAGE_NAME,\n cwd: options.cwd,\n workspaceRoot: options.workspaceRoot,\n env: options.env,\n telemetryFactory: options.telemetryFactory,\n warn: options.warn,\n enableLogs: true,\n enableTraces: true,\n });\n return {\n recordError: (event, error, attributes) => telemetry.recordError(event, error, attributes),\n recordWarning: (event, error, attributes) => telemetry.recordWarning(event, error, attributes),\n recordEvent: (event, attributes) => telemetry.recordEvent(event, attributes),\n flush: () => telemetry.flush(),\n shutdown: () => telemetry.shutdown(),\n };\n}\n"],"mappings":"kEAEA,MAGa,EAAa,CACxB,iBAAkB,+BAClB,gBAAiB,8BACjB,kBAAmB,iCACnB,oBAAqB,mCACrB,mBAAoB,iCACpB,YAAa,yBACb,aAAc,0BACd,YAAa,yBACb,oBAAqB,iCACvB,EAqBA,SAAgB,EAAoB,EAAgC,CAAC,EAAkB,CACrF,IAAM,EAA2B,EAAoB,CACnD,YAAa,YACb,YAAa,yBACb,IAAK,EAAQ,IACb,cAAe,EAAQ,cACvB,IAAK,EAAQ,IACb,iBAAkB,EAAQ,iBAC1B,KAAM,EAAQ,KACd,WAAY,GACZ,aAAc,EAChB,CAAC,EACD,MAAO,CACL,aAAc,EAAO,EAAO,IAAe,EAAU,YAAY,EAAO,EAAO,CAAU,EACzF,eAAgB,EAAO,EAAO,IAAe,EAAU,cAAc,EAAO,EAAO,CAAU,EAC7F,aAAc,EAAO,IAAe,EAAU,YAAY,EAAO,CAAU,EAC3E,UAAa,EAAU,MAAM,EAC7B,aAAgB,EAAU,SAAS,CACrC,CACF"}
|
package/dist/config.cjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./schemas/plan/config.cjs");let t=require("@agimon-ai/doompi-config");exports.getHarnessState=t.getHarnessState,exports.globalDoomConfigPath=t.globalDoomConfigPath,exports.loadDoomConfig=e.loadDoomConfig,exports.loadHarnessState=t.loadHarnessState,exports.mergeDoomConfigs=e.mergeDoomConfigs,exports.parseDoomConfig=e.parseDoomConfig,exports.parsePlanningModeConfig=t.parsePlanningModeConfig,exports.repositoryDoomConfigPath=t.repositoryDoomConfigPath,exports.resolvePlanningPlansDirectory=t.resolvePlanningPlansDirectory;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { DoomConfig, PlanningAgentConfig, PlanningModeConfig, PlanningThinkingLevel, getHarnessState, globalDoomConfigPath, loadDoomConfig, loadHarnessState, mergeDoomConfigs, parseDoomConfig, parsePlanningModeConfig, repositoryDoomConfigPath, resolvePlanningPlansDirectory } from "./schemas/plan/config.cjs";
|
|
2
|
+
export { DoomConfig, type PlanningAgentConfig, type PlanningModeConfig, type PlanningThinkingLevel, getHarnessState, globalDoomConfigPath, loadDoomConfig, loadHarnessState, mergeDoomConfigs, parseDoomConfig, parsePlanningModeConfig, repositoryDoomConfigPath, resolvePlanningPlansDirectory };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { DoomConfig, PlanningAgentConfig, PlanningModeConfig, PlanningThinkingLevel, getHarnessState, globalDoomConfigPath, loadDoomConfig, loadHarnessState, mergeDoomConfigs, parseDoomConfig, parsePlanningModeConfig, repositoryDoomConfigPath, resolvePlanningPlansDirectory } from "./schemas/plan/config.mjs";
|
|
2
|
+
export { DoomConfig, type PlanningAgentConfig, type PlanningModeConfig, type PlanningThinkingLevel, getHarnessState, globalDoomConfigPath, loadDoomConfig, loadHarnessState, mergeDoomConfigs, parseDoomConfig, parsePlanningModeConfig, repositoryDoomConfigPath, resolvePlanningPlansDirectory };
|
package/dist/config.mjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{getHarnessState as e,globalDoomConfigPath as t,loadDoomConfig as n,loadHarnessState as r,mergeDoomConfigs as i,parseDoomConfig as a,parsePlanningModeConfig as o,repositoryDoomConfigPath as s,resolvePlanningPlansDirectory as c}from"./schemas/plan/config.mjs";export{e as getHarnessState,t as globalDoomConfigPath,n as loadDoomConfig,r as loadHarnessState,i as mergeDoomConfigs,a as parseDoomConfig,o as parsePlanningModeConfig,s as repositoryDoomConfigPath,c as resolvePlanningPlansDirectory};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=require("../adapters/pi/extension.cjs");module.exports=e.activatePlanExtension;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{activatePlanExtension as e}from"../adapters/pi/extension.mjs";export{e as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./services/fableFlow.cjs");exports.FABLE_PLAN_MODEL=e.FABLE_PLAN_MODEL,exports.FABLE_PLAN_PROFILE=e.FABLE_PLAN_PROFILE,exports.FABLE_PLAN_REQUESTER=e.FABLE_PLAN_REQUESTER,exports.FABLE_PLAN_RUNTIME=e.FABLE_PLAN_RUNTIME,exports.FABLE_PROVIDER_SOURCE=e.FABLE_PROVIDER_SOURCE,exports.MAX_FABLE_ARRAY_ITEMS=e.MAX_FABLE_ARRAY_ITEMS,exports.MAX_FABLE_PACKET_BYTES=e.MAX_FABLE_PACKET_BYTES,exports.MAX_FABLE_TEXT_BYTES=e.MAX_FABLE_TEXT_BYTES,exports.containsSuspectedCredential=e.containsSuspectedCredential,exports.createFablePlanFlow=e.createFablePlanFlow,exports.sanitizeFablePacket=e.sanitizeFablePacket;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { FABLE_PLAN_MODEL, FABLE_PLAN_PROFILE, FABLE_PLAN_REQUESTER, FABLE_PLAN_RUNTIME, FABLE_PROVIDER_SOURCE, FableFlowOptions, FablePlanBroker, FablePlanFinding, FablePlanFlow, FablePlanPacket, FablePlanRequest, FablePlanResult, FablePlanStage, FablePlanStatus, FableStage, MAX_FABLE_ARRAY_ITEMS, MAX_FABLE_PACKET_BYTES, MAX_FABLE_TEXT_BYTES, containsSuspectedCredential, createFablePlanFlow, sanitizeFablePacket } from "./services/fableFlow.cjs";
|
|
2
|
+
export { FABLE_PLAN_MODEL, FABLE_PLAN_PROFILE, FABLE_PLAN_REQUESTER, FABLE_PLAN_RUNTIME, FABLE_PROVIDER_SOURCE, FableFlowOptions, FablePlanBroker, FablePlanFinding, FablePlanFlow, FablePlanPacket, FablePlanRequest, FablePlanResult, FablePlanStage, FablePlanStatus, FableStage, MAX_FABLE_ARRAY_ITEMS, MAX_FABLE_PACKET_BYTES, MAX_FABLE_TEXT_BYTES, containsSuspectedCredential, createFablePlanFlow, sanitizeFablePacket };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { FABLE_PLAN_MODEL, FABLE_PLAN_PROFILE, FABLE_PLAN_REQUESTER, FABLE_PLAN_RUNTIME, FABLE_PROVIDER_SOURCE, FableFlowOptions, FablePlanBroker, FablePlanFinding, FablePlanFlow, FablePlanPacket, FablePlanRequest, FablePlanResult, FablePlanStage, FablePlanStatus, FableStage, MAX_FABLE_ARRAY_ITEMS, MAX_FABLE_PACKET_BYTES, MAX_FABLE_TEXT_BYTES, containsSuspectedCredential, createFablePlanFlow, sanitizeFablePacket } from "./services/fableFlow.mjs";
|
|
2
|
+
export { FABLE_PLAN_MODEL, FABLE_PLAN_PROFILE, FABLE_PLAN_REQUESTER, FABLE_PLAN_RUNTIME, FABLE_PROVIDER_SOURCE, FableFlowOptions, FablePlanBroker, FablePlanFinding, FablePlanFlow, FablePlanPacket, FablePlanRequest, FablePlanResult, FablePlanStage, FablePlanStatus, FableStage, MAX_FABLE_ARRAY_ITEMS, MAX_FABLE_PACKET_BYTES, MAX_FABLE_TEXT_BYTES, containsSuspectedCredential, createFablePlanFlow, sanitizeFablePacket };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{FABLE_PLAN_MODEL as e,FABLE_PLAN_PROFILE as t,FABLE_PLAN_REQUESTER as n,FABLE_PLAN_RUNTIME as r,FABLE_PROVIDER_SOURCE as i,MAX_FABLE_ARRAY_ITEMS as a,MAX_FABLE_PACKET_BYTES as o,MAX_FABLE_TEXT_BYTES as s,containsSuspectedCredential as c,createFablePlanFlow as l,sanitizeFablePacket as u}from"./services/fableFlow.mjs";export{e as FABLE_PLAN_MODEL,t as FABLE_PLAN_PROFILE,n as FABLE_PLAN_REQUESTER,r as FABLE_PLAN_RUNTIME,i as FABLE_PROVIDER_SOURCE,a as MAX_FABLE_ARRAY_ITEMS,o as MAX_FABLE_PACKET_BYTES,s as MAX_FABLE_TEXT_BYTES,c as containsSuspectedCredential,l as createFablePlanFlow,u as sanitizeFablePacket};
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./schemas/plan/config.cjs"),t=require("./services/fableFlow.cjs"),n=require("./services/prompts.cjs"),r=require("./services/planMode.cjs");let i=require("@agimon-ai/doompi-config");exports.FABLE_PLAN_MODEL=t.FABLE_PLAN_MODEL,exports.FABLE_PLAN_PROFILE=t.FABLE_PLAN_PROFILE,exports.FABLE_PLAN_REQUESTER=t.FABLE_PLAN_REQUESTER,exports.FABLE_PLAN_RUNTIME=t.FABLE_PLAN_RUNTIME,exports.FABLE_PROVIDER_SOURCE=t.FABLE_PROVIDER_SOURCE,exports.MAX_FABLE_ARRAY_ITEMS=t.MAX_FABLE_ARRAY_ITEMS,exports.MAX_FABLE_PACKET_BYTES=t.MAX_FABLE_PACKET_BYTES,exports.MAX_FABLE_TEXT_BYTES=t.MAX_FABLE_TEXT_BYTES,exports.WRITE_PLAN_TIMEOUT_MS=r.WRITE_PLAN_TIMEOUT_MS,exports.buildDebugPlanningPrompt=n.buildDebugPlanningPrompt,exports.buildFablePlanningPrompt=n.buildFablePlanningPrompt,exports.buildFlavorPlanningPrompt=n.buildFlavorPlanningPrompt,exports.buildNormalPlanningPrompt=n.buildNormalPlanningPrompt,exports.configurePlanningSubagentInput=r.configurePlanningSubagentInput,exports.configurePlanningTaskInput=r.configurePlanningTaskInput,exports.constrainSubagentInput=r.constrainSubagentInput,exports.containsSuspectedCredential=t.containsSuspectedCredential,exports.createFablePlanFlow=t.createFablePlanFlow,exports.createPlanIdentifier=r.createPlanIdentifier,exports.getHarnessState=i.getHarnessState,exports.globalDoomConfigPath=i.globalDoomConfigPath,exports.isBlockedSubagentManagementAction=r.isBlockedSubagentManagementAction,exports.loadDoomConfig=e.loadDoomConfig,exports.loadHarnessState=i.loadHarnessState,exports.loadPlanningModeConfig=r.loadPlanningModeConfig,exports.mergeDoomConfigs=e.mergeDoomConfigs,exports.parseDebugEvidencePacket=r.parseDebugEvidencePacket,exports.parseDoomConfig=e.parseDoomConfig,exports.parsePersistedPlanState=r.parsePersistedPlanState,exports.parsePlanningModeConfig=i.parsePlanningModeConfig,exports.planModeExtension=r.planModeExtension,exports.planModeTools=r.planModeTools,exports.planSessionIdentifier=r.planSessionIdentifier,exports.planTitleSlug=r.planTitleSlug,exports.planningSubagentModel=r.planningSubagentModel,exports.repositoryDoomConfigPath=i.repositoryDoomConfigPath,exports.resolvePlanningPlansDirectory=i.resolvePlanningPlansDirectory,exports.sanitizeFablePacket=t.sanitizeFablePacket,exports.visiblePlanForToolCall=r.visiblePlanForToolCall;
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { DoomConfig, PlanningAgentConfig, PlanningModeConfig, PlanningThinkingLevel, getHarnessState, globalDoomConfigPath, loadDoomConfig, loadHarnessState, mergeDoomConfigs, parseDoomConfig, parsePlanningModeConfig, repositoryDoomConfigPath, resolvePlanningPlansDirectory } from "./schemas/plan/config.cjs";
|
|
2
|
+
import { FABLE_PLAN_MODEL, FABLE_PLAN_PROFILE, FABLE_PLAN_REQUESTER, FABLE_PLAN_RUNTIME, FABLE_PROVIDER_SOURCE, FableFlowOptions, FablePlanBroker, FablePlanFinding, FablePlanFlow, FablePlanPacket, FablePlanRequest, FablePlanResult, FablePlanStage, FablePlanStatus, FableStage, MAX_FABLE_ARRAY_ITEMS, MAX_FABLE_PACKET_BYTES, MAX_FABLE_TEXT_BYTES, containsSuspectedCredential, createFablePlanFlow, sanitizeFablePacket } from "./services/fableFlow.cjs";
|
|
3
|
+
import { DebugEvidencePacket, PlanningFlavor, buildDebugPlanningPrompt, buildFablePlanningPrompt, buildFlavorPlanningPrompt, buildNormalPlanningPrompt } from "./services/prompts.cjs";
|
|
4
|
+
import { ModelIdentity, PlanModeExtensionOptions, PlanSnapshot, PlanningConfigProvider, WRITE_PLAN_TIMEOUT_MS, configurePlanningSubagentInput, configurePlanningTaskInput, constrainSubagentInput, createPlanIdentifier, isBlockedSubagentManagementAction, loadPlanningModeConfig, parseDebugEvidencePacket, parsePersistedPlanState, planModeExtension, planModeTools, planSessionIdentifier, planTitleSlug, planningSubagentModel, visiblePlanForToolCall } from "./services/planMode.cjs";
|
|
5
|
+
export { DebugEvidencePacket, DoomConfig, FABLE_PLAN_MODEL, FABLE_PLAN_PROFILE, FABLE_PLAN_REQUESTER, FABLE_PLAN_RUNTIME, FABLE_PROVIDER_SOURCE, FableFlowOptions, FablePlanBroker, FablePlanFinding, FablePlanFlow, FablePlanPacket, FablePlanRequest, FablePlanResult, FablePlanStage, FablePlanStatus, FableStage, MAX_FABLE_ARRAY_ITEMS, MAX_FABLE_PACKET_BYTES, MAX_FABLE_TEXT_BYTES, ModelIdentity, PlanModeExtensionOptions, PlanSnapshot, type PlanningAgentConfig, PlanningConfigProvider, PlanningFlavor, type PlanningModeConfig, type PlanningThinkingLevel, WRITE_PLAN_TIMEOUT_MS, buildDebugPlanningPrompt, buildFablePlanningPrompt, buildFlavorPlanningPrompt, buildNormalPlanningPrompt, configurePlanningSubagentInput, configurePlanningTaskInput, constrainSubagentInput, containsSuspectedCredential, createFablePlanFlow, createPlanIdentifier, getHarnessState, globalDoomConfigPath, isBlockedSubagentManagementAction, loadDoomConfig, loadHarnessState, loadPlanningModeConfig, mergeDoomConfigs, parseDebugEvidencePacket, parseDoomConfig, parsePersistedPlanState, parsePlanningModeConfig, planModeExtension, planModeTools, planSessionIdentifier, planTitleSlug, planningSubagentModel, repositoryDoomConfigPath, resolvePlanningPlansDirectory, sanitizeFablePacket, visiblePlanForToolCall };
|
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { DoomConfig, PlanningAgentConfig, PlanningModeConfig, PlanningThinkingLevel, getHarnessState, globalDoomConfigPath, loadDoomConfig, loadHarnessState, mergeDoomConfigs, parseDoomConfig, parsePlanningModeConfig, repositoryDoomConfigPath, resolvePlanningPlansDirectory } from "./schemas/plan/config.mjs";
|
|
2
|
+
import { FABLE_PLAN_MODEL, FABLE_PLAN_PROFILE, FABLE_PLAN_REQUESTER, FABLE_PLAN_RUNTIME, FABLE_PROVIDER_SOURCE, FableFlowOptions, FablePlanBroker, FablePlanFinding, FablePlanFlow, FablePlanPacket, FablePlanRequest, FablePlanResult, FablePlanStage, FablePlanStatus, FableStage, MAX_FABLE_ARRAY_ITEMS, MAX_FABLE_PACKET_BYTES, MAX_FABLE_TEXT_BYTES, containsSuspectedCredential, createFablePlanFlow, sanitizeFablePacket } from "./services/fableFlow.mjs";
|
|
3
|
+
import { DebugEvidencePacket, PlanningFlavor, buildDebugPlanningPrompt, buildFablePlanningPrompt, buildFlavorPlanningPrompt, buildNormalPlanningPrompt } from "./services/prompts.mjs";
|
|
4
|
+
import { ModelIdentity, PlanModeExtensionOptions, PlanSnapshot, PlanningConfigProvider, WRITE_PLAN_TIMEOUT_MS, configurePlanningSubagentInput, configurePlanningTaskInput, constrainSubagentInput, createPlanIdentifier, isBlockedSubagentManagementAction, loadPlanningModeConfig, parseDebugEvidencePacket, parsePersistedPlanState, planModeExtension, planModeTools, planSessionIdentifier, planTitleSlug, planningSubagentModel, visiblePlanForToolCall } from "./services/planMode.mjs";
|
|
5
|
+
export { DebugEvidencePacket, DoomConfig, FABLE_PLAN_MODEL, FABLE_PLAN_PROFILE, FABLE_PLAN_REQUESTER, FABLE_PLAN_RUNTIME, FABLE_PROVIDER_SOURCE, FableFlowOptions, FablePlanBroker, FablePlanFinding, FablePlanFlow, FablePlanPacket, FablePlanRequest, FablePlanResult, FablePlanStage, FablePlanStatus, FableStage, MAX_FABLE_ARRAY_ITEMS, MAX_FABLE_PACKET_BYTES, MAX_FABLE_TEXT_BYTES, ModelIdentity, PlanModeExtensionOptions, PlanSnapshot, type PlanningAgentConfig, PlanningConfigProvider, PlanningFlavor, type PlanningModeConfig, type PlanningThinkingLevel, WRITE_PLAN_TIMEOUT_MS, buildDebugPlanningPrompt, buildFablePlanningPrompt, buildFlavorPlanningPrompt, buildNormalPlanningPrompt, configurePlanningSubagentInput, configurePlanningTaskInput, constrainSubagentInput, containsSuspectedCredential, createFablePlanFlow, createPlanIdentifier, getHarnessState, globalDoomConfigPath, isBlockedSubagentManagementAction, loadDoomConfig, loadHarnessState, loadPlanningModeConfig, mergeDoomConfigs, parseDebugEvidencePacket, parseDoomConfig, parsePersistedPlanState, parsePlanningModeConfig, planModeExtension, planModeTools, planSessionIdentifier, planTitleSlug, planningSubagentModel, repositoryDoomConfigPath, resolvePlanningPlansDirectory, sanitizeFablePacket, visiblePlanForToolCall };
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{getHarnessState as e,globalDoomConfigPath as t,loadDoomConfig as n,loadHarnessState as r,mergeDoomConfigs as i,parseDoomConfig as a,parsePlanningModeConfig as o,repositoryDoomConfigPath as s,resolvePlanningPlansDirectory as c}from"./schemas/plan/config.mjs";import{FABLE_PLAN_MODEL as l,FABLE_PLAN_PROFILE as u,FABLE_PLAN_REQUESTER as d,FABLE_PLAN_RUNTIME as f,FABLE_PROVIDER_SOURCE as p,MAX_FABLE_ARRAY_ITEMS as m,MAX_FABLE_PACKET_BYTES as h,MAX_FABLE_TEXT_BYTES as g,containsSuspectedCredential as _,createFablePlanFlow as v,sanitizeFablePacket as y}from"./services/fableFlow.mjs";import{buildDebugPlanningPrompt as b,buildFablePlanningPrompt as x,buildFlavorPlanningPrompt as S,buildNormalPlanningPrompt as C}from"./services/prompts.mjs";import{WRITE_PLAN_TIMEOUT_MS as w,configurePlanningSubagentInput as T,configurePlanningTaskInput as E,constrainSubagentInput as D,createPlanIdentifier as O,isBlockedSubagentManagementAction as k,loadPlanningModeConfig as A,parseDebugEvidencePacket as j,parsePersistedPlanState as M,planModeExtension as N,planModeTools as P,planSessionIdentifier as F,planTitleSlug as I,planningSubagentModel as L,visiblePlanForToolCall as R}from"./services/planMode.mjs";export{l as FABLE_PLAN_MODEL,u as FABLE_PLAN_PROFILE,d as FABLE_PLAN_REQUESTER,f as FABLE_PLAN_RUNTIME,p as FABLE_PROVIDER_SOURCE,m as MAX_FABLE_ARRAY_ITEMS,h as MAX_FABLE_PACKET_BYTES,g as MAX_FABLE_TEXT_BYTES,w as WRITE_PLAN_TIMEOUT_MS,b as buildDebugPlanningPrompt,x as buildFablePlanningPrompt,S as buildFlavorPlanningPrompt,C as buildNormalPlanningPrompt,T as configurePlanningSubagentInput,E as configurePlanningTaskInput,D as constrainSubagentInput,_ as containsSuspectedCredential,v as createFablePlanFlow,O as createPlanIdentifier,e as getHarnessState,t as globalDoomConfigPath,k as isBlockedSubagentManagementAction,n as loadDoomConfig,r as loadHarnessState,A as loadPlanningModeConfig,i as mergeDoomConfigs,j as parseDebugEvidencePacket,a as parseDoomConfig,M as parsePersistedPlanState,o as parsePlanningModeConfig,N as planModeExtension,P as planModeTools,F as planSessionIdentifier,I as planTitleSlug,L as planningSubagentModel,s as repositoryDoomConfigPath,c as resolvePlanningPlansDirectory,y as sanitizeFablePacket,R as visiblePlanForToolCall};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./adapters/telemetry/logSinkTelemetry.cjs");exports.PLAN_EVENT=e.PLAN_EVENT,exports.createPlanTelemetry=e.createPlanTelemetry;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { PLAN_EVENT, PlanEventAttributes, PlanEventName, PlanTelemetry, PlanTelemetryOptions, createPlanTelemetry } from "./adapters/telemetry/logSinkTelemetry.cjs";
|
|
2
|
+
export { PLAN_EVENT, PlanEventAttributes, PlanEventName, PlanTelemetry, PlanTelemetryOptions, createPlanTelemetry };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { PLAN_EVENT, PlanEventAttributes, PlanEventName, PlanTelemetry, PlanTelemetryOptions, createPlanTelemetry } from "./adapters/telemetry/logSinkTelemetry.mjs";
|
|
2
|
+
export { PLAN_EVENT, PlanEventAttributes, PlanEventName, PlanTelemetry, PlanTelemetryOptions, createPlanTelemetry };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{PLAN_EVENT as e,createPlanTelemetry as t}from"./adapters/telemetry/logSinkTelemetry.mjs";export{e as PLAN_EVENT,t as createPlanTelemetry};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./schemas/plan/planConfig.cjs");exports.PLAN_CONFIG_SECTION_ID=e.PLAN_CONFIG_SECTION_ID,exports.PLAN_SETTINGS=e.PLAN_SETTINGS,exports.planConfigSections=e.planConfigSections,exports.planSettingByFieldId=e.planSettingByFieldId;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{PLAN_CONFIG_SECTION_ID as e,PLAN_SETTINGS as t,planConfigSections as n,planSettingByFieldId as r}from"./schemas/plan/planConfig.mjs";export{e as PLAN_CONFIG_SECTION_ID,t as PLAN_SETTINGS,n as planConfigSections,r as planSettingByFieldId};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./services/planMode.cjs");exports.WRITE_PLAN_TIMEOUT_MS=e.WRITE_PLAN_TIMEOUT_MS,exports.configurePlanningSubagentInput=e.configurePlanningSubagentInput,exports.configurePlanningTaskInput=e.configurePlanningTaskInput,exports.constrainSubagentInput=e.constrainSubagentInput,exports.createPlanIdentifier=e.createPlanIdentifier,exports.isBlockedSubagentManagementAction=e.isBlockedSubagentManagementAction,exports.loadPlanningModeConfig=e.loadPlanningModeConfig,exports.parseDebugEvidencePacket=e.parseDebugEvidencePacket,exports.parsePersistedPlanState=e.parsePersistedPlanState,exports.planModeExtension=e.planModeExtension,exports.planModeTools=e.planModeTools,exports.planSessionIdentifier=e.planSessionIdentifier,exports.planTitleSlug=e.planTitleSlug,exports.planningSubagentModel=e.planningSubagentModel,exports.visiblePlanForToolCall=e.visiblePlanForToolCall;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { PlanningFlavor } from "./services/prompts.cjs";
|
|
2
|
+
import { ModelIdentity, PlanModeExtensionOptions, PlanSnapshot, PlanningConfigProvider, WRITE_PLAN_TIMEOUT_MS, configurePlanningSubagentInput, configurePlanningTaskInput, constrainSubagentInput, createPlanIdentifier, isBlockedSubagentManagementAction, loadPlanningModeConfig, parseDebugEvidencePacket, parsePersistedPlanState, planModeExtension, planModeTools, planSessionIdentifier, planTitleSlug, planningSubagentModel, visiblePlanForToolCall } from "./services/planMode.cjs";
|
|
3
|
+
export { ModelIdentity, PlanModeExtensionOptions, PlanSnapshot, PlanningConfigProvider, type PlanningFlavor, WRITE_PLAN_TIMEOUT_MS, configurePlanningSubagentInput, configurePlanningTaskInput, constrainSubagentInput, createPlanIdentifier, isBlockedSubagentManagementAction, loadPlanningModeConfig, parseDebugEvidencePacket, parsePersistedPlanState, planModeExtension, planModeTools, planSessionIdentifier, planTitleSlug, planningSubagentModel, visiblePlanForToolCall };
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { PlanningFlavor } from "./services/prompts.mjs";
|
|
2
|
+
import { ModelIdentity, PlanModeExtensionOptions, PlanSnapshot, PlanningConfigProvider, WRITE_PLAN_TIMEOUT_MS, configurePlanningSubagentInput, configurePlanningTaskInput, constrainSubagentInput, createPlanIdentifier, isBlockedSubagentManagementAction, loadPlanningModeConfig, parseDebugEvidencePacket, parsePersistedPlanState, planModeExtension, planModeTools, planSessionIdentifier, planTitleSlug, planningSubagentModel, visiblePlanForToolCall } from "./services/planMode.mjs";
|
|
3
|
+
export { ModelIdentity, PlanModeExtensionOptions, PlanSnapshot, PlanningConfigProvider, type PlanningFlavor, WRITE_PLAN_TIMEOUT_MS, configurePlanningSubagentInput, configurePlanningTaskInput, constrainSubagentInput, createPlanIdentifier, isBlockedSubagentManagementAction, loadPlanningModeConfig, parseDebugEvidencePacket, parsePersistedPlanState, planModeExtension, planModeTools, planSessionIdentifier, planTitleSlug, planningSubagentModel, visiblePlanForToolCall };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{WRITE_PLAN_TIMEOUT_MS as e,configurePlanningSubagentInput as t,configurePlanningTaskInput as n,constrainSubagentInput as r,createPlanIdentifier as i,isBlockedSubagentManagementAction as a,loadPlanningModeConfig as o,parseDebugEvidencePacket as s,parsePersistedPlanState as c,planModeExtension as l,planModeTools as u,planSessionIdentifier as d,planTitleSlug as f,planningSubagentModel as p,visiblePlanForToolCall as m}from"./services/planMode.mjs";export{e as WRITE_PLAN_TIMEOUT_MS,t as configurePlanningSubagentInput,n as configurePlanningTaskInput,r as constrainSubagentInput,i as createPlanIdentifier,a as isBlockedSubagentManagementAction,o as loadPlanningModeConfig,s as parseDebugEvidencePacket,c as parsePersistedPlanState,l as planModeExtension,u as planModeTools,d as planSessionIdentifier,f as planTitleSlug,p as planningSubagentModel,m as visiblePlanForToolCall};
|
package/dist/prompts.cjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./services/prompts.cjs");exports.buildDebugPlanningPrompt=e.buildDebugPlanningPrompt,exports.buildFablePlanningPrompt=e.buildFablePlanningPrompt,exports.buildFlavorPlanningPrompt=e.buildFlavorPlanningPrompt,exports.buildNormalPlanningPrompt=e.buildNormalPlanningPrompt;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { DebugEvidencePacket, PlanningFlavor, buildDebugPlanningPrompt, buildFablePlanningPrompt, buildFlavorPlanningPrompt, buildNormalPlanningPrompt } from "./services/prompts.cjs";
|
|
2
|
+
export { DebugEvidencePacket, PlanningFlavor, buildDebugPlanningPrompt, buildFablePlanningPrompt, buildFlavorPlanningPrompt, buildNormalPlanningPrompt };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { DebugEvidencePacket, PlanningFlavor, buildDebugPlanningPrompt, buildFablePlanningPrompt, buildFlavorPlanningPrompt, buildNormalPlanningPrompt } from "./services/prompts.mjs";
|
|
2
|
+
export { DebugEvidencePacket, PlanningFlavor, buildDebugPlanningPrompt, buildFablePlanningPrompt, buildFlavorPlanningPrompt, buildNormalPlanningPrompt };
|
package/dist/prompts.mjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{buildDebugPlanningPrompt as e,buildFablePlanningPrompt as t,buildFlavorPlanningPrompt as n,buildNormalPlanningPrompt as r}from"./services/prompts.mjs";export{e as buildDebugPlanningPrompt,t as buildFablePlanningPrompt,n as buildFlavorPlanningPrompt,r as buildNormalPlanningPrompt};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
let e=require("@agimon-ai/doompi-config");function t(t,n){let r=(0,e.parseDoomConfig)(t,n);return r.modes?{modes:r.modes}:{}}function n(t,n){let r=(0,e.mergeDoomConfigs)({...t,projectTrust:`ask`},{...n,projectTrust:`ask`});return r.modes?{modes:r.modes}:{}}function r(t,n){let r=(0,e.loadDoomConfig)(t,n);return r.modes?{modes:r.modes}:{}}exports.getHarnessState=e.getHarnessState,exports.globalDoomConfigPath=e.globalDoomConfigPath,exports.loadDoomConfig=r,exports.loadHarnessState=e.loadHarnessState,exports.mergeDoomConfigs=n,exports.parseDoomConfig=t,exports.parsePlanningModeConfig=e.parsePlanningModeConfig,exports.repositoryDoomConfigPath=e.repositoryDoomConfigPath,exports.resolvePlanningPlansDirectory=e.resolvePlanningPlansDirectory;
|
|
2
|
+
//# sourceMappingURL=config.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.cjs","names":["parseSharedDoomConfig","mergeSharedDoomConfigs","loadSharedDoomConfig"],"sources":["../../../src/schemas/plan/config.ts"],"sourcesContent":["import {\n getHarnessState,\n globalDoomConfigPath,\n loadHarnessState,\n loadDoomConfig as loadSharedDoomConfig,\n mergeDoomConfigs as mergeSharedDoomConfigs,\n type PlanningAgentConfig,\n type PlanningModeConfig,\n type PlanningThinkingLevel,\n parsePlanningModeConfig,\n parseDoomConfig as parseSharedDoomConfig,\n repositoryDoomConfigPath,\n resolvePlanningPlansDirectory,\n} from '@agimon-ai/doompi-config';\n\nexport type { PlanningAgentConfig, PlanningModeConfig, PlanningThinkingLevel };\n\nexport interface DoomConfig {\n modes?: {\n planning?: PlanningModeConfig;\n };\n}\n\nconst DEFAULT_PROJECT_TRUST = 'ask' as const;\n\nexport {\n getHarnessState,\n globalDoomConfigPath,\n loadHarnessState,\n parsePlanningModeConfig,\n repositoryDoomConfigPath,\n resolvePlanningPlansDirectory,\n};\n\nexport function parseDoomConfig(content: string, filePath: string): DoomConfig {\n const config = parseSharedDoomConfig(content, filePath);\n return config.modes ? { modes: config.modes } : {};\n}\n\nexport function mergeDoomConfigs(globalConfig: DoomConfig, repositoryConfig: DoomConfig): DoomConfig {\n const merged = mergeSharedDoomConfigs(\n { ...globalConfig, projectTrust: DEFAULT_PROJECT_TRUST },\n { ...repositoryConfig, projectTrust: DEFAULT_PROJECT_TRUST },\n );\n return merged.modes ? { modes: merged.modes } : {};\n}\n\nexport function loadDoomConfig(repoRoot: string, homeDirectory?: string): DoomConfig {\n const config = loadSharedDoomConfig(repoRoot, homeDirectory);\n return config.modes ? { modes: config.modes } : {};\n}\n"],"mappings":"0CAkCA,SAAgB,EAAgB,EAAiB,EAA8B,CAC7E,IAAM,GAAA,EAASA,EAAAA,gBAAAA,CAAsB,EAAS,CAAQ,EACtD,OAAO,EAAO,MAAQ,CAAE,MAAO,EAAO,KAAM,EAAI,CAAC,CACnD,CAEA,SAAgB,EAAiB,EAA0B,EAA0C,CACnG,IAAM,GAAA,EAASC,EAAAA,iBAAAA,CACb,CAAE,GAAG,EAAc,aAAc,KAAsB,EACvD,CAAE,GAAG,EAAkB,aAAc,KAAsB,CAC7D,EACA,OAAO,EAAO,MAAQ,CAAE,MAAO,EAAO,KAAM,EAAI,CAAC,CACnD,CAEA,SAAgB,EAAe,EAAkB,EAAoC,CACnF,IAAM,GAAA,EAASC,EAAAA,eAAAA,CAAqB,EAAU,CAAa,EAC3D,OAAO,EAAO,MAAQ,CAAE,MAAO,EAAO,KAAM,EAAI,CAAC,CACnD"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { PlanningAgentConfig, PlanningModeConfig, PlanningThinkingLevel, getHarnessState, globalDoomConfigPath, loadHarnessState, parsePlanningModeConfig, repositoryDoomConfigPath, resolvePlanningPlansDirectory } from "@agimon-ai/doompi-config";
|
|
2
|
+
//#region src/schemas/plan/config.d.ts
|
|
3
|
+
interface DoomConfig {
|
|
4
|
+
modes?: {
|
|
5
|
+
planning?: PlanningModeConfig;
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
declare function parseDoomConfig(content: string, filePath: string): DoomConfig;
|
|
9
|
+
declare function mergeDoomConfigs(globalConfig: DoomConfig, repositoryConfig: DoomConfig): DoomConfig;
|
|
10
|
+
declare function loadDoomConfig(repoRoot: string, homeDirectory?: string): DoomConfig;
|
|
11
|
+
//#endregion
|
|
12
|
+
export { DoomConfig, type PlanningAgentConfig, type PlanningModeConfig, type PlanningThinkingLevel, getHarnessState, globalDoomConfigPath, loadDoomConfig, loadHarnessState, mergeDoomConfigs, parseDoomConfig, parsePlanningModeConfig, repositoryDoomConfigPath, resolvePlanningPlansDirectory };
|
|
13
|
+
//# sourceMappingURL=config.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.cts","names":[],"sources":["../../../src/schemas/plan/config.ts"],"mappings":";;UAiBiB;EACf;IACE,WAAW;;;iBAeC,gBAAgB,iBAAiB,mBAAmB;iBAKpD,iBAAiB,cAAc,YAAY,kBAAkB,aAAa;iBAQ1E,eAAe,kBAAkB,yBAAyB"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { PlanningAgentConfig, PlanningModeConfig, PlanningThinkingLevel, getHarnessState, globalDoomConfigPath as globalDoomConfigPath$1, loadHarnessState, parsePlanningModeConfig, repositoryDoomConfigPath, resolvePlanningPlansDirectory } from "@agimon-ai/doompi-config";
|
|
2
|
+
//#region src/schemas/plan/config.d.ts
|
|
3
|
+
interface DoomConfig {
|
|
4
|
+
modes?: {
|
|
5
|
+
planning?: PlanningModeConfig;
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
declare function parseDoomConfig$1(content: string, filePath: string): DoomConfig;
|
|
9
|
+
declare function mergeDoomConfigs$1(globalConfig: DoomConfig, repositoryConfig: DoomConfig): DoomConfig;
|
|
10
|
+
declare function loadDoomConfig$1(repoRoot: string, homeDirectory?: string): DoomConfig;
|
|
11
|
+
//#endregion
|
|
12
|
+
export { DoomConfig, type PlanningAgentConfig, type PlanningModeConfig, type PlanningThinkingLevel, getHarnessState, globalDoomConfigPath$1 as globalDoomConfigPath, loadDoomConfig$1 as loadDoomConfig, loadHarnessState, mergeDoomConfigs$1 as mergeDoomConfigs, parseDoomConfig$1 as parseDoomConfig, parsePlanningModeConfig, repositoryDoomConfigPath, resolvePlanningPlansDirectory };
|
|
13
|
+
//# sourceMappingURL=config.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.mts","names":[],"sources":["../../../src/schemas/plan/config.ts"],"mappings":";;UAiBiB;EACf;IACE,WAAW;;;iBAeC,kBAAgB,iBAAiB,mBAAmB;iBAKpD,mBAAiB,cAAc,YAAY,kBAAkB,aAAa;iBAQ1E,iBAAe,kBAAkB,yBAAyB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{getHarnessState as e,globalDoomConfigPath as t,loadDoomConfig as n,loadHarnessState as r,mergeDoomConfigs as i,parseDoomConfig as a,parsePlanningModeConfig as o,repositoryDoomConfigPath as s,resolvePlanningPlansDirectory as c}from"@agimon-ai/doompi-config";function l(e,t){let n=a(e,t);return n.modes?{modes:n.modes}:{}}function u(e,t){let n=i({...e,projectTrust:`ask`},{...t,projectTrust:`ask`});return n.modes?{modes:n.modes}:{}}function d(e,t){let r=n(e,t);return r.modes?{modes:r.modes}:{}}export{e as getHarnessState,t as globalDoomConfigPath,d as loadDoomConfig,r as loadHarnessState,u as mergeDoomConfigs,l as parseDoomConfig,o as parsePlanningModeConfig,s as repositoryDoomConfigPath,c as resolvePlanningPlansDirectory};
|
|
2
|
+
//# sourceMappingURL=config.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.mjs","names":["parseDoomConfig","parseSharedDoomConfig","mergeDoomConfigs","mergeSharedDoomConfigs","loadDoomConfig","loadSharedDoomConfig"],"sources":["../../../src/schemas/plan/config.ts"],"sourcesContent":["import {\n getHarnessState,\n globalDoomConfigPath,\n loadHarnessState,\n loadDoomConfig as loadSharedDoomConfig,\n mergeDoomConfigs as mergeSharedDoomConfigs,\n type PlanningAgentConfig,\n type PlanningModeConfig,\n type PlanningThinkingLevel,\n parsePlanningModeConfig,\n parseDoomConfig as parseSharedDoomConfig,\n repositoryDoomConfigPath,\n resolvePlanningPlansDirectory,\n} from '@agimon-ai/doompi-config';\n\nexport type { PlanningAgentConfig, PlanningModeConfig, PlanningThinkingLevel };\n\nexport interface DoomConfig {\n modes?: {\n planning?: PlanningModeConfig;\n };\n}\n\nconst DEFAULT_PROJECT_TRUST = 'ask' as const;\n\nexport {\n getHarnessState,\n globalDoomConfigPath,\n loadHarnessState,\n parsePlanningModeConfig,\n repositoryDoomConfigPath,\n resolvePlanningPlansDirectory,\n};\n\nexport function parseDoomConfig(content: string, filePath: string): DoomConfig {\n const config = parseSharedDoomConfig(content, filePath);\n return config.modes ? { modes: config.modes } : {};\n}\n\nexport function mergeDoomConfigs(globalConfig: DoomConfig, repositoryConfig: DoomConfig): DoomConfig {\n const merged = mergeSharedDoomConfigs(\n { ...globalConfig, projectTrust: DEFAULT_PROJECT_TRUST },\n { ...repositoryConfig, projectTrust: DEFAULT_PROJECT_TRUST },\n );\n return merged.modes ? { modes: merged.modes } : {};\n}\n\nexport function loadDoomConfig(repoRoot: string, homeDirectory?: string): DoomConfig {\n const config = loadSharedDoomConfig(repoRoot, homeDirectory);\n return config.modes ? { modes: config.modes } : {};\n}\n"],"mappings":"wQAkCA,SAAgBA,EAAgB,EAAiB,EAA8B,CAC7E,IAAM,EAASC,EAAsB,EAAS,CAAQ,EACtD,OAAO,EAAO,MAAQ,CAAE,MAAO,EAAO,KAAM,EAAI,CAAC,CACnD,CAEA,SAAgBC,EAAiB,EAA0B,EAA0C,CACnG,IAAM,EAASC,EACb,CAAE,GAAG,EAAc,aAAc,KAAsB,EACvD,CAAE,GAAG,EAAkB,aAAc,KAAsB,CAC7D,EACA,OAAO,EAAO,MAAQ,CAAE,MAAO,EAAO,KAAM,EAAI,CAAC,CACnD,CAEA,SAAgBC,EAAe,EAAkB,EAAoC,CACnF,IAAM,EAASC,EAAqB,EAAU,CAAa,EAC3D,OAAO,EAAO,MAAQ,CAAE,MAAO,EAAO,KAAM,EAAI,CAAC,CACnD"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
let e=require("@agimon-ai/doompi-config"),t=require("@agimon-ai/doompi-extension-contracts/config");const n=`planning`,r=[`modes`,n],i=`main`,a=`subagents`,o=`inherit the session model`,s=`inherit`,c=[{id:`main.model`,label:`main model`,keyPath:[...r,i,`model`],placeholder:o,detail:`Model the main agent switches to while plan mode is on.`,read:e=>e?.main?.model},{id:`main.thinking`,label:`main thinking`,keyPath:[...r,i,`thinking`],placeholder:s,detail:`Thinking level appended to the main model while planning.`,options:e.DOOM_PLANNING_THINKING_LEVELS,read:e=>e?.main?.thinking},{id:`subagents.model`,label:`subagent model`,keyPath:[...r,a,`model`],placeholder:o,detail:`Model forced onto delegated planning subagents.`,read:e=>e?.subagents?.model},{id:`subagents.thinking`,label:`subagent thinking`,keyPath:[...r,a,`thinking`],placeholder:s,detail:`Thinking level appended to the subagent model.`,options:e.DOOM_PLANNING_THINKING_LEVELS,read:e=>e?.subagents?.thinking},{id:`plansdirectory`,label:`plans directory`,keyPath:[...r,`plansDirectory`],placeholder:`~/.pi/plans`,detail:`Absolute, repo-relative, or under ~. Written plans land here.`,read:e=>e?.plansDirectory}];function l(e){return c.find(t=>t.id===e)}function u(e){return e.options?.map(e=>({id:e,label:e,action:t.CONFIG_ACTION.set}))}function d(e,t){let r=c.map(t=>{let n=t.read(e),r=u(t);return{id:t.id,label:t.label,kind:r?`enum`:`text`,keyPath:t.keyPath.join(`.`),placeholder:t.placeholder,detail:t.detail,...n?{value:n}:{},...r?{choices:r}:{}}});return[{id:n,title:`planning`,order:30,detail:`plan mode`,fields:r,...t?{notice:t,noticeLevel:`error`}:{}}]}exports.PLAN_CONFIG_SECTION_ID=n,exports.PLAN_SETTINGS=c,exports.planConfigSections=d,exports.planSettingByFieldId=l;
|
|
2
|
+
//# sourceMappingURL=planConfig.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planConfig.cjs","names":["DOOM_PLANNING_THINKING_LEVELS","CONFIG_ACTION"],"sources":["../../../src/schemas/plan/planConfig.ts"],"sourcesContent":["/**\n * Plan mode's slice of the `SPC e c` config panel.\n *\n * Plan mode reads `modes.planning` from disk on every activation, so an edit\n * here lands on the next time the mode is turned on with no restart and nothing\n * to invalidate.\n *\n * The descriptor table is the whole design: the panel renders it and the write\n * handler looks the key path back up in it, so adding a setting means adding a\n * row rather than a case.\n */\n\nimport { DOOM_PLANNING_THINKING_LEVELS } from '@agimon-ai/doompi-config';\nimport {\n CONFIG_ACTION,\n type ConfigChoice,\n type ConfigField,\n type ConfigSection,\n} from '@agimon-ai/doompi-extension-contracts/config';\nimport type { PlanningModeConfig } from './config.ts';\n\nexport const PLAN_CONFIG_SECTION_ID = 'planning';\nconst SECTION_ORDER = 30;\nconst PLANNING_PATH = ['modes', PLAN_CONFIG_SECTION_ID] as const;\nconst MAIN_KEY = 'main';\nconst SUBAGENTS_KEY = 'subagents';\n/** Both agents fall back to the session's own settings when left unset. */\nconst INHERIT_MODEL = 'inherit the session model';\nconst INHERIT_THINKING = 'inherit';\n\ninterface PlanSettingDescriptor {\n readonly id: string;\n readonly label: string;\n readonly keyPath: readonly string[];\n readonly placeholder: string;\n readonly detail: string;\n /** Present for a closed set; the panel offers these rather than free text. */\n readonly options?: readonly string[];\n readonly read: (config: PlanningModeConfig | undefined) => string | undefined;\n}\n\nexport const PLAN_SETTINGS: readonly PlanSettingDescriptor[] = [\n {\n id: 'main.model',\n label: 'main model',\n keyPath: [...PLANNING_PATH, MAIN_KEY, 'model'],\n placeholder: INHERIT_MODEL,\n detail: 'Model the main agent switches to while plan mode is on.',\n read: (config) => config?.main?.model,\n },\n {\n id: 'main.thinking',\n label: 'main thinking',\n keyPath: [...PLANNING_PATH, MAIN_KEY, 'thinking'],\n placeholder: INHERIT_THINKING,\n detail: 'Thinking level appended to the main model while planning.',\n options: DOOM_PLANNING_THINKING_LEVELS,\n read: (config) => config?.main?.thinking,\n },\n {\n id: 'subagents.model',\n label: 'subagent model',\n keyPath: [...PLANNING_PATH, SUBAGENTS_KEY, 'model'],\n placeholder: INHERIT_MODEL,\n detail: 'Model forced onto delegated planning subagents.',\n read: (config) => config?.subagents?.model,\n },\n {\n id: 'subagents.thinking',\n label: 'subagent thinking',\n keyPath: [...PLANNING_PATH, SUBAGENTS_KEY, 'thinking'],\n placeholder: INHERIT_THINKING,\n detail: 'Thinking level appended to the subagent model.',\n options: DOOM_PLANNING_THINKING_LEVELS,\n read: (config) => config?.subagents?.thinking,\n },\n {\n id: 'plansdirectory',\n label: 'plans directory',\n keyPath: [...PLANNING_PATH, 'plansDirectory'],\n placeholder: '~/.pi/plans',\n detail: 'Absolute, repo-relative, or under ~. Written plans land here.',\n read: (config) => config?.plansDirectory,\n },\n];\n\nexport function planSettingByFieldId(fieldId: string): PlanSettingDescriptor | undefined {\n return PLAN_SETTINGS.find((setting) => setting.id === fieldId);\n}\n\nfunction choicesFor(setting: PlanSettingDescriptor): ConfigChoice[] | undefined {\n // `set` rather than a bespoke action: choosing a level is the same write as\n // typing one, so it shares the handler.\n return setting.options?.map((option) => ({ id: option, label: option, action: CONFIG_ACTION.set }));\n}\n\nexport function planConfigSections(config: PlanningModeConfig | undefined, notice?: string): readonly ConfigSection[] {\n const fields: ConfigField[] = PLAN_SETTINGS.map((setting) => {\n const value = setting.read(config);\n const choices = choicesFor(setting);\n return {\n id: setting.id,\n label: setting.label,\n kind: choices ? ('enum' as const) : ('text' as const),\n keyPath: setting.keyPath.join('.'),\n placeholder: setting.placeholder,\n detail: setting.detail,\n ...(value ? { value } : {}),\n ...(choices ? { choices } : {}),\n };\n });\n return [\n {\n id: PLAN_CONFIG_SECTION_ID,\n title: 'planning',\n order: SECTION_ORDER,\n detail: 'plan mode',\n fields,\n ...(notice ? { notice, noticeLevel: 'error' as const } : {}),\n },\n ];\n}\n"],"mappings":"oGAqBA,MAAa,EAAyB,WAEhC,EAAgB,CAAC,QAAS,CAAsB,EAChD,EAAW,OACX,EAAgB,YAEhB,EAAgB,4BAChB,EAAmB,UAaZ,EAAkD,CAC7D,CACE,GAAI,aACJ,MAAO,aACP,QAAS,CAAC,GAAG,EAAe,EAAU,OAAO,EAC7C,YAAa,EACb,OAAQ,0DACR,KAAO,GAAW,GAAQ,MAAM,KAClC,EACA,CACE,GAAI,gBACJ,MAAO,gBACP,QAAS,CAAC,GAAG,EAAe,EAAU,UAAU,EAChD,YAAa,EACb,OAAQ,4DACR,QAASA,EAAAA,8BACT,KAAO,GAAW,GAAQ,MAAM,QAClC,EACA,CACE,GAAI,kBACJ,MAAO,iBACP,QAAS,CAAC,GAAG,EAAe,EAAe,OAAO,EAClD,YAAa,EACb,OAAQ,kDACR,KAAO,GAAW,GAAQ,WAAW,KACvC,EACA,CACE,GAAI,qBACJ,MAAO,oBACP,QAAS,CAAC,GAAG,EAAe,EAAe,UAAU,EACrD,YAAa,EACb,OAAQ,iDACR,QAASA,EAAAA,8BACT,KAAO,GAAW,GAAQ,WAAW,QACvC,EACA,CACE,GAAI,iBACJ,MAAO,kBACP,QAAS,CAAC,GAAG,EAAe,gBAAgB,EAC5C,YAAa,cACb,OAAQ,gEACR,KAAO,GAAW,GAAQ,cAC5B,CACF,EAEA,SAAgB,EAAqB,EAAoD,CACvF,OAAO,EAAc,KAAM,GAAY,EAAQ,KAAO,CAAO,CAC/D,CAEA,SAAS,EAAW,EAA4D,CAG9E,OAAO,EAAQ,SAAS,IAAK,IAAY,CAAE,GAAI,EAAQ,MAAO,EAAQ,OAAQC,EAAAA,cAAc,GAAI,EAAE,CACpG,CAEA,SAAgB,EAAmB,EAAwC,EAA2C,CACpH,IAAM,EAAwB,EAAc,IAAK,GAAY,CAC3D,IAAM,EAAQ,EAAQ,KAAK,CAAM,EAC3B,EAAU,EAAW,CAAO,EAClC,MAAO,CACL,GAAI,EAAQ,GACZ,MAAO,EAAQ,MACf,KAAM,EAAW,OAAoB,OACrC,QAAS,EAAQ,QAAQ,KAAK,GAAG,EACjC,YAAa,EAAQ,YACrB,OAAQ,EAAQ,OAChB,GAAI,EAAQ,CAAE,OAAM,EAAI,CAAC,EACzB,GAAI,EAAU,CAAE,SAAQ,EAAI,CAAC,CAC/B,CACF,CAAC,EACD,MAAO,CACL,CACE,GAAI,EACJ,MAAO,WACP,MAAO,GACP,OAAQ,YACR,SACA,GAAI,EAAS,CAAE,SAAQ,YAAa,OAAiB,EAAI,CAAC,CAC5D,CACF,CACF"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { PlanningModeConfig } from "./config.cjs";
|
|
2
|
+
import { ConfigSection } from "@agimon-ai/doompi-extension-contracts/config";
|
|
3
|
+
//#region src/schemas/plan/planConfig.d.ts
|
|
4
|
+
declare const PLAN_CONFIG_SECTION_ID = "planning";
|
|
5
|
+
interface PlanSettingDescriptor {
|
|
6
|
+
readonly id: string;
|
|
7
|
+
readonly label: string;
|
|
8
|
+
readonly keyPath: readonly string[];
|
|
9
|
+
readonly placeholder: string;
|
|
10
|
+
readonly detail: string;
|
|
11
|
+
/** Present for a closed set; the panel offers these rather than free text. */
|
|
12
|
+
readonly options?: readonly string[];
|
|
13
|
+
readonly read: (config: PlanningModeConfig | undefined) => string | undefined;
|
|
14
|
+
}
|
|
15
|
+
declare const PLAN_SETTINGS: readonly PlanSettingDescriptor[];
|
|
16
|
+
declare function planSettingByFieldId(fieldId: string): PlanSettingDescriptor | undefined;
|
|
17
|
+
declare function planConfigSections(config: PlanningModeConfig | undefined, notice?: string): readonly ConfigSection[];
|
|
18
|
+
//#endregion
|
|
19
|
+
export { PLAN_CONFIG_SECTION_ID, PLAN_SETTINGS, planConfigSections, planSettingByFieldId };
|
|
20
|
+
//# sourceMappingURL=planConfig.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planConfig.d.cts","names":[],"sources":["../../../src/schemas/plan/planConfig.ts"],"mappings":";;;cAqBa;UASH;WACC;WACA;WACA;WACA;WACA;;WAEA;WACA,OAAO,QAAQ;;cAGb,wBAAwB;iBA6CrB,qBAAqB,kBAAkB;iBAUvC,mBAAmB,QAAQ,gCAAgC,2BAA2B"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { PlanningModeConfig } from "./config.mjs";
|
|
2
|
+
import { ConfigSection } from "@agimon-ai/doompi-extension-contracts/config";
|
|
3
|
+
//#region src/schemas/plan/planConfig.d.ts
|
|
4
|
+
declare const PLAN_CONFIG_SECTION_ID = "planning";
|
|
5
|
+
interface PlanSettingDescriptor {
|
|
6
|
+
readonly id: string;
|
|
7
|
+
readonly label: string;
|
|
8
|
+
readonly keyPath: readonly string[];
|
|
9
|
+
readonly placeholder: string;
|
|
10
|
+
readonly detail: string;
|
|
11
|
+
/** Present for a closed set; the panel offers these rather than free text. */
|
|
12
|
+
readonly options?: readonly string[];
|
|
13
|
+
readonly read: (config: PlanningModeConfig | undefined) => string | undefined;
|
|
14
|
+
}
|
|
15
|
+
declare const PLAN_SETTINGS: readonly PlanSettingDescriptor[];
|
|
16
|
+
declare function planSettingByFieldId(fieldId: string): PlanSettingDescriptor | undefined;
|
|
17
|
+
declare function planConfigSections(config: PlanningModeConfig | undefined, notice?: string): readonly ConfigSection[];
|
|
18
|
+
//#endregion
|
|
19
|
+
export { PLAN_CONFIG_SECTION_ID, PLAN_SETTINGS, planConfigSections, planSettingByFieldId };
|
|
20
|
+
//# sourceMappingURL=planConfig.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planConfig.d.mts","names":[],"sources":["../../../src/schemas/plan/planConfig.ts"],"mappings":";;;cAqBa;UASH;WACC;WACA;WACA;WACA;WACA;;WAEA;WACA,OAAO,QAAQ;;cAGb,wBAAwB;iBA6CrB,qBAAqB,kBAAkB;iBAUvC,mBAAmB,QAAQ,gCAAgC,2BAA2B"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{DOOM_PLANNING_THINKING_LEVELS as e}from"@agimon-ai/doompi-config";import{CONFIG_ACTION as t}from"@agimon-ai/doompi-extension-contracts/config";const n=`planning`,r=[`modes`,n],i=`main`,a=`subagents`,o=`inherit the session model`,s=`inherit`,c=[{id:`main.model`,label:`main model`,keyPath:[...r,i,`model`],placeholder:o,detail:`Model the main agent switches to while plan mode is on.`,read:e=>e?.main?.model},{id:`main.thinking`,label:`main thinking`,keyPath:[...r,i,`thinking`],placeholder:s,detail:`Thinking level appended to the main model while planning.`,options:e,read:e=>e?.main?.thinking},{id:`subagents.model`,label:`subagent model`,keyPath:[...r,a,`model`],placeholder:o,detail:`Model forced onto delegated planning subagents.`,read:e=>e?.subagents?.model},{id:`subagents.thinking`,label:`subagent thinking`,keyPath:[...r,a,`thinking`],placeholder:s,detail:`Thinking level appended to the subagent model.`,options:e,read:e=>e?.subagents?.thinking},{id:`plansdirectory`,label:`plans directory`,keyPath:[...r,`plansDirectory`],placeholder:`~/.pi/plans`,detail:`Absolute, repo-relative, or under ~. Written plans land here.`,read:e=>e?.plansDirectory}];function l(e){return c.find(t=>t.id===e)}function u(e){return e.options?.map(e=>({id:e,label:e,action:t.set}))}function d(e,t){let r=c.map(t=>{let n=t.read(e),r=u(t);return{id:t.id,label:t.label,kind:r?`enum`:`text`,keyPath:t.keyPath.join(`.`),placeholder:t.placeholder,detail:t.detail,...n?{value:n}:{},...r?{choices:r}:{}}});return[{id:n,title:`planning`,order:30,detail:`plan mode`,fields:r,...t?{notice:t,noticeLevel:`error`}:{}}]}export{n as PLAN_CONFIG_SECTION_ID,c as PLAN_SETTINGS,d as planConfigSections,l as planSettingByFieldId};
|
|
2
|
+
//# sourceMappingURL=planConfig.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planConfig.mjs","names":[],"sources":["../../../src/schemas/plan/planConfig.ts"],"sourcesContent":["/**\n * Plan mode's slice of the `SPC e c` config panel.\n *\n * Plan mode reads `modes.planning` from disk on every activation, so an edit\n * here lands on the next time the mode is turned on with no restart and nothing\n * to invalidate.\n *\n * The descriptor table is the whole design: the panel renders it and the write\n * handler looks the key path back up in it, so adding a setting means adding a\n * row rather than a case.\n */\n\nimport { DOOM_PLANNING_THINKING_LEVELS } from '@agimon-ai/doompi-config';\nimport {\n CONFIG_ACTION,\n type ConfigChoice,\n type ConfigField,\n type ConfigSection,\n} from '@agimon-ai/doompi-extension-contracts/config';\nimport type { PlanningModeConfig } from './config.ts';\n\nexport const PLAN_CONFIG_SECTION_ID = 'planning';\nconst SECTION_ORDER = 30;\nconst PLANNING_PATH = ['modes', PLAN_CONFIG_SECTION_ID] as const;\nconst MAIN_KEY = 'main';\nconst SUBAGENTS_KEY = 'subagents';\n/** Both agents fall back to the session's own settings when left unset. */\nconst INHERIT_MODEL = 'inherit the session model';\nconst INHERIT_THINKING = 'inherit';\n\ninterface PlanSettingDescriptor {\n readonly id: string;\n readonly label: string;\n readonly keyPath: readonly string[];\n readonly placeholder: string;\n readonly detail: string;\n /** Present for a closed set; the panel offers these rather than free text. */\n readonly options?: readonly string[];\n readonly read: (config: PlanningModeConfig | undefined) => string | undefined;\n}\n\nexport const PLAN_SETTINGS: readonly PlanSettingDescriptor[] = [\n {\n id: 'main.model',\n label: 'main model',\n keyPath: [...PLANNING_PATH, MAIN_KEY, 'model'],\n placeholder: INHERIT_MODEL,\n detail: 'Model the main agent switches to while plan mode is on.',\n read: (config) => config?.main?.model,\n },\n {\n id: 'main.thinking',\n label: 'main thinking',\n keyPath: [...PLANNING_PATH, MAIN_KEY, 'thinking'],\n placeholder: INHERIT_THINKING,\n detail: 'Thinking level appended to the main model while planning.',\n options: DOOM_PLANNING_THINKING_LEVELS,\n read: (config) => config?.main?.thinking,\n },\n {\n id: 'subagents.model',\n label: 'subagent model',\n keyPath: [...PLANNING_PATH, SUBAGENTS_KEY, 'model'],\n placeholder: INHERIT_MODEL,\n detail: 'Model forced onto delegated planning subagents.',\n read: (config) => config?.subagents?.model,\n },\n {\n id: 'subagents.thinking',\n label: 'subagent thinking',\n keyPath: [...PLANNING_PATH, SUBAGENTS_KEY, 'thinking'],\n placeholder: INHERIT_THINKING,\n detail: 'Thinking level appended to the subagent model.',\n options: DOOM_PLANNING_THINKING_LEVELS,\n read: (config) => config?.subagents?.thinking,\n },\n {\n id: 'plansdirectory',\n label: 'plans directory',\n keyPath: [...PLANNING_PATH, 'plansDirectory'],\n placeholder: '~/.pi/plans',\n detail: 'Absolute, repo-relative, or under ~. Written plans land here.',\n read: (config) => config?.plansDirectory,\n },\n];\n\nexport function planSettingByFieldId(fieldId: string): PlanSettingDescriptor | undefined {\n return PLAN_SETTINGS.find((setting) => setting.id === fieldId);\n}\n\nfunction choicesFor(setting: PlanSettingDescriptor): ConfigChoice[] | undefined {\n // `set` rather than a bespoke action: choosing a level is the same write as\n // typing one, so it shares the handler.\n return setting.options?.map((option) => ({ id: option, label: option, action: CONFIG_ACTION.set }));\n}\n\nexport function planConfigSections(config: PlanningModeConfig | undefined, notice?: string): readonly ConfigSection[] {\n const fields: ConfigField[] = PLAN_SETTINGS.map((setting) => {\n const value = setting.read(config);\n const choices = choicesFor(setting);\n return {\n id: setting.id,\n label: setting.label,\n kind: choices ? ('enum' as const) : ('text' as const),\n keyPath: setting.keyPath.join('.'),\n placeholder: setting.placeholder,\n detail: setting.detail,\n ...(value ? { value } : {}),\n ...(choices ? { choices } : {}),\n };\n });\n return [\n {\n id: PLAN_CONFIG_SECTION_ID,\n title: 'planning',\n order: SECTION_ORDER,\n detail: 'plan mode',\n fields,\n ...(notice ? { notice, noticeLevel: 'error' as const } : {}),\n },\n ];\n}\n"],"mappings":"sJAqBA,MAAa,EAAyB,WAEhC,EAAgB,CAAC,QAAS,CAAsB,EAChD,EAAW,OACX,EAAgB,YAEhB,EAAgB,4BAChB,EAAmB,UAaZ,EAAkD,CAC7D,CACE,GAAI,aACJ,MAAO,aACP,QAAS,CAAC,GAAG,EAAe,EAAU,OAAO,EAC7C,YAAa,EACb,OAAQ,0DACR,KAAO,GAAW,GAAQ,MAAM,KAClC,EACA,CACE,GAAI,gBACJ,MAAO,gBACP,QAAS,CAAC,GAAG,EAAe,EAAU,UAAU,EAChD,YAAa,EACb,OAAQ,4DACR,QAAS,EACT,KAAO,GAAW,GAAQ,MAAM,QAClC,EACA,CACE,GAAI,kBACJ,MAAO,iBACP,QAAS,CAAC,GAAG,EAAe,EAAe,OAAO,EAClD,YAAa,EACb,OAAQ,kDACR,KAAO,GAAW,GAAQ,WAAW,KACvC,EACA,CACE,GAAI,qBACJ,MAAO,oBACP,QAAS,CAAC,GAAG,EAAe,EAAe,UAAU,EACrD,YAAa,EACb,OAAQ,iDACR,QAAS,EACT,KAAO,GAAW,GAAQ,WAAW,QACvC,EACA,CACE,GAAI,iBACJ,MAAO,kBACP,QAAS,CAAC,GAAG,EAAe,gBAAgB,EAC5C,YAAa,cACb,OAAQ,gEACR,KAAO,GAAW,GAAQ,cAC5B,CACF,EAEA,SAAgB,EAAqB,EAAoD,CACvF,OAAO,EAAc,KAAM,GAAY,EAAQ,KAAO,CAAO,CAC/D,CAEA,SAAS,EAAW,EAA4D,CAG9E,OAAO,EAAQ,SAAS,IAAK,IAAY,CAAE,GAAI,EAAQ,MAAO,EAAQ,OAAQ,EAAc,GAAI,EAAE,CACpG,CAEA,SAAgB,EAAmB,EAAwC,EAA2C,CACpH,IAAM,EAAwB,EAAc,IAAK,GAAY,CAC3D,IAAM,EAAQ,EAAQ,KAAK,CAAM,EAC3B,EAAU,EAAW,CAAO,EAClC,MAAO,CACL,GAAI,EAAQ,GACZ,MAAO,EAAQ,MACf,KAAM,EAAW,OAAoB,OACrC,QAAS,EAAQ,QAAQ,KAAK,GAAG,EACjC,YAAa,EAAQ,YACrB,OAAQ,EAAQ,OAChB,GAAI,EAAQ,CAAE,OAAM,EAAI,CAAC,EACzB,GAAI,EAAU,CAAE,SAAQ,EAAI,CAAC,CAC/B,CACF,CAAC,EACD,MAAO,CACL,CACE,GAAI,EACJ,MAAO,WACP,MAAO,GACP,OAAQ,YACR,SACA,GAAI,EAAS,CAAE,SAAQ,YAAa,OAAiB,EAAI,CAAC,CAC5D,CACF,CACF"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
let e=require("node:buffer");const t=`@agimon-ai/doompi-plan`,n=`claude`,r=`fable`,i=`claude/fable-plan-v1`,a=[/(?:api[_-]?key|access[_-]?token|client[_-]?secret|password|private[_-]?key|authorization|bearer)\s*[:=]/iu,/-----BEGIN [A-Z ]*PRIVATE KEY-----/u,/\bsk-[A-Za-z0-9_-]{16,}\b/u,/\bgh[pousr]_[A-Za-z0-9_]{16,}\b/u];function o(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function s(e){for(let t of e){let e=t.codePointAt(0);if(e!==void 0&&(e<=31||e===127))return!0}return!1}function c(e){return a.some(t=>t.test(e))}function l(t,n,r=!0){if(typeof t!=`string`)throw Error(`${n} must be a string.`);let i=t.trim();if(!i&&r)throw Error(`${n} must not be empty.`);if(e.Buffer.byteLength(i,`utf8`)>4096||s(i))throw Error(`${n} exceeds the bounded Fable text limit or contains control characters.`);if(c(i))throw Error(`${n} appears to contain a credential.`);return i}function u(e,t,n=!0){if(!Array.isArray(e))throw Error(`${t} must be an array.`);if(e.length>24)throw Error(`${t} exceeds the bounded item limit.`);let r=e.map((e,n)=>l(e,`${t}[${n}]`));if(n&&r.length===0)throw Error(`${t} must contain at least one item.`);return r}function d(e,t){if(typeof e!=`string`)throw Error(`${t} must be a string.`);let n=e.trim();if(!n||n.length>512||s(n))throw Error(`${t} is not a safe source path.`);if(c(n))throw Error(`${t} appears to contain a credential.`);return n}function f(e){if(!Array.isArray(e))throw Error(`verifiedFindings must be an array.`);if(e.length>24)throw Error(`verifiedFindings exceeds the bounded item limit.`);return e.map((e,t)=>{if(!o(e))throw Error(`verifiedFindings[${t}] must be an object.`);if(Object.keys(e).some(e=>e!==`path`&&e!==`finding`))throw Error(`verifiedFindings[${t}] contains an unsupported field.`);return{path:d(e.path,`verifiedFindings[${t}].path`),finding:l(e.finding,`verifiedFindings[${t}].finding`)}})}function p(e,t,n){let r=new Set(t),i=Object.keys(e).find(e=>!r.has(e));if(i)throw Error(`${n} contains unsupported field '${i}'.`)}function m(t){if(!o(t))throw Error(`Fable packet must be an object.`);p(t,[`goal`,`constraints`,`decisions`,`verifiedFindings`,`inferredFindings`,`unresolvedQuestions`,`currentPlan`],`Fable packet`);let n={goal:u(t.goal,`goal`),constraints:u(t.constraints,`constraints`,!1),decisions:u(t.decisions,`decisions`,!1),verifiedFindings:f(t.verifiedFindings),inferredFindings:u(t.inferredFindings,`inferredFindings`,!1),unresolvedQuestions:u(t.unresolvedQuestions,`unresolvedQuestions`,!1),...t.currentPlan===void 0?{}:{currentPlan:l(t.currentPlan,`currentPlan`,!1)}};if(e.Buffer.byteLength(JSON.stringify(n),`utf8`)>32768)throw Error(`Fable packet exceeds the bounded packet size.`);return n}function h(e){return c([e.draft,e.review].filter(e=>e!==void 0).join(`
|
|
2
|
+
`))?{operationId:e.operationId,status:`failed`,stage:`failed`,durationMs:e.durationMs,errorCode:`unsafe_output`}:e}function g(e,t){return{operationId:e,status:`timed_out`,stage:`interrupted`,durationMs:Math.max(0,Date.now()-t),errorCode:`timeout`}}function _(e){let a=e.newOperationId??(()=>crypto.randomUUID()),o,s=(t=`Fable operation cancelled.`)=>{let n=o;if(n){if(!n.cancelSent){n.cancelSent=!0;try{e.broker?.cancel(n.operationId,t)}catch(t){e.onError?.(t)}}n.controller.abort(Error(t))}};return{run:async(c,l)=>{if(o)throw Error(`A Fable operation is already active for this session.`);if(!e.isAuthorized())throw Error(`The Fable capability profile is not authorized.`);let u=m(c),d=`fable-${a()}`,f=Date.now(),p=new AbortController;o={operationId:d,controller:p,cancelSent:!1},e.onStage?.(`draft`);let _=()=>p.abort(l?.reason);l&&(l.addEventListener(`abort`,_,{once:!0}),l.aborted&&_());let v={requester:t,operationId:d,runtime:n,model:r,profile:i,packet:u},y,b=!1;try{if(!e.broker)return g(d,f);let t=e.broker.start(v,p.signal),n=new Promise(e=>{p.signal.addEventListener(`abort`,()=>{b||e({operationId:d,status:`cancelled`,stage:`cancelled`,durationMs:Math.max(0,Date.now()-f),errorCode:`cancelled`})},{once:!0})}),r=e.timeoutMs===void 0?void 0:new Promise(t=>{y=setTimeout(()=>{b=!0,s(`Fable operation timed out.`),t(g(d,f))},e.timeoutMs)}),i=h(r===void 0?await Promise.race([t,n]):await Promise.race([t,r,n]));return e.onStage?.(i.status===`completed`?`completed`:i.status===`cancelled`?`cancelled`:i.stage),i}catch(t){e.onError?.(t);let n={operationId:d,status:`failed`,stage:`failed`,durationMs:Math.max(0,Date.now()-f),errorCode:`unavailable`};return e.onStage?.(`failed`),n}finally{y&&clearTimeout(y),l&&l.removeEventListener(`abort`,_),o=void 0}},cancel:s,isActive:()=>o!==void 0}}exports.FABLE_PLAN_MODEL=r,exports.FABLE_PLAN_PROFILE=i,exports.FABLE_PLAN_REQUESTER=t,exports.FABLE_PLAN_RUNTIME=n,exports.FABLE_PROVIDER_SOURCE=`@agimon-ai/doompi-team`,exports.MAX_FABLE_ARRAY_ITEMS=24,exports.MAX_FABLE_PACKET_BYTES=32768,exports.MAX_FABLE_TEXT_BYTES=4096,exports.containsSuspectedCredential=c,exports.createFablePlanFlow=_,exports.sanitizeFablePacket=m;
|
|
3
|
+
//# sourceMappingURL=fableFlow.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fableFlow.cjs","names":["Buffer"],"sources":["../../src/services/fableFlow.ts"],"sourcesContent":["import { Buffer } from 'node:buffer';\n\nexport const FABLE_PROVIDER_SOURCE = '@agimon-ai/doompi-team';\nexport const FABLE_PLAN_REQUESTER = '@agimon-ai/doompi-plan';\nexport const FABLE_PLAN_RUNTIME = 'claude';\nexport const FABLE_PLAN_MODEL = 'fable';\nexport const FABLE_PLAN_PROFILE = 'claude/fable-plan-v1';\nexport const MAX_FABLE_PACKET_BYTES = 32 * 1024;\nexport const MAX_FABLE_TEXT_BYTES = 4 * 1024;\nexport const MAX_FABLE_ARRAY_ITEMS = 24;\n\nconst SECRET_PATTERNS = [\n /(?:api[_-]?key|access[_-]?token|client[_-]?secret|password|private[_-]?key|authorization|bearer)\\s*[:=]/iu,\n /-----BEGIN [A-Z ]*PRIVATE KEY-----/u,\n /\\bsk-[A-Za-z0-9_-]{16,}\\b/u,\n /\\bgh[pousr]_[A-Za-z0-9_]{16,}\\b/u,\n];\nconst CONTROL_CHARACTER_MAX = 31;\nconst DELETE_CHARACTER = 127;\nconst MAX_SOURCE_PATH_LENGTH = 512;\n\nexport interface FablePlanFinding {\n path: string;\n finding: string;\n}\n\nexport interface FablePlanPacket {\n goal: string[];\n constraints: string[];\n decisions: string[];\n verifiedFindings: FablePlanFinding[];\n inferredFindings: string[];\n unresolvedQuestions: string[];\n currentPlan?: string;\n}\n\nexport type FablePlanStatus = 'completed' | 'failed' | 'timed_out' | 'cancelled' | 'interrupted';\nexport type FablePlanStage = 'draft' | 'review' | 'completed' | 'failed' | 'cancelled' | 'interrupted';\n\nexport interface FablePlanResult {\n operationId: string;\n status: FablePlanStatus;\n stage: FablePlanStage;\n draft?: string;\n review?: string;\n draftRunId?: string;\n reviewRunId?: string;\n durationMs: number;\n errorCode?: string;\n}\n\nexport interface FablePlanRequest {\n requester: typeof FABLE_PLAN_REQUESTER;\n operationId: string;\n runtime: typeof FABLE_PLAN_RUNTIME;\n model: typeof FABLE_PLAN_MODEL;\n profile: typeof FABLE_PLAN_PROFILE;\n packet: FablePlanPacket;\n}\n\nexport interface FablePlanBroker {\n start(request: FablePlanRequest, signal: AbortSignal): Promise<FablePlanResult>;\n cancel(operationId: string, reason: string): void;\n}\n\nexport interface FableFlowOptions {\n broker?: FablePlanBroker;\n isAuthorized: () => boolean;\n /** Supplies operation ids. Injected so a test can pin them. */\n newOperationId?: () => string;\n timeoutMs?: number;\n onStage?: (stage: FableStage) => void;\n onError?: (error: unknown) => void;\n}\n\nexport type FableStage = 'idle' | 'draft' | 'review' | 'completed' | 'failed' | 'cancelled' | 'interrupted';\n\nexport interface FablePlanFlow {\n run(value: unknown, signal?: AbortSignal): Promise<FablePlanResult>;\n cancel(reason?: string): void;\n isActive(): boolean;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction hasControlCharacter(value: string): boolean {\n for (const character of value) {\n const code = character.codePointAt(0);\n if (code !== undefined && (code <= CONTROL_CHARACTER_MAX || code === DELETE_CHARACTER)) return true;\n }\n return false;\n}\n\nexport function containsSuspectedCredential(value: string): boolean {\n return SECRET_PATTERNS.some((pattern) => pattern.test(value));\n}\n\nfunction boundedText(value: unknown, field: string, required = true): string {\n if (typeof value !== 'string') throw new Error(`${field} must be a string.`);\n const text = value.trim();\n if (!text && required) throw new Error(`${field} must not be empty.`);\n if (Buffer.byteLength(text, 'utf8') > MAX_FABLE_TEXT_BYTES || hasControlCharacter(text)) {\n throw new Error(`${field} exceeds the bounded Fable text limit or contains control characters.`);\n }\n if (containsSuspectedCredential(text)) throw new Error(`${field} appears to contain a credential.`);\n return text;\n}\n\nfunction boundedList(value: unknown, field: string, required = true): string[] {\n if (!Array.isArray(value)) throw new Error(`${field} must be an array.`);\n if (value.length > MAX_FABLE_ARRAY_ITEMS) throw new Error(`${field} exceeds the bounded item limit.`);\n const items = value.map((item, index) => boundedText(item, `${field}[${index}]`));\n if (required && items.length === 0) throw new Error(`${field} must contain at least one item.`);\n return items;\n}\n\nfunction boundedPath(value: unknown, field: string): string {\n if (typeof value !== 'string') throw new Error(`${field} must be a string.`);\n const sourcePath = value.trim();\n if (!sourcePath || sourcePath.length > MAX_SOURCE_PATH_LENGTH || hasControlCharacter(sourcePath)) {\n throw new Error(`${field} is not a safe source path.`);\n }\n if (containsSuspectedCredential(sourcePath)) throw new Error(`${field} appears to contain a credential.`);\n return sourcePath;\n}\n\nfunction boundedFindings(value: unknown): FablePlanFinding[] {\n if (!Array.isArray(value)) throw new Error('verifiedFindings must be an array.');\n if (value.length > MAX_FABLE_ARRAY_ITEMS) throw new Error('verifiedFindings exceeds the bounded item limit.');\n return value.map((item, index) => {\n if (!isRecord(item)) throw new Error(`verifiedFindings[${index}] must be an object.`);\n const keys = Object.keys(item);\n if (keys.some((key) => key !== 'path' && key !== 'finding')) {\n throw new Error(`verifiedFindings[${index}] contains an unsupported field.`);\n }\n return {\n path: boundedPath(item.path, `verifiedFindings[${index}].path`),\n finding: boundedText(item.finding, `verifiedFindings[${index}].finding`),\n };\n });\n}\n\nfunction assertAllowedKeys(value: Record<string, unknown>, keys: readonly string[], field: string): void {\n const allowed = new Set(keys);\n const unexpected = Object.keys(value).find((key) => !allowed.has(key));\n if (unexpected) throw new Error(`${field} contains unsupported field '${unexpected}'.`);\n}\n\nexport function sanitizeFablePacket(value: unknown): FablePlanPacket {\n if (!isRecord(value)) throw new Error('Fable packet must be an object.');\n assertAllowedKeys(\n value,\n ['goal', 'constraints', 'decisions', 'verifiedFindings', 'inferredFindings', 'unresolvedQuestions', 'currentPlan'],\n 'Fable packet',\n );\n const packet: FablePlanPacket = {\n goal: boundedList(value.goal, 'goal'),\n constraints: boundedList(value.constraints, 'constraints', false),\n decisions: boundedList(value.decisions, 'decisions', false),\n verifiedFindings: boundedFindings(value.verifiedFindings),\n inferredFindings: boundedList(value.inferredFindings, 'inferredFindings', false),\n unresolvedQuestions: boundedList(value.unresolvedQuestions, 'unresolvedQuestions', false),\n ...(value.currentPlan === undefined ? {} : { currentPlan: boundedText(value.currentPlan, 'currentPlan', false) }),\n };\n if (Buffer.byteLength(JSON.stringify(packet), 'utf8') > MAX_FABLE_PACKET_BYTES) {\n throw new Error('Fable packet exceeds the bounded packet size.');\n }\n return packet;\n}\n\nfunction safeResult(result: FablePlanResult): FablePlanResult {\n const output = [result.draft, result.review].filter((value): value is string => value !== undefined).join('\\n');\n if (containsSuspectedCredential(output)) {\n return {\n operationId: result.operationId,\n status: 'failed',\n stage: 'failed',\n durationMs: result.durationMs,\n errorCode: 'unsafe_output',\n };\n }\n return result;\n}\n\nfunction timedOutResult(operationId: string, startedAt: number): FablePlanResult {\n return {\n operationId,\n status: 'timed_out',\n stage: 'interrupted',\n durationMs: Math.max(0, Date.now() - startedAt),\n errorCode: 'timeout',\n };\n}\n\nexport function createFablePlanFlow(options: FableFlowOptions): FablePlanFlow {\n const newOperationId = options.newOperationId ?? (() => crypto.randomUUID());\n let active:\n | {\n operationId: string;\n controller: AbortController;\n cancelSent: boolean;\n }\n | undefined;\n\n const cancel = (reason = 'Fable operation cancelled.'): void => {\n const current = active;\n if (!current) return;\n if (!current.cancelSent) {\n current.cancelSent = true;\n try {\n options.broker?.cancel(current.operationId, reason);\n } catch (error) {\n options.onError?.(error);\n }\n }\n current.controller.abort(new Error(reason));\n };\n\n const run = async (value: unknown, signal?: AbortSignal): Promise<FablePlanResult> => {\n if (active) throw new Error('A Fable operation is already active for this session.');\n if (!options.isAuthorized()) throw new Error('The Fable capability profile is not authorized.');\n const packet = sanitizeFablePacket(value);\n const operationId = `fable-${newOperationId()}`;\n const startedAt = Date.now();\n const controller = new AbortController();\n active = { operationId, controller, cancelSent: false };\n options.onStage?.('draft');\n\n const parentAbort = (): void => controller.abort(signal?.reason);\n if (signal) {\n signal.addEventListener('abort', parentAbort, { once: true });\n if (signal.aborted) parentAbort();\n }\n\n const brokerRequest: FablePlanRequest = {\n requester: FABLE_PLAN_REQUESTER,\n operationId,\n runtime: FABLE_PLAN_RUNTIME,\n model: FABLE_PLAN_MODEL,\n profile: FABLE_PLAN_PROFILE,\n packet,\n };\n let timeout: ReturnType<typeof setTimeout> | undefined;\n let timeoutTriggered = false;\n try {\n if (!options.broker) return timedOutResult(operationId, startedAt);\n const brokerResult = options.broker.start(brokerRequest, controller.signal);\n const cancelledResult = new Promise<FablePlanResult>((resolve) => {\n const onAbort = (): void => {\n if (timeoutTriggered) return;\n resolve({\n operationId,\n status: 'cancelled',\n stage: 'cancelled',\n durationMs: Math.max(0, Date.now() - startedAt),\n errorCode: 'cancelled',\n });\n };\n controller.signal.addEventListener('abort', onAbort, { once: true });\n });\n const timeoutResult =\n options.timeoutMs === undefined\n ? undefined\n : new Promise<FablePlanResult>((resolve) => {\n timeout = setTimeout(() => {\n timeoutTriggered = true;\n cancel('Fable operation timed out.');\n resolve(timedOutResult(operationId, startedAt));\n }, options.timeoutMs);\n });\n const result =\n timeoutResult === undefined\n ? await Promise.race([brokerResult, cancelledResult])\n : await Promise.race([brokerResult, timeoutResult, cancelledResult]);\n const safe = safeResult(result);\n options.onStage?.(\n safe.status === 'completed' ? 'completed' : safe.status === 'cancelled' ? 'cancelled' : safe.stage,\n );\n return safe;\n } catch (error) {\n options.onError?.(error);\n const failure: FablePlanResult = {\n operationId,\n status: 'failed',\n stage: 'failed',\n durationMs: Math.max(0, Date.now() - startedAt),\n errorCode: 'unavailable',\n };\n options.onStage?.('failed');\n return failure;\n } finally {\n if (timeout) clearTimeout(timeout);\n if (signal) signal.removeEventListener('abort', parentAbort);\n active = undefined;\n }\n };\n\n return {\n run,\n cancel,\n isActive: () => active !== undefined,\n };\n}\n"],"mappings":"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"}
|