@zibby/core 0.5.6 → 0.5.7
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/index.js +53 -53
- package/dist/models.js +1 -1
- package/dist/package.json +1 -1
- package/dist/register-built-in-strategies.js +37 -37
- package/dist/state-utils.js +1 -1
- package/dist/strategies/assistant-strategy.js +9 -9
- package/dist/strategies/claude-strategy.js +2 -2
- package/dist/strategies/codex-strategy.js +3 -3
- package/dist/strategies/cursor-strategy.js +29 -29
- package/dist/strategies/gemini-strategy.js +16 -16
- package/dist/strategies/index.js +45 -45
- package/dist/strategies/utils/cursor-output-formatter.js +4 -4
- package/dist/strategies/utils/openai-proxy-formatter.js +3 -3
- package/dist/strategies/utils/prompt-builder.js +6 -6
- package/dist/strategies/utils/structured-output-formatter.js +4 -4
- package/dist/strategies/utils/zod-json-schema.js +1 -0
- package/package.json +1 -1
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import{zodToJsonSchema as s}from"zod-to-json-schema";var
|
|
1
|
+
import{z as u}from"zod";import{zodToJsonSchema as s}from"zod-to-json-schema";function p(n){if(!n)return null;if(typeof u?.toJSONSchema=="function")try{return u.toJSONSchema(n)}catch{}try{return s(n,{target:"openApi3"})}catch{return null}}var o=class{static generateFileOutputInstructions(t,r){let e;typeof t?.parse=="function"?e=p(t):e=t;let i=this._buildExample(e);return`
|
|
2
2
|
\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550
|
|
3
3
|
\u{1F6A8} MANDATORY: WRITE RESULT TO FILE \u{1F6A8}
|
|
4
4
|
\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550
|
|
5
5
|
You MUST write your final result as pure JSON to this EXACT file path:
|
|
6
6
|
|
|
7
|
-
${
|
|
7
|
+
${r}
|
|
8
8
|
|
|
9
9
|
Use your file writing tool (WriteFile or ApplyPatch) to create this file.
|
|
10
10
|
DO NOT just output JSON to stdout. The file MUST exist when you finish.
|
|
11
11
|
DO NOT skip this step. The workflow WILL FAIL if the file is missing.
|
|
12
12
|
|
|
13
13
|
Required JSON structure:
|
|
14
|
-
${JSON.stringify(
|
|
14
|
+
${JSON.stringify(i,null,2)}
|
|
15
15
|
|
|
16
16
|
JSON types (strict \u2014 validators reject wrong types):
|
|
17
17
|
- Use bare JSON numbers for numeric fields (e.g. 3000). Do NOT quote them as strings (wrong: "3000").
|
|
18
18
|
- Use true/false without quotes for booleans.
|
|
19
19
|
- Use unquoted null where a field may be null.
|
|
20
20
|
|
|
21
|
-
Rules: valid JSON only, no markdown wrapping, no extra text in the file.`}static _buildExample(
|
|
21
|
+
Rules: valid JSON only, no markdown wrapping, no extra text in the file.`}static _buildExample(t){if(!t)return{};let r=t.type;if(r==="object"&&t.properties){let e={};for(let[i,f]of Object.entries(t.properties))e[i]=this._buildExample(f);return e}if(r==="array"&&t.items)return[this._buildExample(t.items)];if(t.enum&&Array.isArray(t.enum)&&t.enum.length>0)return`<${t.enum.join("|")}>`;if(r==="string")return"<string>";if(r==="number"||r==="integer")return 0;if(r==="boolean")return!1;if(t.description)return`<${t.description}>`;if(t.nullable||t.oneOf||t.anyOf){let e=t.oneOf?.find(i=>i.type!=="null")||t.anyOf?.find(i=>i.type!=="null");return e?this._buildExample(e):null}return"<value>"}};var l=class extends o{};export{l as CursorOutputFormatter};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import _ from"axios";import{homedir as h}from"node:os";import{join as S}from"node:path";import{existsSync as P,readFileSync as k}from"node:fs";import{toJSONSchema as A}from"zod";import f from"chalk";var
|
|
1
|
+
import _ from"axios";import{homedir as h}from"node:os";import{join as S}from"node:path";import{existsSync as P,readFileSync as k}from"node:fs";import{toJSONSchema as A}from"zod";import f from"chalk";var r={debug:0,info:1,warn:2,error:3,silent:4},g=class{constructor(){this._level=this._getLogLevel()}_getLogLevel(){if(process.env.ZIBBY_DEBUG==="true")return r.debug;if(process.env.ZIBBY_VERBOSE==="true")return r.info;let o=process.env.LOG_LEVEL?.toLowerCase();return o&&o in r?r[o]:r.info}_shouldLog(o){return r[o]>=this._level}_formatMessage(o,n,d={}){let l=new Date().toISOString(),s=`${this._getPrefix(o)} ${n}`;return Object.keys(d).length>0&&(s+=f.dim(` ${JSON.stringify(d)}`)),s}_getPrefix(o){return{debug:f.gray("[DEBUG]"),info:f.cyan("[INFO]"),warn:f.yellow("[WARN]"),error:f.red("\u274C [ERROR]")}[o]||""}debug(o,n){this._shouldLog("debug")&&console.log(this._formatMessage("debug",o,n))}info(o,n){this._shouldLog("info")&&console.log(this._formatMessage("info",o,n))}warn(o,n){this._shouldLog("warn")&&console.warn(this._formatMessage("warn",o,n))}error(o,n){this._shouldLog("error")&&console.error(this._formatMessage("error",o,n))}setLevel(o){o in r&&(this._level=r[o])}getLevel(){return Object.keys(r).find(o=>r[o]===this._level)}},i=new g;var x=[{alias:"auto",canonicalId:"claude-sonnet-4-6",vendor:"claude",label:"Claude \xB7 Sonnet 4.6",family:"claude-sonnet-4",pickerVisible:!0,isDefault:!0},{alias:"opus-4.8",canonicalId:"claude-opus-4-8",vendor:"claude",label:"Claude \xB7 Opus 4.8",family:"claude-opus-4",pickerVisible:!0},{alias:"opus-4-8",canonicalId:"claude-opus-4-8",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.8"},{alias:"sonnet-4.8",canonicalId:"claude-sonnet-4-8",vendor:"claude",label:"Claude \xB7 Sonnet 4.8",family:"claude-sonnet-4",pickerVisible:!0},{alias:"sonnet-4-8",canonicalId:"claude-sonnet-4-8",vendor:"claude",family:"claude-sonnet-4",aliasOf:"sonnet-4.8"},{alias:"opus-4.7",canonicalId:"claude-opus-4-7",vendor:"claude",label:"Claude \xB7 Opus 4.7",family:"claude-opus-4",pickerVisible:!0},{alias:"opus-4-7",canonicalId:"claude-opus-4-7",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.7"},{alias:"sonnet-4.7",canonicalId:"claude-sonnet-4-7",vendor:"claude",label:"Claude \xB7 Sonnet 4.7",family:"claude-sonnet-4",pickerVisible:!0},{alias:"sonnet-4-7",canonicalId:"claude-sonnet-4-7",vendor:"claude",family:"claude-sonnet-4",aliasOf:"sonnet-4.7"},{alias:"sonnet-4.6",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4",aliasOf:"auto"},{alias:"sonnet-4-6",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4",aliasOf:"auto"},{alias:"opus-4.6",canonicalId:"claude-opus-4-6",vendor:"claude",label:"Claude \xB7 Opus 4.6",family:"claude-opus-4",pickerVisible:!0},{alias:"opus-4-6",canonicalId:"claude-opus-4-6",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.6"},{alias:"sonnet-4.5",canonicalId:"claude-sonnet-4-5-20250929",vendor:"claude",label:"Claude \xB7 Sonnet 4.5",family:"claude-sonnet-4",pickerVisible:!0},{alias:"sonnet-4-5",canonicalId:"claude-sonnet-4-5-20250929",vendor:"claude",family:"claude-sonnet-4",aliasOf:"sonnet-4.5"},{alias:"opus-4.5",canonicalId:"claude-opus-4-5-20251101",vendor:"claude",label:"Claude \xB7 Opus 4.5",family:"claude-opus-4",pickerVisible:!0},{alias:"opus-4-5",canonicalId:"claude-opus-4-5-20251101",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.5"},{alias:"haiku-4.5",canonicalId:"claude-haiku-4-5-20251001",vendor:"claude",label:"Claude \xB7 Haiku 4.5",family:"claude-haiku-4"},{alias:"haiku-4-5",canonicalId:"claude-haiku-4-5-20251001",vendor:"claude",family:"claude-haiku-4",aliasOf:"haiku-4.5"},{alias:"claude-opus-4-8",canonicalId:"claude-opus-4-8",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.8"},{alias:"claude-sonnet-4-8",canonicalId:"claude-sonnet-4-8",vendor:"claude",family:"claude-sonnet-4",aliasOf:"sonnet-4.8"},{alias:"claude-opus-4-7",canonicalId:"claude-opus-4-7",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.7"},{alias:"claude-sonnet-4-7",canonicalId:"claude-sonnet-4-7",vendor:"claude",family:"claude-sonnet-4",aliasOf:"sonnet-4.7"},{alias:"claude-sonnet-4-6",canonicalId:"claude-sonnet-4-6",vendor:"claude",family:"claude-sonnet-4",aliasOf:"auto"},{alias:"claude-opus-4-6",canonicalId:"claude-opus-4-6",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.6"},{alias:"claude-sonnet-4-5-20250929",canonicalId:"claude-sonnet-4-5-20250929",vendor:"claude",family:"claude-sonnet-4",aliasOf:"sonnet-4.5"},{alias:"claude-opus-4-5-20251101",canonicalId:"claude-opus-4-5-20251101",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.5"},{alias:"claude-haiku-4-5-20251001",canonicalId:"claude-haiku-4-5-20251001",vendor:"claude",family:"claude-haiku-4",aliasOf:"haiku-4.5"},{alias:"claude-opus-4-20250514",canonicalId:"claude-opus-4-20250514",vendor:"claude",family:"claude-opus-4",aliasOf:"opus-4.5"},{alias:"auto",canonicalId:"o4-mini",vendor:"codex",label:"Codex \xB7 o4-mini",family:"o4-mini",isDefault:!0},{alias:"o4-mini",canonicalId:"o4-mini",vendor:"codex",label:"Codex \xB7 o4-mini",family:"o4-mini",pickerVisible:!0},{alias:"o3",canonicalId:"o3",vendor:"codex",family:"o3"},{alias:"o3-mini",canonicalId:"o3-mini",vendor:"codex",family:"o3-mini"},{alias:"codex-mini",canonicalId:"codex-mini-latest",vendor:"codex",family:"codex-mini"},{alias:"gpt-4o",canonicalId:"gpt-4o",vendor:"codex",label:"Codex \xB7 GPT-4o",family:"gpt-4o",pickerVisible:!0},{alias:"gpt-4o-mini",canonicalId:"gpt-4o-mini",vendor:"codex",label:"Codex \xB7 GPT-4o mini",family:"gpt-4o-mini",pickerVisible:!0},{alias:"gpt-5.2-codex",canonicalId:"gpt-5.2-codex",vendor:"codex",label:"Codex \xB7 GPT-5.2",family:"gpt-5",pickerVisible:!0},{alias:"gpt-5.2",canonicalId:"gpt-5.2",vendor:"codex",label:"Codex \xB7 GPT-5.2 base",family:"gpt-5",pickerVisible:!0},{alias:"gpt-5.3",canonicalId:"gpt-5.3",vendor:"codex",label:"Codex \xB7 GPT-5.3",family:"gpt-5",pickerVisible:!0},{alias:"gpt-5.3-codex",canonicalId:"gpt-5.3-codex",vendor:"codex",family:"gpt-5"},{alias:"gpt-5.4",canonicalId:"gpt-5.4",vendor:"codex",label:"Codex \xB7 GPT-5.4",family:"gpt-5",pickerVisible:!0},{alias:"gpt-5.5",canonicalId:"gpt-5.5",vendor:"codex",label:"Codex \xB7 GPT-5.5",family:"gpt-5",pickerVisible:!0},{alias:"auto",canonicalId:"gemini-3-pro",vendor:"gemini",label:"Gemini \xB7 3 Pro",family:"gemini-3",isDefault:!0},{alias:"gemini-3-pro",canonicalId:"gemini-3-pro",vendor:"gemini",label:"Gemini \xB7 3 Pro",family:"gemini-3",pickerVisible:!0},{alias:"gemini-3-flash",canonicalId:"gemini-3-flash",vendor:"gemini",label:"Gemini \xB7 3 Flash",family:"gemini-3",pickerVisible:!0},{alias:"gemini-2.5-pro",canonicalId:"gemini-2.5-pro",vendor:"gemini",label:"Gemini \xB7 2.5 Pro",family:"gemini-2.5",pickerVisible:!0},{alias:"gemini-2.5-flash",canonicalId:"gemini-2.5-flash",vendor:"gemini",label:"Gemini \xB7 2.5 Flash",family:"gemini-2.5",pickerVisible:!0}];function m(e){let o={};for(let n of x)n.vendor===e&&(o[n.alias]=n.canonicalId);return o}var O={ASSISTANT:"gpt-5.4-nano-2026-03-17",CLAUDE:"claude-sonnet-4-6",CURSOR:"auto",CODEX:"o4-mini",GEMINI:"gemini-3-pro",OPENAI_POSTPROCESSING:"gpt-4o-mini"};var $=m("claude"),w=m("codex"),D=m("gemini"),b={CURSOR_AGENT_DEFAULT:1200*1e3,OPENAI_REQUEST:18e4};function C(){if(process.env.OPENAI_PROXY_TOKEN)return i.debug("[Auth] Using OPENAI_PROXY_TOKEN (ECS execution)"),process.env.OPENAI_PROXY_TOKEN;if(process.env.ZIBBY_USER_TOKEN)return i.debug("[Auth] Using ZIBBY_USER_TOKEN (CI/CD PAT)"),process.env.ZIBBY_USER_TOKEN;try{let e=S(h(),".zibby","config.json");if(P(e)){let o=JSON.parse(k(e,"utf-8"));if(o.sessionToken)return i.debug("[Auth] Using session token from zibby login"),o.sessionToken}}catch(e){i.debug(`[Auth] Could not read zibby login session: ${e.message}`)}return null}function T(){return process.env.OPENAI_PROXY_URL?process.env.OPENAI_PROXY_URL.replace(/\/v1\/?$/,""):"https://api-prod.zibby.app/openai-proxy"}function u(e){if(!(typeof e!="object"||e===null)){if(Object.keys(e).length===0){e.type="object",e.additionalProperties=!0;return}if(e.type||(e.properties?e.type="object":e.items&&(e.type="array")),e.type==="object")if(e.properties){for(let[o,n]of Object.entries(e.properties))n.type==="object"&&n.additionalProperties&&n.additionalProperties!==!1&&(!n.properties||Object.keys(n.properties).length===0)&&(e.properties[o]={type:["object","null"]});e.additionalProperties=!1,e.required=Object.keys(e.properties),Object.values(e.properties).forEach(u)}else"additionalProperties"in e||(e.additionalProperties=!0);e.type==="array"&&e.items&&u(e.items),e.anyOf&&e.anyOf.forEach(u),e.oneOf&&e.oneOf.forEach(u),e.allOf&&e.allOf.forEach(u)}}async function K(e,o){i.info("\u{1F527} [OpenAI Proxy] Formatting structured output...");let n=C();if(!n)throw new Error("Authentication required for structured output processing.\n Local development: Run `zibby login`\n CI/CD: Set ZIBBY_USER_TOKEN environment variable (Personal Access Token from UI settings)");let d=T();i.info(`\u{1F517} Using OpenAI proxy: ${d}`);let l=A(o),t=l;if(l.$ref&&l.definitions){let a=l.$ref.split("/").pop();t=l.definitions[a]||l,i.debug(`Extracted schema from $ref: ${a}`)}delete t.$schema,u(t);let s=4e5,y=e;e.length>s&&(i.warn(`\u26A0\uFE0F [OpenAI Proxy] Raw text (${e.length} chars) exceeds limit, keeping last ${s} chars`),y=`... [truncated early content] ...
|
|
2
2
|
${e.slice(-s)}`);let I=`Extract and format the following information into structured JSON matching the schema.
|
|
3
3
|
|
|
4
4
|
RAW CONTENT:
|
|
5
5
|
${y}
|
|
6
6
|
|
|
7
|
-
Extract all relevant information and format it according to the schema. If any required fields are missing, do your best to infer them from the content.`,
|
|
7
|
+
Extract all relevant information and format it according to the schema. If any required fields are missing, do your best to infer them from the content.`,v={model:O.OPENAI_POSTPROCESSING,messages:[{role:"user",content:I}],response_format:{type:"json_schema",json_schema:{name:"extract",schema:t,strict:!0}}};i.info(`\u{1F4E4} Sending to OpenAI proxy: model=${O.OPENAI_POSTPROCESSING}, schema keys=${Object.keys(t.properties||{}).join(", ")}`),i.debug(` Schema size: ${JSON.stringify(t).length} chars`),i.debug(` Prompt size: ${I.length} chars`);try{let a={"Content-Type":"application/json"};process.env.OPENAI_PROXY_TOKEN?(a["x-proxy-token"]=n,a["x-execution-id"]=process.env.EXECUTION_ID||""):(a.Authorization=`Bearer ${n}`,a["x-api-key"]=process.env.ZIBBY_API_KEY||"",a["x-execution-id"]=process.env.EXECUTION_ID||"");let c=(await _.post(d,v,{headers:a,timeout:b.OPENAI_REQUEST})).data?.choices?.[0]?.message?.content;if(!c)throw new Error("OpenAI proxy returned empty response");let E=JSON.parse(c);return i.info("\u2705 Successfully formatted with OpenAI proxy"),{structured:E,raw:e}}catch(a){if(a.response){let p=a.response.status,c=a.response.data;throw i.error(`\u274C OpenAI proxy request failed: ${p}`),i.error(` Status: ${p}`),i.error(` Response: ${JSON.stringify(c,null,2)}`),p===401||p===403?new Error(`Authentication failed for OpenAI proxy.
|
|
8
8
|
Run \`zibby login\` or set ZIBBY_USER_TOKEN environment variable.
|
|
9
|
-
Response: ${JSON.stringify(c)}`,{cause:
|
|
9
|
+
Response: ${JSON.stringify(c)}`,{cause:a}):new Error(`Failed to format Cursor output: ${c?.error?.message||"Unknown error"}`,{cause:a})}throw i.error(`\u274C OpenAI proxy request failed: ${a.message}`),new Error(`Failed to format output: ${a.message}`,{cause:a})}}export{K as formatWithOpenAIProxy};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{zodToJsonSchema as
|
|
1
|
+
import{z as o}from"zod";import{zodToJsonSchema as l}from"zod-to-json-schema";function a(r){if(!r)return null;if(typeof o?.toJSONSchema=="function")try{return o.toJSONSchema(r)}catch{}try{return l(r,{target:"openApi3"})}catch{return null}}var i=class{static generateFileOutputInstructions(t,e){let n;typeof t?.parse=="function"?n=a(t):n=t;let s=this._buildExample(n);return`
|
|
2
2
|
\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550
|
|
3
3
|
\u{1F6A8} MANDATORY: WRITE RESULT TO FILE \u{1F6A8}
|
|
4
4
|
\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550
|
|
@@ -11,21 +11,21 @@ DO NOT just output JSON to stdout. The file MUST exist when you finish.
|
|
|
11
11
|
DO NOT skip this step. The workflow WILL FAIL if the file is missing.
|
|
12
12
|
|
|
13
13
|
Required JSON structure:
|
|
14
|
-
${JSON.stringify(
|
|
14
|
+
${JSON.stringify(s,null,2)}
|
|
15
15
|
|
|
16
16
|
JSON types (strict \u2014 validators reject wrong types):
|
|
17
17
|
- Use bare JSON numbers for numeric fields (e.g. 3000). Do NOT quote them as strings (wrong: "3000").
|
|
18
18
|
- Use true/false without quotes for booleans.
|
|
19
19
|
- Use unquoted null where a field may be null.
|
|
20
20
|
|
|
21
|
-
Rules: valid JSON only, no markdown wrapping, no extra text in the file.`}static _buildExample(t){if(!t)return{};let e=t.type;if(e==="object"&&t.properties){let
|
|
21
|
+
Rules: valid JSON only, no markdown wrapping, no extra text in the file.`}static _buildExample(t){if(!t)return{};let e=t.type;if(e==="object"&&t.properties){let n={};for(let[s,p]of Object.entries(t.properties))n[s]=this._buildExample(p);return n}if(e==="array"&&t.items)return[this._buildExample(t.items)];if(t.enum&&Array.isArray(t.enum)&&t.enum.length>0)return`<${t.enum.join("|")}>`;if(e==="string")return"<string>";if(e==="number"||e==="integer")return 0;if(e==="boolean")return!1;if(t.description)return`<${t.description}>`;if(t.nullable||t.oneOf||t.anyOf){let n=t.oneOf?.find(s=>s.type!=="null")||t.anyOf?.find(s=>s.type!=="null");return n?this._buildExample(n):null}return"<value>"}};var u=class r{constructor(t=""){this.userPrompt=t,this.systemInstructions=[],this.metadata={}}setUserPrompt(t){return this.userPrompt=t,this}appendUserPrompt(t){return this.userPrompt?this.userPrompt+=`
|
|
22
22
|
|
|
23
|
-
${t}`:this.userPrompt=t,this}addSkillHints(t){return t&&this.systemInstructions.push({type:"skill_hints",content:t,position:"prepend"}),this}addStructuredOutput(t,e){if(t&&e){let
|
|
23
|
+
${t}`:this.userPrompt=t,this}addSkillHints(t){return t&&this.systemInstructions.push({type:"skill_hints",content:t,position:"prepend"}),this}addStructuredOutput(t,e){if(t&&e){let n=i.generateFileOutputInstructions(t,e);this.systemInstructions.push({type:"structured_output",content:n,position:"append"}),this.metadata.structuredOutputPath=e}return this}addExtraInstructions(t){if(t?.trim()){let e=`\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501
|
|
24
24
|
\u26A0\uFE0F PRIORITY OVERRIDE \u2014 THE FOLLOWING INSTRUCTIONS TAKE PRECEDENCE OVER ALL PREVIOUS CONTENT
|
|
25
25
|
\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501
|
|
26
26
|
|
|
27
27
|
${t.trim()}`;this.systemInstructions.push({type:"extra_instructions",content:e,position:"append"})}return this}addSkillFragments(t){return t&&t.length>0&&this.systemInstructions.push({type:"skill_fragments",content:t.join(`
|
|
28
28
|
|
|
29
|
-
`),position:"append"}),this}addSystemInstruction(t,e="custom",
|
|
29
|
+
`),position:"append"}),this}addSystemInstruction(t,e="custom",n="append"){return t&&this.systemInstructions.push({type:e,content:t,position:n}),this}getUserPrompt(){return this.userPrompt}getSystemInstructions(){return this.systemInstructions}getMetadata(){return this.metadata}build(){let t=this.systemInstructions.filter(s=>s.position==="prepend").map(s=>s.content),e=this.systemInstructions.filter(s=>s.position==="append").map(s=>s.content);return[...t,this.userPrompt,...e].filter(Boolean).join(`
|
|
30
30
|
|
|
31
|
-
`)}getStats(){let t=this.userPrompt.length,e=this.build().length;return{userPromptLength:t,fullPromptLength:e,systemInstructionsLength:e-t,instructionCount:this.systemInstructions.length,instructionTypes:this.systemInstructions.map(
|
|
31
|
+
`)}getStats(){let t=this.userPrompt.length,e=this.build().length;return{userPromptLength:t,fullPromptLength:e,systemInstructionsLength:e-t,instructionCount:this.systemInstructions.length,instructionTypes:this.systemInstructions.map(n=>n.type)}}clone(){let t=new r(this.userPrompt);return t.systemInstructions=[...this.systemInstructions],t.metadata={...this.metadata},t}};export{u as PromptBuilder};
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import{zodToJsonSchema as
|
|
1
|
+
import{z as o}from"zod";import{zodToJsonSchema as f}from"zod-to-json-schema";function s(n){if(!n)return null;if(typeof o?.toJSONSchema=="function")try{return o.toJSONSchema(n)}catch{}try{return f(n,{target:"openApi3"})}catch{return null}}var u=class{static generateFileOutputInstructions(t,r){let e;typeof t?.parse=="function"?e=s(t):e=t;let i=this._buildExample(e);return`
|
|
2
2
|
\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550
|
|
3
3
|
\u{1F6A8} MANDATORY: WRITE RESULT TO FILE \u{1F6A8}
|
|
4
4
|
\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550
|
|
5
5
|
You MUST write your final result as pure JSON to this EXACT file path:
|
|
6
6
|
|
|
7
|
-
${
|
|
7
|
+
${r}
|
|
8
8
|
|
|
9
9
|
Use your file writing tool (WriteFile or ApplyPatch) to create this file.
|
|
10
10
|
DO NOT just output JSON to stdout. The file MUST exist when you finish.
|
|
11
11
|
DO NOT skip this step. The workflow WILL FAIL if the file is missing.
|
|
12
12
|
|
|
13
13
|
Required JSON structure:
|
|
14
|
-
${JSON.stringify(
|
|
14
|
+
${JSON.stringify(i,null,2)}
|
|
15
15
|
|
|
16
16
|
JSON types (strict \u2014 validators reject wrong types):
|
|
17
17
|
- Use bare JSON numbers for numeric fields (e.g. 3000). Do NOT quote them as strings (wrong: "3000").
|
|
18
18
|
- Use true/false without quotes for booleans.
|
|
19
19
|
- Use unquoted null where a field may be null.
|
|
20
20
|
|
|
21
|
-
Rules: valid JSON only, no markdown wrapping, no extra text in the file.`}static _buildExample(
|
|
21
|
+
Rules: valid JSON only, no markdown wrapping, no extra text in the file.`}static _buildExample(t){if(!t)return{};let r=t.type;if(r==="object"&&t.properties){let e={};for(let[i,l]of Object.entries(t.properties))e[i]=this._buildExample(l);return e}if(r==="array"&&t.items)return[this._buildExample(t.items)];if(t.enum&&Array.isArray(t.enum)&&t.enum.length>0)return`<${t.enum.join("|")}>`;if(r==="string")return"<string>";if(r==="number"||r==="integer")return 0;if(r==="boolean")return!1;if(t.description)return`<${t.description}>`;if(t.nullable||t.oneOf||t.anyOf){let e=t.oneOf?.find(i=>i.type!=="null")||t.anyOf?.find(i=>i.type!=="null");return e?this._buildExample(e):null}return"<value>"}};export{u as StructuredOutputFormatter};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{z as o}from"zod";import{zodToJsonSchema as n}from"zod-to-json-schema";function c(t,r={target:"openApi3"}){if(!t)return null;if(typeof o?.toJSONSchema=="function")try{return o.toJSONSchema(t)}catch{}try{return n(t,r)}catch{return null}}export{c as zodToJson};
|