Sirji Docs
-
+
diff --git a/architecture.html b/architecture.html
index 212129c..d0946ba 100644
--- a/architecture.html
+++ b/architecture.html
@@ -4,7 +4,7 @@
Architecture | Sirji Docs
-
+
diff --git a/assets/js/1db64337.0b463a13.js b/assets/js/1db64337.0b463a13.js
new file mode 100644
index 0000000..2da1dc6
--- /dev/null
+++ b/assets/js/1db64337.0b463a13.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksirji_docs=self.webpackChunksirji_docs||[]).push([[413],{3022:(e,i,t)=>{t.r(i),t.d(i,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>c});var n=t(4848),s=t(8453);const r={slug:"/",sidebar_position:1},o="Overview",a={id:"overview",title:"Overview",description:"Sirji is a framework that enables developers to create and run custom AI agents for their everyday development tasks.",source:"@site/docs/overview.md",sourceDirName:".",slug:"/",permalink:"/",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{slug:"/",sidebar_position:1},sidebar:"tutorialSidebar",next:{title:"Need for Custom Agents",permalink:"/need-for-custom-agents"}},d={},c=[{value:"What is a Custom Agent?",id:"what-is-a-custom-agent",level:2},{value:"Who is Sirji for?",id:"who-is-sirji-for",level:2},{value:"How have we used Sirji?",id:"how-have-we-used-sirji",level:2}];function l(e){const i={a:"a",h1:"h1",h2:"h2",li:"li",ol:"ol",p:"p",ul:"ul",...(0,s.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(i.h1,{id:"overview",children:"Overview"}),"\n",(0,n.jsx)(i.p,{children:"Sirji is a framework that enables developers to create and run custom AI agents for their everyday development tasks."}),"\n",(0,n.jsx)(i.p,{children:"Sirji is implemented as a VS Code extension that provides an interactive chat interface right within your IDE. It leverages the capabilities of VS Code, including the Editor, Terminal, and Project Explorer."}),"\n",(0,n.jsx)(i.h2,{id:"what-is-a-custom-agent",children:"What is a Custom Agent?"}),"\n",(0,n.jsx)(i.p,{children:"A Custom Agent is a modular AI component that performs specific tasks based on predefined pseudocode."}),"\n",(0,n.jsx)(i.p,{children:"Pseudocode is written in plain English. It reflects a developer's understanding of the repository's architecture, design patterns, and conventions. Pseudocode helps Sirji execute tasks as instructed."}),"\n",(0,n.jsxs)(i.p,{children:["For more information on creating custom agents, visit ",(0,n.jsx)(i.a,{href:"./category/custom-agents",children:"here"}),"."]}),"\n",(0,n.jsx)(i.h2,{id:"who-is-sirji-for",children:"Who is Sirji for?"}),"\n",(0,n.jsx)(i.p,{children:"Sirji is greatly beneficial for teams having existing repositories and problems that are similar in nature."}),"\n",(0,n.jsx)(i.p,{children:"For instance:"}),"\n",(0,n.jsxs)(i.ol,{children:["\n",(0,n.jsx)(i.li,{children:"If a team frequently adds new APIs to one or more backend repositories with a similar framework, a custom agent can handle this task across different repositories."}),"\n",(0,n.jsx)(i.li,{children:"If a team frequently adds test cases for multiple backend APIs, a custom agent can handle this task accross different APIs."}),"\n"]}),"\n",(0,n.jsx)(i.p,{children:"So Sirji is for teams that understand their repository well and can write custom agents for their specific use cases."}),"\n",(0,n.jsx)(i.p,{children:"For example, writing a new API in a backend repository with a predefined framework requires listing the steps needed to update different files (example: validation, configs, service, formatters, etc). This pseudocode can be reused for similar tasks, saving development time."}),"\n",(0,n.jsx)(i.p,{children:"Sirji is unlike GitHub Copilot that works right out of the box but generates code that doesn\u2019t follow your coding conventions and lacks domain context. Instead, Sirji is for teams that are willing to put in the initial effort of explaining their problem-solving approach and writing a custom agent."}),"\n",(0,n.jsx)(i.h2,{id:"how-have-we-used-sirji",children:"How have we used Sirji?"}),"\n",(0,n.jsx)(i.p,{children:"We used Sirji to develop in an existing repository with backend REST APIs in Node.js. We wrote custom agents for tasks, including:"}),"\n",(0,n.jsxs)(i.ul,{children:["\n",(0,n.jsx)(i.li,{children:"Generating sequence diagrams, DBML files, and OpenAPI specs for backend APIs."}),"\n",(0,n.jsx)(i.li,{children:"Writing new APIs in Node.js backend repositories."}),"\n",(0,n.jsx)(i.li,{children:"Writing test cases for APIs in backend repositories."}),"\n"]}),"\n",(0,n.jsx)(i.p,{children:"We invite the community to write their own custom agents for their repositories."})]})}function h(e={}){const{wrapper:i}={...(0,s.R)(),...e.components};return i?(0,n.jsx)(i,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},8453:(e,i,t)=>{t.d(i,{R:()=>o,x:()=>a});var n=t(6540);const s={},r=n.createContext(s);function o(e){const i=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function a(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),n.createElement(r.Provider,{value:i},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/1db64337.aa35c7cf.js b/assets/js/1db64337.aa35c7cf.js
deleted file mode 100644
index b47a02c..0000000
--- a/assets/js/1db64337.aa35c7cf.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunksirji_docs=self.webpackChunksirji_docs||[]).push([[413],{3022:(e,i,t)=>{t.r(i),t.d(i,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>c});var s=t(4848),n=t(8453);const r={slug:"/",sidebar_position:1},o="Overview",a={id:"overview",title:"Overview",description:"Sirji is a framework that enables developers to create and run custom AI agents for their everyday development tasks.",source:"@site/docs/overview.md",sourceDirName:".",slug:"/",permalink:"/",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{slug:"/",sidebar_position:1},sidebar:"tutorialSidebar",next:{title:"Need for Custom Agents",permalink:"/need-for-custom-agents"}},d={},c=[{value:"What is a Custom Agent?",id:"what-is-a-custom-agent",level:2},{value:"Who is Sirji for?",id:"who-is-sirji-for",level:2},{value:"How have we used Sirji?",id:"how-have-we-used-sirji",level:2}];function l(e){const i={a:"a",h1:"h1",h2:"h2",li:"li",p:"p",ul:"ul",...(0,n.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(i.h1,{id:"overview",children:"Overview"}),"\n",(0,s.jsx)(i.p,{children:"Sirji is a framework that enables developers to create and run custom AI agents for their everyday development tasks."}),"\n",(0,s.jsx)(i.p,{children:"Sirji is implemented as a VS Code extension that provides an interactive chat interface right within your IDE. It leverages the capabilities of VS Code, including the Editor, Terminal, and Project Explorer."}),"\n",(0,s.jsx)(i.h2,{id:"what-is-a-custom-agent",children:"What is a Custom Agent?"}),"\n",(0,s.jsx)(i.p,{children:"A Custom Agent is a modular AI component that performs specific tasks based on predefined pseudocode."}),"\n",(0,s.jsx)(i.p,{children:"Pseudocode is written in plain English. It reflects a developer's understanding of the repository's architecture, design patterns, and conventions. Pseudocode helps Sirji execute tasks as instructed."}),"\n",(0,s.jsxs)(i.p,{children:["For more information on creating custom agents, visit ",(0,s.jsx)(i.a,{href:"./category/custom-agents",children:"here"}),"."]}),"\n",(0,s.jsx)(i.h2,{id:"who-is-sirji-for",children:"Who is Sirji for?"}),"\n",(0,s.jsx)(i.p,{children:"Sirji is not for those who want help without explaining their problem-solving approach by writing custom agents."}),"\n",(0,s.jsx)(i.p,{children:"Sirji is for developers who understand their repository well and can write custom agents for their needs."}),"\n",(0,s.jsx)(i.p,{children:"For example, writing a new API in a backend repository with a predefined framework requires listing the steps needed to update different files (example: validation, configs, service, formatters, etc). This pseudocode can be reused for similar tasks, saving development time."}),"\n",(0,s.jsx)(i.p,{children:"Organizations can benefit from Sirji if they have projects with similar problems. For instance, if an organization frequently adds new APIs to multiple backend repositories with a similar framework, a custom agent can handle this task across different repositories."}),"\n",(0,s.jsx)(i.h2,{id:"how-have-we-used-sirji",children:"How have we used Sirji?"}),"\n",(0,s.jsx)(i.p,{children:"We used Sirji to develop in an existing repository with backend REST APIs in Node.js, using the Express framework, Sequelize as the ORM, PostgreSQL as the data store, and Redis as the caching layer."}),"\n",(0,s.jsx)(i.p,{children:"We wrote custom agents for tasks, including:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Generating sequence diagrams, DBML files, and OpenAPI specs for backend APIs."}),"\n",(0,s.jsx)(i.li,{children:"Writing new APIs in Node.js backend repositories."}),"\n",(0,s.jsx)(i.li,{children:"Writing test cases for APIs in backend repositories."}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:"We invite the community to write their own custom agents for their repositories."})]})}function h(e={}){const{wrapper:i}={...(0,n.R)(),...e.components};return i?(0,s.jsx)(i,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},8453:(e,i,t)=>{t.d(i,{R:()=>o,x:()=>a});var s=t(6540);const n={},r=s.createContext(n);function o(e){const i=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function a(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:o(e.components),s.createElement(r.Provider,{value:i},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/2d1e9baf.40ebcbc1.js b/assets/js/2d1e9baf.be0ae3f0.js
similarity index 55%
rename from assets/js/2d1e9baf.40ebcbc1.js
rename to assets/js/2d1e9baf.be0ae3f0.js
index a7f0b36..11605cd 100644
--- a/assets/js/2d1e9baf.40ebcbc1.js
+++ b/assets/js/2d1e9baf.be0ae3f0.js
@@ -1 +1 @@
-"use strict";(self.webpackChunksirji_docs=self.webpackChunksirji_docs||[]).push([[539],{2886:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>i,metadata:()=>c,toc:()=>a});var n=s(4848),o=s(8453);const i={sidebar_position:6},r="Messaging Protocol",c={id:"messaging-protocol",title:"Messaging Protocol",description:"Let's deep dive into the Sirji Messaging Protocol.",source:"@site/docs/messaging-protocol.md",sourceDirName:".",slug:"/messaging-protocol",permalink:"/messaging-protocol",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:6,frontMatter:{sidebar_position:6},sidebar:"tutorialSidebar",previous:{title:"Architecture",permalink:"/architecture"}},l={},a=[{value:"Overview",id:"overview",level:2},{value:"Initial Invocation",id:"initial-invocation",level:2},{value:"Pseudocode Execution",id:"pseudocode-execution",level:2},{value:"Sequential Execution",id:"sequential-execution",level:2}];function d(e){const t={a:"a",h1:"h1",h2:"h2",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"messaging-protocol",children:"Messaging Protocol"}),"\n",(0,n.jsx)(t.p,{children:"Let's deep dive into the Sirji Messaging Protocol."}),"\n",(0,n.jsx)(t.h2,{id:"overview",children:"Overview"}),"\n",(0,n.jsx)(t.p,{children:"Custom agents in Sirji have their own custom pseudocode, which consists of a list of numbered steps. These steps provide a blueprint for how the conversation with the LLM will proceed. When a completions API call is made, the message history, along with the latest message, is passed to the LLM, which responds according to the Sirji Messaging Protocol, following the steps given in the pseudocode."}),"\n",(0,n.jsx)(t.h2,{id:"initial-invocation",children:"Initial Invocation"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"System Prompt and Invocation"}),": At the beginning of a fresh session, when an agent is invoked, the system prompt and the invocation message are sent as input for the first completions API call."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"LLM Response"}),": The LLM responds with a message that aligns with the Sirji Messaging Protocol and the requirements of the agent pseudocode."]}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"pseudocode-execution",children:"Pseudocode Execution"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Pseudocode Structure"}),": The pseudocode is a list of numbered steps that provide a blueprint for the conversation. Each step is converted into a message according to the Sirji messaging protocol by the LLM. The Sirji framework understands these messages, resulting in a limited number of allowed message types, restricting each pseudocode step to only ",(0,n.jsx)(t.a,{href:"./custom-agents/writing-agent-pseudocode#pseudocode-scenarios",children:"permitted scenarios"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"First API Call Response"}),': In the response to the first completions API call, the LLM sends a message as per the first step of the pseudocode. For example, if the first step is "Read the problem statement from the Agent Output Folder," the LLM\'s response will instruct the Executor to read the file containing the problem statement.']}),"\n"]}),"\n",(0,n.jsx)(t.h2,{id:"sequential-execution",children:"Sequential Execution"}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Executor Action"}),": Upon receiving the LLM's response, the Executor reads the requested file."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Second API Call"}),": The Executor sends the file's content, along with the system message, the invocation message, and the message output from the first completions API call, in the second completions API call request."]}),"\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"LLM Response to Step 2"}),": In response to the second completions API call, the LLM responds with a message corresponding to step 2 of the pseudocode."]}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"This process continues, with each step in the pseudocode being executed one by one."})]})}function h(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},8453:(e,t,s)=>{s.d(t,{R:()=>r,x:()=>c});var n=s(6540);const o={},i=n.createContext(o);function r(e){const t=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),n.createElement(i.Provider,{value:t},e.children)}}}]);
\ No newline at end of file
+"use strict";(self.webpackChunksirji_docs=self.webpackChunksirji_docs||[]).push([[539],{2886:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>i,metadata:()=>c,toc:()=>a});var o=s(4848),n=s(8453);const i={sidebar_position:6},r="Messaging Protocol",c={id:"messaging-protocol",title:"Messaging Protocol",description:"Let's deep dive into the Sirji Messaging Protocol.",source:"@site/docs/messaging-protocol.md",sourceDirName:".",slug:"/messaging-protocol",permalink:"/messaging-protocol",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:6,frontMatter:{sidebar_position:6},sidebar:"tutorialSidebar",previous:{title:"Architecture",permalink:"/architecture"}},l={},a=[{value:"Overview",id:"overview",level:2},{value:"Initial Invocation",id:"initial-invocation",level:2},{value:"Pseudocode Execution",id:"pseudocode-execution",level:2},{value:"Sequential Execution",id:"sequential-execution",level:2}];function d(e){const t={a:"a",h1:"h1",h2:"h2",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,n.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.h1,{id:"messaging-protocol",children:"Messaging Protocol"}),"\n",(0,o.jsx)(t.p,{children:"Let's deep dive into the Sirji Messaging Protocol."}),"\n",(0,o.jsx)(t.h2,{id:"overview",children:"Overview"}),"\n",(0,o.jsx)(t.p,{children:"Custom agents in Sirji have their own custom pseudocode, which consists of a list of numbered steps. These steps provide a blueprint for how the conversation with the LLM will proceed. When a completions API call is made, the message history, along with the latest message, is passed to the LLM, which responds according to the Sirji Messaging Protocol, following the steps given in the pseudocode."}),"\n",(0,o.jsx)(t.h2,{id:"initial-invocation",children:"Initial Invocation"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"System Prompt and Invocation"}),": At the beginning of a fresh session, when an agent is invoked, the system prompt and the invocation message are sent as input for the first completions API call."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"LLM Response"}),": The LLM responds with a message that aligns with the Sirji Messaging Protocol and the requirements of the agent pseudocode."]}),"\n"]}),"\n",(0,o.jsx)(t.h2,{id:"pseudocode-execution",children:"Pseudocode Execution"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"Pseudocode Structure"}),": The pseudocode is a list of numbered steps that provide a blueprint for the conversation. Each step is converted into a message according to the Sirji messaging protocol by the LLM. The Sirji framework understands these messages, resulting in a limited number of allowed message types, restricting each pseudocode step to only ",(0,o.jsx)(t.a,{href:"./custom-agents/writing-agent-pseudocode#pseudocode-scenarios",children:"permitted scenarios"}),"."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"First API Call Response"}),': In the response to the first completions API call, the LLM sends a message as per the first step of the pseudocode. For example, if the first step is "Read the problem statement from the Agent Output Folder," the LLM\'s response will instruct the Executor to read the file containing the problem statement.']}),"\n"]}),"\n",(0,o.jsx)(t.h2,{id:"sequential-execution",children:"Sequential Execution"}),"\n",(0,o.jsxs)(t.ol,{children:["\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"Executor Action"}),": Upon receiving the LLM's response, the Executor reads the requested file."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"Second API Call"}),": The Executor sends the file's content, along with the system message, the invocation message, and the message output from the first completions API call, in the second completions API call request."]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.strong,{children:"LLM Response to Step 2"}),": In response to the second completions API call, the LLM responds with a message corresponding to step 2 of the pseudocode."]}),"\n"]}),"\n",(0,o.jsx)(t.p,{children:"This process continues, with each step in the pseudocode being executed one by one."}),"\n",(0,o.jsx)(t.p,{children:"Watch this YouTube video on the Sirji Messaging Protocol:"}),"\n",(0,o.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/yJzle_p76MI",frameborder:"0",allowfullscreen:!0})]})}function h(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},8453:(e,t,s)=>{s.d(t,{R:()=>r,x:()=>c});var o=s(6540);const n={},i=o.createContext(n);function r(e){const t=o.useContext(i);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:r(e.components),o.createElement(i.Provider,{value:t},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/runtime~main.1986c660.js b/assets/js/runtime~main.1986c660.js
deleted file mode 100644
index 1169470..0000000
--- a/assets/js/runtime~main.1986c660.js
+++ /dev/null
@@ -1 +0,0 @@
-(()=>{"use strict";var e,t,r,a,o,n={},c={};function d(e){var t=c[e];if(void 0!==t)return t.exports;var r=c[e]={id:e,loaded:!1,exports:{}};return n[e].call(r.exports,r,r.exports,d),r.loaded=!0,r.exports}d.m=n,d.c=c,e=[],d.O=(t,r,a,o)=>{if(!r){var n=1/0;for(u=0;u=o)&&Object.keys(d.O).every((e=>d.O[e](r[f])))?r.splice(f--,1):(c=!1,o0&&e[u-1][2]>o;u--)e[u]=e[u-1];e[u]=[r,a,o]},d.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return d.d(t,{a:t}),t},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,d.t=function(e,a){if(1&a&&(e=this(e)),8&a)return e;if("object"==typeof e&&e){if(4&a&&e.__esModule)return e;if(16&a&&"function"==typeof e.then)return e}var o=Object.create(null);d.r(o);var n={};t=t||[null,r({}),r([]),r(r)];for(var c=2&a&&e;"object"==typeof c&&!~t.indexOf(c);c=r(c))Object.getOwnPropertyNames(c).forEach((t=>n[t]=()=>e[t]));return n.default=()=>e,d.d(o,n),o},d.d=(e,t)=>{for(var r in t)d.o(t,r)&&!d.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},d.f={},d.e=e=>Promise.all(Object.keys(d.f).reduce(((t,r)=>(d.f[r](e,t),t)),[])),d.u=e=>"assets/js/"+({45:"6122a5c2",48:"a94703ab",61:"1f391b9e",72:"db03f8e7",98:"a7bd4aaa",134:"393be207",153:"1923c170",171:"d5170221",235:"a7456010",305:"bc2c5926",401:"17896441",413:"1db64337",443:"5281b7a2",473:"1a4e114c",539:"2d1e9baf",567:"22dd74f7",647:"5e95c892",742:"aba21aa0",814:"72e14192",876:"8797827c",878:"735cfa31",969:"14eb3368"}[e]||e)+"."+{45:"8f9a827c",48:"51591e01",61:"fe0eb1bf",72:"1a96b145",98:"06fb6fb0",134:"59f120e1",153:"ffed235e",171:"e513ece9",235:"75dbea0a",237:"a03bbecd",305:"e4727a36",401:"30e04b03",413:"aa35c7cf",443:"9b3c8176",473:"eff1f31d",539:"40ebcbc1",567:"0966017d",647:"0e12a49c",658:"b4ed9601",742:"1576a14a",814:"89b23f61",876:"1620b31a",878:"5f69068c",969:"9fc25836"}[e]+".js",d.miniCssF=e=>{},d.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),d.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a={},o="sirji-docs:",d.l=(e,t,r,n)=>{if(a[e])a[e].push(t);else{var c,f;if(void 0!==r)for(var i=document.getElementsByTagName("script"),u=0;u{c.onerror=c.onload=null,clearTimeout(s);var o=a[e];if(delete a[e],c.parentNode&&c.parentNode.removeChild(c),o&&o.forEach((e=>e(r))),t)return t(r)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:c}),12e4);c.onerror=l.bind(null,c.onerror),c.onload=l.bind(null,c.onload),f&&document.head.appendChild(c)}},d.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},d.p="/",d.gca=function(e){return e={17896441:"401","6122a5c2":"45",a94703ab:"48","1f391b9e":"61",db03f8e7:"72",a7bd4aaa:"98","393be207":"134","1923c170":"153",d5170221:"171",a7456010:"235",bc2c5926:"305","1db64337":"413","5281b7a2":"443","1a4e114c":"473","2d1e9baf":"539","22dd74f7":"567","5e95c892":"647",aba21aa0:"742","72e14192":"814","8797827c":"876","735cfa31":"878","14eb3368":"969"}[e]||e,d.p+d.u(e)},(()=>{var e={354:0,869:0};d.f.j=(t,r)=>{var a=d.o(e,t)?e[t]:void 0;if(0!==a)if(a)r.push(a[2]);else if(/^(354|869)$/.test(t))e[t]=0;else{var o=new Promise(((r,o)=>a=e[t]=[r,o]));r.push(a[2]=o);var n=d.p+d.u(t),c=new Error;d.l(n,(r=>{if(d.o(e,t)&&(0!==(a=e[t])&&(e[t]=void 0),a)){var o=r&&("load"===r.type?"missing":r.type),n=r&&r.target&&r.target.src;c.message="Loading chunk "+t+" failed.\n("+o+": "+n+")",c.name="ChunkLoadError",c.type=o,c.request=n,a[1](c)}}),"chunk-"+t,t)}},d.O.j=t=>0===e[t];var t=(t,r)=>{var a,o,n=r[0],c=r[1],f=r[2],i=0;if(n.some((t=>0!==e[t]))){for(a in c)d.o(c,a)&&(d.m[a]=c[a]);if(f)var u=f(d)}for(t&&t(r);i{"use strict";var e,t,r,a,o,n={},f={};function c(e){var t=f[e];if(void 0!==t)return t.exports;var r=f[e]={id:e,loaded:!1,exports:{}};return n[e].call(r.exports,r,r.exports,c),r.loaded=!0,r.exports}c.m=n,c.c=f,e=[],c.O=(t,r,a,o)=>{if(!r){var n=1/0;for(u=0;u=o)&&Object.keys(c.O).every((e=>c.O[e](r[d])))?r.splice(d--,1):(f=!1,o0&&e[u-1][2]>o;u--)e[u]=e[u-1];e[u]=[r,a,o]},c.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return c.d(t,{a:t}),t},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,c.t=function(e,a){if(1&a&&(e=this(e)),8&a)return e;if("object"==typeof e&&e){if(4&a&&e.__esModule)return e;if(16&a&&"function"==typeof e.then)return e}var o=Object.create(null);c.r(o);var n={};t=t||[null,r({}),r([]),r(r)];for(var f=2&a&&e;"object"==typeof f&&!~t.indexOf(f);f=r(f))Object.getOwnPropertyNames(f).forEach((t=>n[t]=()=>e[t]));return n.default=()=>e,c.d(o,n),o},c.d=(e,t)=>{for(var r in t)c.o(t,r)&&!c.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},c.f={},c.e=e=>Promise.all(Object.keys(c.f).reduce(((t,r)=>(c.f[r](e,t),t)),[])),c.u=e=>"assets/js/"+({45:"6122a5c2",48:"a94703ab",61:"1f391b9e",72:"db03f8e7",98:"a7bd4aaa",134:"393be207",153:"1923c170",171:"d5170221",235:"a7456010",305:"bc2c5926",401:"17896441",413:"1db64337",443:"5281b7a2",473:"1a4e114c",539:"2d1e9baf",567:"22dd74f7",647:"5e95c892",742:"aba21aa0",814:"72e14192",876:"8797827c",878:"735cfa31",969:"14eb3368"}[e]||e)+"."+{45:"8f9a827c",48:"51591e01",61:"fe0eb1bf",72:"1a96b145",98:"06fb6fb0",134:"59f120e1",153:"ffed235e",171:"e513ece9",235:"75dbea0a",237:"a03bbecd",305:"e4727a36",401:"30e04b03",413:"0b463a13",443:"9b3c8176",473:"eff1f31d",539:"be0ae3f0",567:"0966017d",647:"0e12a49c",658:"b4ed9601",742:"1576a14a",814:"89b23f61",876:"1620b31a",878:"5f69068c",969:"9fc25836"}[e]+".js",c.miniCssF=e=>{},c.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),c.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a={},o="sirji-docs:",c.l=(e,t,r,n)=>{if(a[e])a[e].push(t);else{var f,d;if(void 0!==r)for(var i=document.getElementsByTagName("script"),u=0;u{f.onerror=f.onload=null,clearTimeout(s);var o=a[e];if(delete a[e],f.parentNode&&f.parentNode.removeChild(f),o&&o.forEach((e=>e(r))),t)return t(r)},s=setTimeout(b.bind(null,void 0,{type:"timeout",target:f}),12e4);f.onerror=b.bind(null,f.onerror),f.onload=b.bind(null,f.onload),d&&document.head.appendChild(f)}},c.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},c.p="/",c.gca=function(e){return e={17896441:"401","6122a5c2":"45",a94703ab:"48","1f391b9e":"61",db03f8e7:"72",a7bd4aaa:"98","393be207":"134","1923c170":"153",d5170221:"171",a7456010:"235",bc2c5926:"305","1db64337":"413","5281b7a2":"443","1a4e114c":"473","2d1e9baf":"539","22dd74f7":"567","5e95c892":"647",aba21aa0:"742","72e14192":"814","8797827c":"876","735cfa31":"878","14eb3368":"969"}[e]||e,c.p+c.u(e)},(()=>{var e={354:0,869:0};c.f.j=(t,r)=>{var a=c.o(e,t)?e[t]:void 0;if(0!==a)if(a)r.push(a[2]);else if(/^(354|869)$/.test(t))e[t]=0;else{var o=new Promise(((r,o)=>a=e[t]=[r,o]));r.push(a[2]=o);var n=c.p+c.u(t),f=new Error;c.l(n,(r=>{if(c.o(e,t)&&(0!==(a=e[t])&&(e[t]=void 0),a)){var o=r&&("load"===r.type?"missing":r.type),n=r&&r.target&&r.target.src;f.message="Loading chunk "+t+" failed.\n("+o+": "+n+")",f.name="ChunkLoadError",f.type=o,f.request=n,a[1](f)}}),"chunk-"+t,t)}},c.O.j=t=>0===e[t];var t=(t,r)=>{var a,o,n=r[0],f=r[1],d=r[2],i=0;if(n.some((t=>0!==e[t]))){for(a in f)c.o(f,a)&&(c.m[a]=f[a]);if(d)var u=d(c)}for(t&&t(r);iCustom Agents | Sirji Docs
-
+
diff --git a/custom-agents/agent-creation-steps.html b/custom-agents/agent-creation-steps.html
index 200fbfa..9fb3f06 100644
--- a/custom-agents/agent-creation-steps.html
+++ b/custom-agents/agent-creation-steps.html
@@ -4,7 +4,7 @@
Agent Creation Steps | Sirji Docs
-
+
diff --git a/custom-agents/agent-yaml.html b/custom-agents/agent-yaml.html
index d84c8b4..46217e4 100644
--- a/custom-agents/agent-yaml.html
+++ b/custom-agents/agent-yaml.html
@@ -4,7 +4,7 @@
Agent YAML | Sirji Docs
-
+
diff --git a/custom-agents/introduction.html b/custom-agents/introduction.html
index f53ee19..635bffc 100644
--- a/custom-agents/introduction.html
+++ b/custom-agents/introduction.html
@@ -4,7 +4,7 @@
Introduction | Sirji Docs
-
+
diff --git a/custom-agents/recipe.html b/custom-agents/recipe.html
index 19828e6..0b7cbed 100644
--- a/custom-agents/recipe.html
+++ b/custom-agents/recipe.html
@@ -4,7 +4,7 @@
Recipe | Sirji Docs
-
+
diff --git a/custom-agents/sirji-studio.html b/custom-agents/sirji-studio.html
index b3cef48..db65310 100644
--- a/custom-agents/sirji-studio.html
+++ b/custom-agents/sirji-studio.html
@@ -4,7 +4,7 @@
Sirji Studio | Sirji Docs
-
+
diff --git a/custom-agents/writing-agent-pseudocode.html b/custom-agents/writing-agent-pseudocode.html
index e241b2b..e2a4528 100644
--- a/custom-agents/writing-agent-pseudocode.html
+++ b/custom-agents/writing-agent-pseudocode.html
@@ -4,7 +4,7 @@
Writing Agent Pseudocode | Sirji Docs
-
+
diff --git a/index.html b/index.html
index dfc86f2..8cd317f 100644
--- a/index.html
+++ b/index.html
@@ -4,7 +4,7 @@
Overview | Sirji Docs
-
+
@@ -16,13 +16,17 @@
What
Pseudocode is written in plain English. It reflects a developer's understanding of the repository's architecture, design patterns, and conventions. Pseudocode helps Sirji execute tasks as instructed.
For more information on creating custom agents, visit here.
Sirji is not for those who want help without explaining their problem-solving approach by writing custom agents.
-
Sirji is for developers who understand their repository well and can write custom agents for their needs.
+
Sirji is greatly beneficial for teams having existing repositories and problems that are similar in nature.
+
For instance:
+
+
If a team frequently adds new APIs to one or more backend repositories with a similar framework, a custom agent can handle this task across different repositories.
+
If a team frequently adds test cases for multiple backend APIs, a custom agent can handle this task accross different APIs.
+
+
So Sirji is for teams that understand their repository well and can write custom agents for their specific use cases.
For example, writing a new API in a backend repository with a predefined framework requires listing the steps needed to update different files (example: validation, configs, service, formatters, etc). This pseudocode can be reused for similar tasks, saving development time.
-
Organizations can benefit from Sirji if they have projects with similar problems. For instance, if an organization frequently adds new APIs to multiple backend repositories with a similar framework, a custom agent can handle this task across different repositories.
+
Sirji is unlike GitHub Copilot that works right out of the box but generates code that doesn’t follow your coding conventions and lacks domain context. Instead, Sirji is for teams that are willing to put in the initial effort of explaining their problem-solving approach and writing a custom agent.
We used Sirji to develop in an existing repository with backend REST APIs in Node.js, using the Express framework, Sequelize as the ORM, PostgreSQL as the data store, and Redis as the caching layer.
-
We wrote custom agents for tasks, including:
+
We used Sirji to develop in an existing repository with backend REST APIs in Node.js. We wrote custom agents for tasks, including:
Generating sequence diagrams, DBML files, and OpenAPI specs for backend APIs.
Second API Call: The Executor sends the file's content, along with the system message, the invocation message, and the message output from the first completions API call, in the second completions API call request.
LLM Response to Step 2: In response to the second completions API call, the LLM responds with a message corresponding to step 2 of the pseudocode.
-
This process continues, with each step in the pseudocode being executed one by one.