@codeyam/codeyam-cli 0.1.30 → 0.1.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/analyzer-template/.build-info.json +7 -7
  2. package/analyzer-template/log.txt +3 -3
  3. package/codeyam-cli/src/commands/__tests__/init.gitignore.test.js +1 -0
  4. package/codeyam-cli/src/commands/__tests__/init.gitignore.test.js.map +1 -1
  5. package/codeyam-cli/src/commands/editor.js +39 -0
  6. package/codeyam-cli/src/commands/editor.js.map +1 -1
  7. package/codeyam-cli/src/commands/init.js +3 -2
  8. package/codeyam-cli/src/commands/init.js.map +1 -1
  9. package/codeyam-cli/src/utils/__tests__/editorRoadmap.test.js +712 -2
  10. package/codeyam-cli/src/utils/__tests__/editorRoadmap.test.js.map +1 -1
  11. package/codeyam-cli/src/utils/__tests__/envFile.test.js +125 -0
  12. package/codeyam-cli/src/utils/__tests__/envFile.test.js.map +1 -0
  13. package/codeyam-cli/src/utils/__tests__/handoffContext.test.js +500 -0
  14. package/codeyam-cli/src/utils/__tests__/handoffContext.test.js.map +1 -0
  15. package/codeyam-cli/src/utils/editorRoadmap.js +290 -17
  16. package/codeyam-cli/src/utils/editorRoadmap.js.map +1 -1
  17. package/codeyam-cli/src/utils/envFile.js +90 -0
  18. package/codeyam-cli/src/utils/envFile.js.map +1 -0
  19. package/codeyam-cli/src/utils/handoffContext.js +257 -0
  20. package/codeyam-cli/src/utils/handoffContext.js.map +1 -0
  21. package/codeyam-cli/src/utils/install-skills.js +9 -0
  22. package/codeyam-cli/src/utils/install-skills.js.map +1 -1
  23. package/codeyam-cli/src/utils/techStackConfig.js +38 -0
  24. package/codeyam-cli/src/utils/techStackConfig.js.map +1 -0
  25. package/codeyam-cli/src/utils/techStackConfig.test.js +85 -0
  26. package/codeyam-cli/src/utils/techStackConfig.test.js.map +1 -0
  27. package/codeyam-cli/src/webserver/__tests__/buildPtyEnv.test.js +119 -1
  28. package/codeyam-cli/src/webserver/__tests__/buildPtyEnv.test.js.map +1 -1
  29. package/codeyam-cli/src/webserver/app/lib/database.js.map +1 -1
  30. package/codeyam-cli/src/webserver/build/client/assets/{MiniClaudeChat-BusrvT2F.js → MiniClaudeChat-Bs2_Oua4.js} +1 -1
  31. package/codeyam-cli/src/webserver/build/client/assets/api.editor-database-verify-l0sNRNKZ.js +1 -0
  32. package/codeyam-cli/src/webserver/build/client/assets/api.editor-github-verify-l0sNRNKZ.js +1 -0
  33. package/codeyam-cli/src/webserver/build/client/assets/api.editor-handoff-l0sNRNKZ.js +1 -0
  34. package/codeyam-cli/src/webserver/build/client/assets/api.editor-hosting-verify-l0sNRNKZ.js +1 -0
  35. package/codeyam-cli/src/webserver/build/client/assets/editor.entity.(_sha)-DOXe0Qx7.js +161 -0
  36. package/codeyam-cli/src/webserver/build/client/assets/{entity._sha._-Ce1s4OQ1.js → entity._sha._-pc-vc6wO.js} +1 -1
  37. package/codeyam-cli/src/webserver/build/client/assets/globals-L-aUIeux.css +1 -0
  38. package/codeyam-cli/src/webserver/build/client/assets/manifest-30c44d84.js +1 -0
  39. package/codeyam-cli/src/webserver/build/client/assets/{root-Didv9PLi.js → root-CLedrjXQ.js} +3 -3
  40. package/codeyam-cli/src/webserver/build/server/assets/{analysisRunner-BKMsxwqe.js → analysisRunner-CuR5TvUx.js} +1 -1
  41. package/codeyam-cli/src/webserver/build/server/assets/{index-CvuvIPEn.js → index-D4MWAsqb.js} +1 -1
  42. package/codeyam-cli/src/webserver/build/server/assets/init-JObA4lXD.js +14 -0
  43. package/codeyam-cli/src/webserver/build/server/assets/server-build-i8OXK4oL.js +765 -0
  44. package/codeyam-cli/src/webserver/build/server/index.js +1 -1
  45. package/codeyam-cli/src/webserver/build-info.json +5 -5
  46. package/codeyam-cli/src/webserver/terminalServer.js +81 -11
  47. package/codeyam-cli/src/webserver/terminalServer.js.map +1 -1
  48. package/codeyam-cli/templates/codeyam-editor-codex.md +61 -0
  49. package/codeyam-cli/templates/nextjs-prisma-sqlite/gitignore +1 -0
  50. package/codeyam-cli/templates/seed-adapters/supabase.ts +143 -31
  51. package/package.json +1 -1
  52. package/codeyam-cli/src/webserver/build/client/assets/editor.entity.(_sha)-CsYVRiNH.js +0 -147
  53. package/codeyam-cli/src/webserver/build/client/assets/globals-Gp2o-NMc.css +0 -1
  54. package/codeyam-cli/src/webserver/build/client/assets/manifest-ef0f624d.js +0 -1
  55. package/codeyam-cli/src/webserver/build/server/assets/init-B3gVLAAJ.js +0 -14
  56. package/codeyam-cli/src/webserver/build/server/assets/server-build-B4LxStYP.js +0 -741
@@ -1 +1 @@
1
- import"fetch-retry";import{K as Z,N as _,Q as $,R as aa,U as ea,W as sa,Z as ta,a1 as ra,a4 as oa,J as ia,L as ma,M as la,O as pa,P as na,S as ca,T as ba,V as Ta,X as da,Y as ua,_ as ha,$ as Ca,a0 as Sa,a2 as ya,a3 as Ba,a5 as Aa,I as Ea,a6 as Pa,a7 as ga,a8 as ja,aa as Fa,a9 as Ua,d as Da,a as Ga,b as Ma,c as qa,e as Ja,f as fa,g as ka,h as xa,i as Ha,j as La,k as va,E as wa,H as za,G as Ia,F as Ka,l as Na,m as Oa,n as Qa,o as Ra,p as Va,q as Wa,r as Xa,s as Ya,t as Za,u as _a,v as $a,w as ae,x as ee,y as se,z as te,A as re,B as oe,C as ie,D as me}from"./server-build-B4LxStYP.js";import"typescript";import"react/jsx-runtime";import"node:stream";import"@react-router/node";import"react-router";import"isbot";import"react-dom/server";import"react";import"lucide-react";import"better-sqlite3";import"pg";import"fs";import"path";import"kysely";import"kysely/helpers/sqlite";import"kysely/helpers/postgres";import"fs/promises";import"os";import"prompts";import"chalk";import"crypto";import"child_process";import"url";import"util";import"dotenv";import"events";import"uuid";import"http";import"net";import"ws";import"node-pty";import"openai";import"p-queue";import"p-retry";import"@aws-sdk/client-dynamodb";import"lru-cache";import"pluralize";import"piscina";import"json5";import"@aws-sdk/util-dynamodb";import"v8";import"react-syntax-highlighter";import"react-syntax-highlighter/dist/cjs/styles/prism/index.js";import"node:crypto";import"minimatch";import"react-markdown";import"remark-gfm";import"react-diff-viewer-continued";export{Z as AnalysisBranchesTableColumns,_ as BranchesTableColumns,$ as CommitsTableColumns,aa as CommitsTableColumnsLite,ea as EntitiesTableColumns,sa as EntityBranchesTableColumns,ta as FilesTableColumns,ra as ProjectsTableColumns,oa as ScenariosTableColumns,ia as createAnalysesTable,ma as createAnalysisBranchesTable,la as createBackgroundJobsTable,pa as createBranchesTable,na as createCommitBranchesTable,ca as createCommitsTable,ba as createEditorScenariosTable,Ta as createEntitiesTable,da as createEntityBranchesTable,ua as createEntityStatementsTable,ha as createFilesTable,Ca as createGithubPayloadsTable,Sa as createGithubUsersTable,ya as createProjectsTable,Ba as createScenarioCommentsTable,Aa as createScenariosTable,Ea as createSqliteSchema,Pa as createStatementsTable,ga as createTeamsTable,ja as createUserScenariosTable,Fa as createUserTeamsTable,Ua as createUsersTable,Da as dbToAnalysis,Ga as dbToAnalysisBranch,Ma as dbToBranch,qa as dbToCommit,Ja as dbToEntity,fa as dbToFile,ka as dbToProject,xa as dbToScenario,Ha as dbToUserScenario,La as deleteScenarios,va as generateSha,wa as getDatabase,za as getJsonHelper,Ia as getPostgreDatabase,Ka as getSqliteDatabase,Na as loadAnalyses,Oa as loadAnalysis,Qa as loadBranches,Ra as loadCommitBranches,Va as loadCommits,Wa as loadEntities,Xa as loadEntity,Ya as loadFiles,Za as loadProject,_a as updateCommitMetadata,$a as updateFreshAnalysisMetadata,ae as updateFreshAnalysisStatus,ee as updateProjectMetadata,se as upsertBranches,te as upsertCommitBranches,re as upsertCommits,oe as upsertGithubUser,ie as upsertProjects,me as upsertScenarios};
1
+ import"fetch-retry";import{K as Z,N as _,Q as $,R as aa,U as ea,W as sa,Z as ta,a1 as ra,a4 as oa,J as ia,L as ma,M as la,O as pa,P as na,S as ca,T as ba,V as Ta,X as da,Y as ua,_ as ha,$ as Ca,a0 as Sa,a2 as ya,a3 as Ba,a5 as Aa,I as Ea,a6 as Pa,a7 as ga,a8 as ja,aa as Fa,a9 as Ua,d as Da,a as Ga,b as Ma,c as qa,e as Ja,f as fa,g as ka,h as xa,i as Ha,j as La,k as va,E as wa,H as za,G as Ia,F as Ka,l as Na,m as Oa,n as Qa,o as Ra,p as Va,q as Wa,r as Xa,s as Ya,t as Za,u as _a,v as $a,w as ae,x as ee,y as se,z as te,A as re,B as oe,C as ie,D as me}from"./server-build-i8OXK4oL.js";import"typescript";import"react/jsx-runtime";import"node:stream";import"@react-router/node";import"react-router";import"isbot";import"react-dom/server";import"react";import"lucide-react";import"better-sqlite3";import"pg";import"fs";import"path";import"kysely";import"kysely/helpers/sqlite";import"kysely/helpers/postgres";import"fs/promises";import"os";import"prompts";import"chalk";import"crypto";import"child_process";import"url";import"util";import"dotenv";import"events";import"uuid";import"http";import"net";import"ws";import"node-pty";import"openai";import"p-queue";import"p-retry";import"@aws-sdk/client-dynamodb";import"lru-cache";import"pluralize";import"piscina";import"json5";import"@aws-sdk/util-dynamodb";import"v8";import"react-syntax-highlighter";import"react-syntax-highlighter/dist/cjs/styles/prism/index.js";import"node:crypto";import"minimatch";import"react-markdown";import"remark-gfm";import"react-diff-viewer-continued";export{Z as AnalysisBranchesTableColumns,_ as BranchesTableColumns,$ as CommitsTableColumns,aa as CommitsTableColumnsLite,ea as EntitiesTableColumns,sa as EntityBranchesTableColumns,ta as FilesTableColumns,ra as ProjectsTableColumns,oa as ScenariosTableColumns,ia as createAnalysesTable,ma as createAnalysisBranchesTable,la as createBackgroundJobsTable,pa as createBranchesTable,na as createCommitBranchesTable,ca as createCommitsTable,ba as createEditorScenariosTable,Ta as createEntitiesTable,da as createEntityBranchesTable,ua as createEntityStatementsTable,ha as createFilesTable,Ca as createGithubPayloadsTable,Sa as createGithubUsersTable,ya as createProjectsTable,Ba as createScenarioCommentsTable,Aa as createScenariosTable,Ea as createSqliteSchema,Pa as createStatementsTable,ga as createTeamsTable,ja as createUserScenariosTable,Fa as createUserTeamsTable,Ua as createUsersTable,Da as dbToAnalysis,Ga as dbToAnalysisBranch,Ma as dbToBranch,qa as dbToCommit,Ja as dbToEntity,fa as dbToFile,ka as dbToProject,xa as dbToScenario,Ha as dbToUserScenario,La as deleteScenarios,va as generateSha,wa as getDatabase,za as getJsonHelper,Ia as getPostgreDatabase,Ka as getSqliteDatabase,Na as loadAnalyses,Oa as loadAnalysis,Qa as loadBranches,Ra as loadCommitBranches,Va as loadCommits,Wa as loadEntities,Xa as loadEntity,Ya as loadFiles,Za as loadProject,_a as updateCommitMetadata,$a as updateFreshAnalysisMetadata,ae as updateFreshAnalysisStatus,ee as updateProjectMetadata,se as upsertBranches,te as upsertCommitBranches,re as upsertCommits,oe as upsertGithubUser,ie as upsertProjects,me as upsertScenarios};
@@ -0,0 +1,14 @@
1
+ import*as c from"fs/promises";import*as h from"fs";import*as e from"path";import x from"chalk";import{execSync as F}from"child_process";import{h as E,s as P,e as v,P as _,i as B,w as I}from"./progress-CHTtrxFG.js";import{ao as W,ap as R,aq as M,ab as O,ad as T,ar as A,as as G,at as N,F as U,I as q,an as Y,au as z,av as J,x as D}from"./server-build-i8OXK4oL.js";import"fetch-retry";import"typescript";import{fileURLToPath as L}from"url";import"cli-spinners";import"react/jsx-runtime";import"node:stream";import"@react-router/node";import"react-router";import"isbot";import"react-dom/server";import"react";import"lucide-react";import"better-sqlite3";import"pg";import"kysely";import"kysely/helpers/sqlite";import"kysely/helpers/postgres";import"os";import"prompts";import"crypto";import"util";import"dotenv";import"events";import"uuid";import"http";import"net";import"ws";import"node-pty";import"openai";import"p-queue";import"p-retry";import"@aws-sdk/client-dynamodb";import"lru-cache";import"pluralize";import"piscina";import"json5";import"@aws-sdk/util-dynamodb";import"v8";import"react-syntax-highlighter";import"react-syntax-highlighter/dist/cjs/styles/prism/index.js";import"node:crypto";import"minimatch";import"react-markdown";import"remark-gfm";import"react-diff-viewer-continued";function H(a){try{const r=F("git config --get remote.origin.url",{cwd:a,encoding:"utf8"}).trim().match(/github\.com[:/]([^/]+)\/([^/]+?)(?:\.git)?$/);if(r)return`${r[1]}-${r[2]}`}catch{}return e.basename(a)}const V=L(import.meta.url),K=e.dirname(V);async function g(a,t){await c.mkdir(t,{recursive:!0});const r=await c.readdir(a,{withFileTypes:!0});for(const i of r){const s=e.join(a,i.name),o=e.join(t,i.name);i.isDirectory()?await g(s,o):(await c.copyFile(s,o),(i.name.endsWith(".sh")||i.name.endsWith(".mjs"))&&await c.chmod(o,493))}}async function Q(a,t){const r=(t==null?void 0:t.mode)??"memory";try{const i=e.join(a,".claude","skills"),s=e.join(K,"../../templates"),o=e.join(s,"skills"),n=e.join(s,"commands"),p=e.join(i,"codeyam-memory"),u=e.join(i,"codeyam-new-rule");await g(e.join(o,"codeyam-memory"),p),await g(e.join(o,"codeyam-new-rule"),u);const w=r==="editor"||(t==null?void 0:t.editorMode)===!0;if(w){const d=e.join(i,"codeyam-editor");await g(e.join(o,"codeyam-editor"),d);let f="claude";try{const l=e.join(a,".codeyam","config.json");f=JSON.parse(await c.readFile(l,"utf8")).provider||"claude"}catch{}if(f==="gemini"){const l=e.join(a,"GEMINI.md");try{await c.access(l)}catch{await c.copyFile(e.join(s,"codeyam-editor-gemini.md"),l)}}else if(f==="codex"){const l=e.join(a,"AGENTS.md");try{await c.access(l)}catch{await c.copyFile(e.join(s,"codeyam-editor-codex.md"),l)}}else{const l=e.join(a,"CLAUDE.md");try{await c.access(l)}catch{await c.copyFile(e.join(s,"codeyam-editor-claude.md"),l)}}const m=e.join(a,".codeyam","docs");await c.mkdir(m,{recursive:!0}),await c.copyFile(e.join(s,"codeyam-editor-reference.md"),e.join(m,"editor-reference.md"))}if(r==="full"){const d=e.join(i,"codeyam-setup"),f=e.join(i,"codeyam-sim"),m=e.join(i,"codeyam-test"),l=e.join(i,"codeyam-verify"),S=e.join(i,"codeyam-dev-mode");await g(e.join(o,"codeyam-setup"),d),await g(e.join(o,"codeyam-sim"),f),await g(e.join(o,"codeyam-test"),m),await g(e.join(o,"codeyam-verify"),l),await g(e.join(o,"codeyam-dev-mode"),S);const k=e.join(a,".claude","commands");await c.mkdir(k,{recursive:!0}),await c.copyFile(e.join(n,"codeyam-diagnose.md"),e.join(k,"codeyam-diagnose.md"))}const y=e.join(a,".codeyam","bin");await c.mkdir(y,{recursive:!0});const j=e.join(a,".codeyam","rules");if(await c.mkdir(j,{recursive:!0}),w){try{const d=e.join(y,"editor-step-hook.py");await c.copyFile(e.join(s,"editor-step-hook.py"),d),await c.chmod(d,493)}catch{}try{const d=e.join(s,"seed-adapters"),f=e.join(a,".codeyam","seed-adapters");await g(d,f)}catch{}}try{const d=e.join(y,"memory-hook.sh");await c.copyFile(e.join(s,"codeyam-memory-hook.sh"),d),await c.chmod(d,493)}catch{}try{const d=e.join(y,"rule-reflection-hook.py");await c.copyFile(e.join(s,"rule-reflection-hook.py"),d),await c.chmod(d,493)}catch{}try{const d=e.join(y,"rule-notification-hook.py");await c.copyFile(e.join(s,"rule-notification-hook.py"),d),await c.chmod(d,493)}catch{}try{const d=e.join(y,"prompts");await c.mkdir(d,{recursive:!0});const f=await c.readdir(e.join(s,"prompts"));for(const m of f)await c.copyFile(e.join(s,"prompts",m),e.join(d,m))}catch{}try{await c.copyFile(e.join(s,"rules-instructions.md"),e.join(j,"instructions.md"))}catch{}return{success:!0,skillsPath:e.relative(a,i)}}catch(i){return{success:!1,error:i instanceof Error?i.message:String(i)}}}function X(a,t){const r=(t==null?void 0:t.mode)??"memory";try{const i=e.join(a,".claude"),s=e.join(i,"settings.local.json");h.existsSync(i)||h.mkdirSync(i,{recursive:!0});let o={};if(h.existsSync(s))try{const d=h.readFileSync(s,"utf8");o=JSON.parse(d)}catch{console.warn(`Warning: Could not parse ${s}, will create new file`)}o.permissions||(o.permissions={}),o.permissions.allow||(o.permissions.allow=[]);const n=["Skill(codeyam-memory)","Skill(codeyam-new-rule)","Bash(codeyam)","Bash(codeyam:*)","Read(.codeyam/**)","Edit(.codeyam/**)","Write(.codeyam/**)","Glob(.codeyam/**)"],p=["Skill(codeyam-setup)","Skill(codeyam-sim)","Skill(codeyam-debug)","Skill(codeyam-test)","Skill(codeyam-verify)","Skill(codeyam-dev-mode)","Read(/tmp/**)","Edit(/tmp/**)","Write(/tmp/**)","Glob(/tmp/**)","Bash(npm install:*)","Bash(npm run:*)","Bash(npx:*)","Bash(node:*)","Bash(cp:*)","Bash(mkdir:*)","Bash(chmod:*)","Bash(rm:*)","Bash(curl:*)","Bash(sleep:*)","Bash(echo:*)","Bash(grep:*)","Bash(python3:*)","Bash(cat:*)","Bash(printf:*)","Bash(ls:*)"],u=["Skill(codeyam-editor)","Bash(git:*)","Edit(**)","Write(**)"],w=r==="editor"||(t==null?void 0:t.editorMode)===!0;let y;if(r==="full"?y=[...n,...p]:r==="editor"?y=[...n,...u,...p]:y=n,w&&r!=="editor")for(const d of[...u,...p])y.includes(d)||y.push(d);let j=!1;for(const d of y)o.permissions.allow.includes(d)||(o.permissions.allow.push(d),j=!0);if(w){o.hooks||(o.hooks={});const d='test -f "$CLAUDE_PROJECT_DIR"/.codeyam/bin/editor-step-hook.py && python3 "$CLAUDE_PROJECT_DIR"/.codeyam/bin/editor-step-hook.py || true';for(const f of["PostToolUse","Stop","UserPromptSubmit"]){const m=o.hooks[f]||[];m.some(S=>{var k;return(k=S.hooks)==null?void 0:k.some(C=>{var $;return($=C.command)==null?void 0:$.includes("editor-step-hook")})})||(m.push({hooks:[{type:"command",command:d,timeout:5}]}),o.hooks[f]=m,j=!0)}}return j&&h.writeFileSync(s,JSON.stringify(o,null,2),"utf8"),!0}catch(i){return console.warn(`Warning: Could not configure Claude Code settings: ${i.message}`),!1}}function Z(a){return h.existsSync(a)?h.readFileSync(a,"utf8").split(`
2
+ `).map(r=>r.trim()).filter(r=>r&&!r.startsWith("#")).map(r=>r.startsWith("/")?r.slice(1):r):[]}function ee(a){const t=[];function r(i){const s=e.join(i,".gitignore");if(h.existsSync(s)){const o=Z(s),n=e.relative(a,i),p=o.map(u=>n?e.join(n,u):u);t.push(...p)}try{const o=h.readdirSync(i,{withFileTypes:!0});for(const n of o)n.isDirectory()&&n.name!=="node_modules"&&n.name!==".git"&&n.name!=="dist"&&n.name!=="build"&&r(e.join(i,n.name))}catch{}}return r(a),t}function te(a){let t=a.replace(/\/$/,"");const r=t.startsWith("**/");r&&(t=t.slice(3));const i=t.startsWith("/");return i&&(t=t.slice(1)),t=t.replace(/[.+^${}()|[\]\\*?]/g,"\\$&"),t=t.replace(/\\\*\\\*/g,".*").replace(/\\\*/g,"[^/]*").replace(/\\\?/g,"."),i&&!r?`^${t}(/.*)?$`:`^(.*/)?${t}(/.*)?$`}function oe(){return["^(.*/)?node_modules/.*$","^(.*/)?dist/.*$","^(.*/)?build/.*$","^(.*/)?\\.next/.*$","^(.*/)?out/.*$","^(.*/)?\\.cache/.*$","^(.*/)?__tests__/.*$","^(.*/)?__mocks__/.*$","^(.*/)?.+\\.test\\.(ts|tsx|js|jsx)$","^(.*/)?.+\\.spec\\.(ts|tsx|js|jsx)$","^(.*/)?test/.*$","^(.*/)?tests/.*$","^(.*/)?__test","^(.*/)?\\.git/.*$","^(.*/)?coverage/.*$","^(.*/)?\\.nyc_output/.*$","^(.*/)?\\.vscode/.*$","^(.*/)?\\.idea/.*$","^(.*/)?\\.DS_Store$"]}function ie(a){const t=oe();try{const i=ee(a).filter(o=>o.trim().length>0).map(o=>te(o)),s=[...t,...i];return Array.from(new Set(s))}catch(r){return console.warn("Failed to load gitignore patterns:",r),t}}const tt={command:"init",describe:"Initialize a project for CodeYam CLI analysis",builder:{force:{type:"boolean",alias:"f",describe:"Force initialization even if .codeyam already exists",default:!1},"keep-server":{type:"boolean",describe:"Skip stopping the running CodeYam server (use when running inside the editor)",default:!1},provider:{type:"string",describe:"The AI provider for the editor (claude, gemini, or codex)",choices:["claude","gemini","codex"],default:"claude"}},handler:async a=>{E("Initializing CodeYam CLI project");let t=W();if(t&&!a.force){P("Project already initialized. Use --force to reinitialize.");return}if(t||(t=process.cwd()),R(t)){v("Cannot initialize CodeYam in your home directory or filesystem root."),v("Please run codeyam init from inside a project directory.");return}M(t);const{running:r}=O();r&&!a["keep-server"]&&(T()?P("CodeYam server stopped"):v("Failed to stop CodeYam server - it may have already stopped"));const i=e.join(t,".codeyam"),s=e.join(i,"config.json"),o=new _;try{o.start("Setting up project scaffolding..."),await c.mkdir(i,{recursive:!0}),await ae(t),o.succeed("Project scaffolding ready");let n=H(t);try{const m=JSON.parse(h.readFileSync(s,"utf8"));m.projectSlug&&!m.projectSlug.startsWith("local-")&&(n=m.projectSlug)}catch{}const p=re(t);let u=[];try{u=A(t)}catch{}if(u.length>0){const m=u.map(l=>`${l.path==="."?"Root":l.path} (${l.framework})`).join(", ");B(`Found ${u.length} web application${u.length>1?"s":""}: ${m}`)}o.start("Configuring project...");const w=G(s),y={projectSlug:n,packageManager:p,webapps:u,environmentVariables:[],createdAt:new Date().toISOString(),provider:a.provider||"claude",handoff:{},...w};await c.writeFile(s,JSON.stringify(y,null,2));const j=N();if(!h.existsSync(j)){const m=U(j);await q(m)}if(!await I(()=>Y())){o.fail("Environment validation failed");return}try{const{project:m}=await z({slug:n,packageManager:p,unapprovedPaths:ie(t),webapps:u});o.succeed("Project configured"),o.start("Installing Claude Code skills...");const l=!!a["keep-server"],S=await Q(t,{mode:l?"editor":"memory",editorMode:l}),{branch:k}=await J(m);y.branchId=k.id,await c.writeFile(s,JSON.stringify(y,null,2)),X(t,{mode:l?"editor":"memory",editorMode:l}),S.success?o.succeed("Claude Code skills installed"):o.warn("Could not install skills");try{a["keep-server"]?await D({projectSlug:n,metadataUpdate:{editorMode:!0,labs:{simulations:!0}}}):await D({projectSlug:n,metadataUpdate:{labs:{simulations:!1}}})}catch{}y.aiMode="interactive"}catch(m){o.fail("Failed to create project"),v(m.message);return}const f=u.length>0?`, ${u.map(m=>m.framework).join(", ")}`:"";console.log(),P(`✨ Initialized ${n} (${p}${f})`),a.autoInit||(console.log(),console.log(x.bold(' Run "codeyam" to start the dashboard')),console.log(' Run "codeyam --help" for all commands'))}catch(n){o.fail("Failed to initialize project"),v(n.message),process.exit(1)}}};function re(a){return h.existsSync(e.join(a,"pnpm-lock.yaml"))?"pnpm":h.existsSync(e.join(a,"yarn.lock"))?"yarn":(h.existsSync(e.join(a,"package-lock.json")),"npm")}const b=[".codeyam/db.sqlite3",".codeyam/db.sqlite3-wal",".codeyam/db.sqlite3-shm",".codeyam/secrets.json",".codeyam/server.json",".codeyam/server-state.json",".codeyam/queue.json",".codeyam/active-scenario.json",".codeyam/editor-step.json",".codeyam/editor-user-prompt.txt",".codeyam/claude-session-id.txt",".codeyam/editor-mode-context.md",".codeyam/dev-mode-context.md",".codeyam/handoff-context.md",".codeyam/logs/",".codeyam/llm-calls/",".codeyam/captures/",".codeyam/results/",".codeyam/tmp/",".codeyam/rules/",".codeyam/bin/",".codeyam/docs/"];async function ae(a){const t=e.join(a,".gitignore");let r="";try{r=await c.readFile(t,"utf8")}catch{}const i=r.split(`
3
+ `),s=i.findIndex(n=>n.trim()===".codeyam"||n.trim()==="/.codeyam");if(s!==-1){const n=s>0&&i[s-1].trim().startsWith("# CodeYam local files")?s-1:s;i.splice(n,s-n+1),r=i.join(`
4
+ `)}if(b.some(n=>i.some(p=>p.trim()===n))){const n=b.filter(p=>!i.some(u=>u.trim()===p));if(n.length>0){const p=r+(r&&!r.endsWith(`
5
+ `)?`
6
+ `:"")+n.join(`
7
+ `)+`
8
+ `;await c.writeFile(t,p,"utf8")}}else{const n=`
9
+ # CodeYam - local only (not shared)
10
+ `+b.join(`
11
+ `)+`
12
+ `,p=r+(r&&!r.endsWith(`
13
+ `)?`
14
+ `:"")+n;await c.writeFile(t,p,"utf8")}}export{tt as default};