From 0cf4d6879dc3297a66a76e7f4e2d6e7cc518d77d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 13 Apr 2026 02:30:33 +0000 Subject: [PATCH 1/9] Plan index storage migration to root-unit codc/s_idx Agent-Logs-Url: https://github.com/DanexCodr/Coderive/sessions/e13fd319-117a-4f4f-9d62-8b94390adb90 Co-authored-by: DanexCodr <216312766+DanexCodr@users.noreply.github.com> --- source_.jar | Bin 354869 -> 354869 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/source_.jar b/source_.jar index e93cc14b9eb1273c0fc88c4dfc40e808f4f2c503..0d51494801d5fcd703f1c25bc7c506e95e03a17b 100644 GIT binary patch delta 12810 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 delta 12810 zcmZuX2Y6J~(tGdSld{?LLb55FMgl3M5g>#>7D5ORQfLAp^cF;lA_5|?JVX$I#DyG0 zrRe^MN>TD~rGo_p>7arjg3qUv1j4gCBoO|YIX9c^=H2hxJ$I*{nK^UX?ztGa=VG9~ zq`#uoX*6zb8k=vGK3<0J%>MYjBwF6>TeUSFzt1GXx8=yXP)oVa-4ZG3@n;9ABQ_JH zF4%08wqRqDv#?npcgN;{+#4H3*@(@%N+C2g_myx7TOT%_+UH$N)PCwZiP}i_NNg=V zbwjb)p!)%vOI_0W0#~LtD4J%Icl)jy`D@(ho%=N!%_hl`niYpMp%!obm&kKKPPY_$ zx>~$F$>4C$j}dy-vkaP=WUn)%uF?B4sXH(zok!}JhnJ%QOROJ9u7iGCv6<+<0-JjO zJZw4z5b#<+KK!bQ3mip~-YiSEd>Z77pl^aaWh6vPN(`>fvZF#8kSfBEL#C96W>dQ% zYyq{w5jtvPjpf){%2U%Vjgjt_Ly_2@nv;=hyal)qHd|AF$L7s66C$srCD?iHc6N8x zJSgKfQuXLqL>ks)w#W9}eVyp%fzAeEzSN~3QpIMC*FkGp(Q7O=wY}=FsrOIkMQxai zljxeL-iN8r4@ai+CvBL{5>Y_rCKcSa!w&>AU8_j`mU`;&7Kr3@$x>1t$C1XevHz#2 zYgl0^G&LUTB=Oq0|3H3JKCGQl#jNzDOs?x)RoxR4vZuA z1B3daRM)}72|R8{4H{U}W>_Y*MI-tX*_&m(5PZEXn0`JSS%5$D%1<(AEq>z%V>4y^ zBWxy37=Xw<6Z#Nsb6+ ztlsN`hSqF8I5PoS2T5K|!LAv2Gn%ZPb1%Rjh;6UQ(k2Ahl6BH@3Xus6@$`}WT4h|1 zqv;8SibnIT53hVd4z7-n+-*i5X)1cnw$fiJMr&+W!=+N}w=E@7`UUN>1-6y`6O1qJ z-K7dQe3_jum12>!eKkw^ksw>=OZPnh!rxdXWgzDCGO4Gh7nZDu2Xm)#Nux1q`O$rH zFkha*d~Eq^B}!`Bt##6B(mQXnG#1@ryZXL#fMjmiEhUj9U;k5zA|IDb3*~Q@$vWw?;V*Y+0O(fo~-$_n{2>fi8!bBl3jRXPZ>4X^u6RAp7^rAMD|9HBTXj+Xot$~=uGZC zTs}&DkKFfS@S8BmgCt(BSAuzEHVfunBjo=>sy!p*Z?NrB4XM@^9=dbt3vU;VW_KXJZv;1f1pKx`pUd$WBHM4rEGJs1iVqJsYmjQowdKLZLa#_HUyi(tbje(uJ(w7_Agi z2Ww*l_nlbPqrq{Co-lFoN)^i88?QtV&*gSXS9%Fd0GA>vJW=tcmkvq7`?kDfRm`jo z3au&l+bPPQqH~wu_PPXJSgZD*-2d%U%$J`}Rer{ve3GX8h3(FC5xO@slu{CZx1(}{ zUe0w=HDB(m3=^IyyBYl!M)en-7OzC}F1x zfs?1rTA>Wa5o3EeUHKlh!Gb5WIub~MDS+R3K&xO|$UMb{!`*g%sY0`&ZR0Y97PdBJ zxk5FoC8M7EjAL&67*qW2nqV z9ar39P-kMTvX@Z5HYlZ`2+3-ror6mb+s8Atr>KB0UZS-ivE^DoC{Nw0O@wz|zEw+! zmj9mi2L5ipO^e|oKZYOE`tUCAYsnq??`!{}m+qfvKl7%bYXhDipXRC27_xcPRv2@+ z70lI^d`#PqY@2sMd)bxfF1`>hO@R`X7l>oiXj^neyOgRE`&s)cO(|8i+UKZDx%{bZ z(7~o--A-m$7tTWQwJXcTW&y*+1tMJPOdB96_$-+PhT{N&9~v3I-~oHo$466FEitOB zkrFc~b*6etsV>l~1Qv4virDHvk8i{iE}9>eSV((Eq@!p7Hbu1%w{ za!JbyQEsu8wxR_X$je3yE}NER;n0PD#nogScdHeRl_uxr`N)<%~oI zxRb~+?q0l(36TwmsWWxbVJG5wt_w3F!&nz$SltZv=X+gPd@F|~+4VsvOjA8TK{V|O zc?Z}UqNr}JB=1o zEAQaJ`k@_OZOD#a{K=nQdgj89cnE)<_8`L(0-8`*Wq6{V7|sV+N+-wgX?lhWZ*E4Y z)ochvsAYIy2Uy_=DUE`Deh^9N?#XBcSL#XhhY4zV9Ms-UkGT(yIUNk{YR|pBgp_bE zq7MuKXm+b0d@YYZS`U3|gg~S<^$}Vt-{i%5k|)k6r$*lbP&TA)CkK*7FV=^$?V?TI z83hs=A(ZI;rpIbt9R_MU^S8WJ&;R3x{?FS0Z3b#|ZPR1rXS`Vf30tzu{6+)7H-WzV zCOotdM|S?ojYenEXfj)h;ZJ;6eiJ|Vt2C7o zdQB?KQNF@w8-2-V8=5h{`LZD7d4iZa)0#9YC_LAXc_FyOj~LFY;3_|c`vI~Ls2kHM zw)Z-_@p?Zswt}Hg2IWEzf7X$F{i<>E&HG^N4Cp)9ZGWu1(w_|^k{zQX7M=&h1t4)O zPEY(raT*Xn#_a5*Y7OM?1~4Nr7nnnS+5yZ4aDS;?I*qviHjYRT3Zm(8s2qG$Aj`pC zy&XvMgR{^F9r&$4wZNacy;iwt61T#p7!o#}BgbpTF! z+EG_cN5Z8^pl>65u<$iKR`c+ZCdx2AAymxNYBA|jN+>)J;+I0z`SFG)4(}>n~a0j%2UD_9s%){ z;UsnF5R__JJi^1WX-G7GIzlyT!Mj_G7r~@?uzc$6ARsD&4J98KE*v{v3#bCn(VU`~ ze?3R2LSy(<5Qys3`n#qKs!j|~G%_EA<`~I{ivqgP$nZ#mtLb%jBy~77l6iPKuAJ%x zTbJ@Cf|ypLt+}}3n3)-=7T2f+zlB$U&E?Rw;+EYqj~ovpJjL?f_-NiPN_7GfG-X%w zxIlrWQ7o5qE*vty;Wm(c2Leqk1@fIyY#{lmrIh9fV~+l3BI@MDkYm{Ir!m*8<^hwM zpx&0+$*op(YDQ*G2CDA7Ta55;zZl}JBBZ2&_}=mtHN($Suz^^P)PU;X;XPYTh(k_>FIF&BU41%W1+jKc2%&(N0Nq}Yb zayT_>r}}bkVUp)Q@Z(kwjV8{4`$jv4$FJPbp123DCT?ERo&{3x`yTVj-VK~lusLzi zYd%>?q_0=GwKDcv`}wO^Lpp1<8cn2wy3_4h8mf~LCnuk%1@IXO zB9b$^67*Mu8d@nqxnLMQk!maEw`&PPiEkqHX;d}vM_b;i4&WyeRfpX0e%0eSaA$3( z^Te<^QJoknEBbD?xoI>x$xbBZXSR~S54X1ADM@P5C6TImyU@>H35!^6yTAOQW#&DD!O!E;N05^Tv8f~rLw!^ymf5^gx3(`Y{N5Y z!iHUGq-;vQ;JlqCa@8Z9!24$jaDF;7(ntx~_h>1OFCENe&7~eEvkmhF>4o{=A+)R2 zToc&jPgc6thPPnP8ZLYCl5ExUg5a1+P?@cce z5TgG+Z&kJltjdFr<(SklTN8SEB9Qf9HJZEnNM>#A`%==r?*Utd2yp|)pvLT1u z)^%13fghP=E&mpzVm{Off_={l0%Lb^uBaaEU3*S|XY_zOffu_o4>Ek(X4>-?2KI7q(#9w-83&Hqb;Rv*egGVH7awfyuFCp37w&splu(d1ZqeglsvakOPU? zuvEyUE5PEVvYz)dsXgfVW2eaN;G{fYbd2-(ms>EcF)=*F=O38JQ>DvV;BJ`2xO^yZ z70X-THZBKcIX#7&`}ZW~c57P@l;ef=N+6&v^tm$Q0Up0S1)oUxG(A@HA1#^A_EeXI zE62Z_I2DK%!N+mbytJ-`66mrkZ`+FnVi(jAm{ctYruP!3XXajH+;|mS(@QK+u#&*) z!Gq`KvCvklhY|iO^X7uPvtdEyP!D% zx~sR?C7kL_{eE&zfLT5Zr-b`@N0+y(u*~{7z{zgjBVU~MEX*g)#aHKR%gP@Of`G0XiwYQC3-Pi7lAiLY1&$YpDz!`CiW>#aCsy&`wFNAI z!ujm$%AbA^&O#WAZCi%NJoAa&5dT(*^1|p#XFmY)3}A)1)Bafb%)TreE!xqSEV4=b z=rHi+?Y?wSSly4Hr)3^B02ZIw{Zt=koxGlL1*9ASd5&gmQUvL$e(J$$KuyT(&w+Fa zkUEqbexx7ErB3zkv-X)^fTRLCm1wsO%h)LotpsP z?$1IfiTJ;4Yqx;F-{Ip>U3g?6%Ou?aYpzOGK!<{Pj=JGGhC1C%r?i^jKPn_U>Q$0E zg=%M;FR-1Y@rVHoFD?1V0mOMp&#MNp2)-VElBpdNtZ$qFJ8pp;j{DLx1Jpsap*e?K8{Xb=PgV`{6e6#Lc3jZ4@M5YEQdfr$pjMJBpy8i~LxHgI} zA6BB)pyo?*iwhX-OHd7)r;?4 z+&t_a#O{0GaabDga|2m-41(_<()xO|U@siR+LHf0tM;zk1DvSMp@{RShM_E!M&7c>;)BOQ>PV34P#Db7NrH59 zG1KzVNs13GUdR(CfBJp)4Pa8h=N+JJdaQicP=^1D;`Kwxl!+aLjEx->H@;0>H=CX! zTvdv|EqF>)l??*CJXL_<9}i*<>bULZJGeNB0Sg_Kc@GoHN`{fZchUvt%3*39NSV5` z$``nB$>ca-4h>_O)RWr3OMiJ2NakssOR~>!QIZD?C*faq62cohK~E}&i~QUuaHl#8 z+~wgS-uDGKK1+b%uNLmD=7Mcg5+ARG)j%+u;yIKNK57K(M7E7P@$|K6?(mNdxSw() z`4~tjdc$vxFa0-|ALQbk{4e!E<-y!oCcLYjLT=?-0MN>sgm*u9<1%;&=Xys~o61yG z>vBIkB!Q|r_&7Mz+)#+B0=RcS#g+SvWNpYa%n6W4PxCmoDwd=f0=VGnA5tlW1L>yMeO-aCCYSIDRz#oSueq!%;xC64jX zXl{3Lvc&8;&(21>i_p5Z72_)B!ZbZi45xc9!W6rRa><>zW69ETiPoFU$!8C|2PQ(GVJo$Ny;kNvCIzFXi{57()`SY7EF~>n7AKn z{yUWOO7H9xvC{LZAf12Tu(P}Iz7;Ht)K!KV?*_s)>j=!JklpsjYJR!aPVd4uSFlW? dzkl?(xIH?!BZczhu+uX?{G$cE&s5g-{{aSUV{8Bb From 06b7270f03f248f52668fbaf71f31248a0b32eb0 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 13 Apr 2026 02:32:02 +0000 Subject: [PATCH 2/9] Refactor index storage to root-unit codc and s_idx fallback Agent-Logs-Url: https://github.com/DanexCodr/Coderive/sessions/e13fd319-117a-4f4f-9d62-8b94390adb90 Co-authored-by: DanexCodr <216312766+DanexCodr@users.noreply.github.com> --- src/main/java/cod/interpreter/Index.java | 397 +++++++++++++++++------ src/main/java/cod/ir/IRManager.java | 50 ++- 2 files changed, 338 insertions(+), 109 deletions(-) diff --git a/src/main/java/cod/interpreter/Index.java b/src/main/java/cod/interpreter/Index.java index 6d76db6a..81c8ef43 100644 --- a/src/main/java/cod/interpreter/Index.java +++ b/src/main/java/cod/interpreter/Index.java @@ -1,19 +1,23 @@ package cod.interpreter; import cod.error.ProgramError; +import cod.ir.IRManager; import cod.lexer.*; import static cod.lexer.TokenType.*; import static cod.syntax.Symbol.*; import static cod.syntax.Keyword.*; import java.io.*; +import java.nio.charset.StandardCharsets; import java.util.*; /** * Index file for Coderive units. * Stores classname → filename mappings for O(1) import resolution. * - * File format: {projectRoot}/src/idx/{unit}.toml + * File format (preferred): {projectRoot}/src/bin/{rootUnit}.codc -> idx/{rootUnit}.toml + * Standalone fallback: {projectRoot}/src/bin/s_idx/{rootUnit}.toml + * Legacy fallback: {projectRoot}/src/idx/{unit}.toml * * Example: * # unit sample @@ -30,9 +34,14 @@ public final class Index { private static final String IDX_DIR_NAME = "idx"; + private static final String STANDALONE_IDX_DIR_NAME = "s_idx"; private static final String SRC_DIR_NAME = "src"; + private static final String BIN_DIR_NAME = "bin"; + private static final String CODC_EXTENSION = ".codc"; + private static final String CODB_EXTENSION = ".codb"; private static final String FILE_EXTENSION = ".toml"; private static final String CLASSES_SECTION = "classes"; + private static final String CLASSES_SECTION_PREFIX = CLASSES_SECTION + ":"; private static final String DEFAULT_GENERATOR = "Coderive 1.0"; private final String unit; @@ -82,16 +91,39 @@ public static String getProjectRoot() { return projectRoot; } - /** - * Gets the index file path for a unit. - */ - private static File getIndexFile(String unitName) { + private static String getRootUnit(String unitName) { + if (unitName == null || unitName.isEmpty()) return "default"; + int dot = unitName.indexOf('.'); + if (dot < 0) return unitName; + if (dot == 0) return "default"; + return unitName.substring(0, dot); + } + + private static String getUnitSectionName(String unitName) { + return CLASSES_SECTION_PREFIX + unitName; + } + + private static File getLegacyIndexFile(String unitName) { if (projectRoot == null) { return new File("src/" + IDX_DIR_NAME + "/" + unitName + FILE_EXTENSION); } - return new File(projectRoot + File.separator + SRC_DIR_NAME + + return new File(projectRoot + File.separator + SRC_DIR_NAME + File.separator + IDX_DIR_NAME + File.separator + unitName + FILE_EXTENSION); } + + private static File getStandaloneIndexFile(String rootUnit) { + if (projectRoot == null) { + return new File("src/" + BIN_DIR_NAME + "/" + STANDALONE_IDX_DIR_NAME + "/" + rootUnit + FILE_EXTENSION); + } + return new File(projectRoot + File.separator + SRC_DIR_NAME + File.separator + BIN_DIR_NAME + + File.separator + STANDALONE_IDX_DIR_NAME + File.separator + rootUnit + FILE_EXTENSION); + } + + private static File getCodcFile(String rootUnit) { + if (projectRoot == null) return null; + return new File(projectRoot + File.separator + SRC_DIR_NAME + File.separator + BIN_DIR_NAME + + File.separator + rootUnit + CODC_EXTENSION); + } /** * Creates a new index for the specified unit. @@ -134,71 +166,24 @@ public static Index load(String unitName) { if (unitName == null || unitName.trim().isEmpty()) { return null; } - - File file = getIndexFile(unitName); - if (!file.exists()) { + String rootUnit = getRootUnit(unitName); + String docText = loadPreferredDocumentText(unitName, rootUnit); + if (docText == null) { + docText = loadLegacyDocumentText(unitName, rootUnit); + } + if (docText == null) { return null; } - - BufferedReader reader = null; - try { - reader = new BufferedReader(new FileReader(file)); - Index index = new Index(unitName); - String currentSection = ""; - String line; - - while ((line = reader.readLine()) != null) { - line = line.trim(); - - if (line.isEmpty() || line.startsWith("#")) { - continue; - } - - if (line.startsWith("[") && line.endsWith("]")) { - currentSection = line.substring(1, line.length() - 1); - continue; - } - - int eq = line.indexOf('='); - if (eq == -1) { - continue; - } - - String key = line.substring(0, eq).trim(); - String value = line.substring(eq + 1).trim(); - - if (value.startsWith("\"") && value.endsWith("\"")) { - value = value.substring(1, value.length() - 1); - } - - if (currentSection.isEmpty()) { - if ("timestamp".equals(key)) { - try { - index.timestamp = Long.parseLong(value); - } catch (NumberFormatException e) { - // Keep existing timestamp - } - } else if ("generator".equals(key)) { - index.generator = value; - } - } else if (CLASSES_SECTION.equals(currentSection)) { - index.classes.put(key, value); - } - } - - return index; - - } catch (IOException e) { + + IndexDocument doc = parseDocument(docText, unitName); + Map unitMappings = doc.unitMappings.get(unitName); + if (unitMappings == null || unitMappings.isEmpty()) { return null; - } finally { - if (reader != null) { - try { - reader.close(); - } catch (IOException e) { - // Ignore - } - } } + + Index index = new Index(unitName, doc.timestamp, doc.generator); + index.classes.putAll(unitMappings); + return index; } /** @@ -207,42 +192,28 @@ public static Index load(String unitName) { * @return true if saved successfully, false otherwise */ public boolean save() { - File file = getIndexFile(unit); - - File parent = file.getParentFile(); - if (parent != null && !parent.exists()) { - if (!parent.mkdirs()) { - return false; - } + String rootUnit = getRootUnit(unit); + IndexDocument merged = loadExistingDocument(unit, rootUnit); + merged.timestamp = timestamp; + merged.generator = (generator == null || generator.isEmpty()) ? DEFAULT_GENERATOR : generator; + merged.unitMappings.put(unit, new HashMap(classes)); + + String documentText = writeDocumentText(rootUnit, merged); + + if (projectRoot == null) { + return saveLegacyFallback(unit, documentText); } - - PrintWriter writer = null; + + if (shouldUseStandaloneIndex(rootUnit)) { + return saveStandaloneIndex(rootUnit, documentText); + } + + IRManager manager = new IRManager(projectRoot); try { - writer = new PrintWriter(new FileWriter(file)); - - writer.println("# unit " + unit); - writer.println("timestamp = \"" + timestamp + "\""); - writer.println("generator = \"" + generator + "\""); - writer.println(); - writer.println("[" + CLASSES_SECTION + "]"); - - List sorted = new ArrayList(classes.keySet()); - Collections.sort(sorted); - - for (String className : sorted) { - String fileName = classes.get(className); - writer.println(className + " = \"" + fileName + "\""); - } - - writer.flush(); + manager.saveIndex(unit, documentText); return true; - } catch (IOException e) { - return false; - } finally { - if (writer != null) { - writer.close(); - } + return saveStandaloneIndex(rootUnit, documentText); } } @@ -562,10 +533,232 @@ public Map getMappings() { } // ========== Private Helpers ========== - + + private static String loadPreferredDocumentText(String unitName, String rootUnit) { + if (projectRoot == null) { + return null; + } + + IRManager manager = new IRManager(projectRoot); + String content = manager.loadIndex(unitName); + if (content != null) { + return content; + } + + File standalone = getStandaloneIndexFile(rootUnit); + if (standalone.exists()) { + try { + return readFileToString(standalone); + } catch (IOException ignored) {} + } + return null; + } + + private static String loadLegacyDocumentText(String unitName, String rootUnit) { + File unitLegacy = getLegacyIndexFile(unitName); + if (unitLegacy.exists()) { + try { + return readFileToString(unitLegacy); + } catch (IOException ignored) {} + } + + if (!rootUnit.equals(unitName)) { + File rootLegacy = getLegacyIndexFile(rootUnit); + if (rootLegacy.exists()) { + try { + return readFileToString(rootLegacy); + } catch (IOException ignored) {} + } + } + return null; + } + + private static IndexDocument loadExistingDocument(String unitName, String rootUnit) { + String content = loadPreferredDocumentText(unitName, rootUnit); + if (content == null) { + content = loadLegacyDocumentText(unitName, rootUnit); + } + if (content == null) { + return new IndexDocument(System.currentTimeMillis(), DEFAULT_GENERATOR, new HashMap>()); + } + return parseDocument(content, unitName); + } + + private static boolean shouldUseStandaloneIndex(String rootUnit) { + File codc = getCodcFile(rootUnit); + if (codc != null && codc.exists()) { + return false; + } + return hasStandaloneArtifacts(rootUnit); + } + + private static boolean hasStandaloneArtifacts(String rootUnit) { + if (projectRoot == null) return false; + File binDir = new File(projectRoot + File.separator + SRC_DIR_NAME + File.separator + BIN_DIR_NAME); + if (!binDir.exists() || !binDir.isDirectory()) { + return false; + } + + File[] children = binDir.listFiles(); + if (children == null) return false; + + for (File child : children) { + if (!child.isDirectory()) continue; + String name = child.getName(); + if (!(name.equals(rootUnit) || name.startsWith(rootUnit + "."))) { + continue; + } + if (containsCodb(child)) { + return true; + } + } + return false; + } + + private static boolean containsCodb(File dir) { + File[] files = dir.listFiles(); + if (files == null) return false; + for (File file : files) { + if (file.isDirectory()) { + if (containsCodb(file)) return true; + } else if (file.getName().endsWith(CODB_EXTENSION)) { + return true; + } + } + return false; + } + + private static boolean saveStandaloneIndex(String rootUnit, String content) { + File file = getStandaloneIndexFile(rootUnit); + File parent = file.getParentFile(); + if (parent != null && !parent.exists() && !parent.mkdirs()) { + return false; + } + return writeStringToFile(file, content); + } + + private static boolean saveLegacyFallback(String unitName, String content) { + File file = getLegacyIndexFile(unitName); + File parent = file.getParentFile(); + if (parent != null && !parent.exists() && !parent.mkdirs()) { + return false; + } + return writeStringToFile(file, content); + } + + private static boolean writeStringToFile(File file, String content) { + PrintWriter writer = null; + try { + writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream(file), StandardCharsets.UTF_8)); + writer.print(content); + writer.flush(); + return true; + } catch (IOException e) { + return false; + } finally { + if (writer != null) { + writer.close(); + } + } + } + + private static String writeDocumentText(String rootUnit, IndexDocument doc) { + StringBuilder out = new StringBuilder(); + out.append("# root-unit ").append(rootUnit).append("\n"); + out.append("timestamp = \"").append(doc.timestamp).append("\"\n"); + out.append("generator = \"").append(doc.generator).append("\"\n"); + out.append("\n"); + + List units = new ArrayList(doc.unitMappings.keySet()); + Collections.sort(units); + for (String unitName : units) { + out.append("[").append(getUnitSectionName(unitName)).append("]\n"); + Map mappings = doc.unitMappings.get(unitName); + List classNames = new ArrayList(mappings.keySet()); + Collections.sort(classNames); + for (String className : classNames) { + out.append(className).append(" = \"").append(mappings.get(className)).append("\"\n"); + } + out.append("\n"); + } + return out.toString(); + } + + private static IndexDocument parseDocument(String content, String fallbackUnitName) { + IndexDocument doc = new IndexDocument(System.currentTimeMillis(), DEFAULT_GENERATOR, new HashMap>()); + if (content == null) return doc; + + BufferedReader reader = new BufferedReader(new StringReader(content)); + String currentSection = ""; + try { + String line; + while ((line = reader.readLine()) != null) { + line = line.trim(); + if (line.isEmpty() || line.startsWith("#")) { + continue; + } + if (line.startsWith("[") && line.endsWith("]")) { + currentSection = line.substring(1, line.length() - 1); + continue; + } + + int eq = line.indexOf('='); + if (eq == -1) { + continue; + } + + String key = line.substring(0, eq).trim(); + String value = line.substring(eq + 1).trim(); + if (value.startsWith("\"") && value.endsWith("\"")) { + value = value.substring(1, value.length() - 1); + } + + if (currentSection.isEmpty()) { + if ("timestamp".equals(key)) { + try { + doc.timestamp = Long.parseLong(value); + } catch (NumberFormatException ignored) {} + } else if ("generator".equals(key)) { + doc.generator = value; + } + continue; + } + + String targetUnit = null; + if (CLASSES_SECTION.equals(currentSection)) { + targetUnit = fallbackUnitName; + } else if (currentSection.startsWith(CLASSES_SECTION_PREFIX)) { + targetUnit = currentSection.substring(CLASSES_SECTION_PREFIX.length()); + } + if (targetUnit == null || targetUnit.isEmpty()) continue; + + Map map = doc.unitMappings.get(targetUnit); + if (map == null) { + map = new HashMap(); + doc.unitMappings.put(targetUnit, map); + } + map.put(key, value); + } + } catch (IOException ignored) {} + + return doc; + } + + private static final class IndexDocument { + long timestamp; + String generator; + Map> unitMappings; + + IndexDocument(long timestamp, String generator, Map> unitMappings) { + this.timestamp = timestamp; + this.generator = generator; + this.unitMappings = unitMappings; + } + } + private static String readFileToString(File file) throws IOException { StringBuilder content = new StringBuilder(); - BufferedReader reader = new BufferedReader(new FileReader(file)); + BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8)); try { String line; while ((line = reader.readLine()) != null) { @@ -648,4 +841,4 @@ public Index build() { return index; } } -} \ No newline at end of file +} diff --git a/src/main/java/cod/ir/IRManager.java b/src/main/java/cod/ir/IRManager.java index 4b4c2524..c4f1f9a0 100644 --- a/src/main/java/cod/ir/IRManager.java +++ b/src/main/java/cod/ir/IRManager.java @@ -18,6 +18,7 @@ import java.io.InputStream; import java.nio.file.Files; import java.nio.file.StandardCopyOption; +import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; @@ -31,6 +32,7 @@ public class IRManager { private static final String BIN_DIR = "bin"; private static final String IR_EXT = ".codb"; private static final String CONTAINER_EXT = ".codc"; + private static final String INDEX_DIR = "idx/"; private static final int BUFFER_SIZE = 8192; private static final Map CONTAINER_LOCKS = new ConcurrentHashMap(); @@ -154,6 +156,26 @@ public void clearCache() { artifactCache.clear(); } + public String loadIndex(String unit) { + if (unit == null || unit.isEmpty()) return null; + String rootUnit = getRootUnit(unit); + String entryName = getIndexEntryName(rootUnit); + try { + byte[] data = readContainerEntry(unit, entryName); + if (data == null) return null; + return new String(data, StandardCharsets.UTF_8); + } catch (IOException e) { + return null; + } + } + + public void saveIndex(String unit, String indexContent) throws IOException { + if (unit == null || unit.isEmpty() || indexContent == null) return; + String rootUnit = getRootUnit(unit); + String entryName = getIndexEntryName(rootUnit); + writeContainerEntry(unit, entryName, indexContent.getBytes(StandardCharsets.UTF_8)); + } + public Map getCacheStats() { Map stats = new HashMap(); int total = 0; @@ -211,21 +233,35 @@ private String getContainerEntryName(String unit, String className) { return unit + "/" + className + IR_EXT; } + private String getIndexEntryName(String rootUnit) { + return INDEX_DIR + rootUnit + ".toml"; + } + private Artifact readArtifactFromContainer(String unit, String className) throws IOException { + byte[] data = readContainerEntry(unit, getContainerEntryName(unit, className)); + if (data == null) return null; + return readArtifactFromBytes(data); + } + + private void writeArtifactToContainer(String unit, String className, Artifact artifact) throws IOException { + if (unit == null || className == null || artifact == null) return; + writeContainerEntry(unit, getContainerEntryName(unit, className), writeArtifactToBytes(artifact)); + } + + private byte[] readContainerEntry(String unit, String entryName) throws IOException { + if (unit == null || entryName == null) return null; File container = getContainerFile(unit); if (!container.exists() || !container.isFile()) { return null; } - String targetEntry = getContainerEntryName(unit, className); ZipInputStream in = null; try { in = new ZipInputStream(new BufferedInputStream(new FileInputStream(container))); ZipEntry entry; while ((entry = in.getNextEntry()) != null) { - if (!entry.isDirectory() && targetEntry.equals(entry.getName())) { - byte[] data = readAllBytes(in); - return readArtifactFromBytes(data); + if (!entry.isDirectory() && entryName.equals(entry.getName())) { + return readAllBytes(in); } } return null; @@ -238,8 +274,8 @@ private Artifact readArtifactFromContainer(String unit, String className) throws } } - private void writeArtifactToContainer(String unit, String className, Artifact artifact) throws IOException { - if (unit == null || className == null || artifact == null) return; + private void writeContainerEntry(String unit, String entryName, byte[] value) throws IOException { + if (unit == null || entryName == null || value == null) return; File container = getContainerFile(unit); File parent = container.getParentFile(); @@ -250,7 +286,7 @@ private void writeArtifactToContainer(String unit, String className, Artifact ar Object containerLock = getContainerLock(container); synchronized (containerLock) { Map entries = readContainerEntries(container); - entries.put(getContainerEntryName(unit, className), writeArtifactToBytes(artifact)); + entries.put(entryName, value); File temp = new File(container.getAbsolutePath() + ".tmp"); ZipOutputStream out = null; From 8ef5be44810e76cb09fe9c4de9adf51f105b1b21 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 13 Apr 2026 02:33:05 +0000 Subject: [PATCH 3/9] Remove backward compatibility and fix compile issue for index layout Agent-Logs-Url: https://github.com/DanexCodr/Coderive/sessions/e13fd319-117a-4f4f-9d62-8b94390adb90 Co-authored-by: DanexCodr <216312766+DanexCodr@users.noreply.github.com> --- src/main/java/cod/interpreter/Index.java | 46 +----------------------- src/main/java/cod/ir/IRManager.java | 6 ++-- 2 files changed, 4 insertions(+), 48 deletions(-) diff --git a/src/main/java/cod/interpreter/Index.java b/src/main/java/cod/interpreter/Index.java index 81c8ef43..5c673d19 100644 --- a/src/main/java/cod/interpreter/Index.java +++ b/src/main/java/cod/interpreter/Index.java @@ -17,7 +17,6 @@ * * File format (preferred): {projectRoot}/src/bin/{rootUnit}.codc -> idx/{rootUnit}.toml * Standalone fallback: {projectRoot}/src/bin/s_idx/{rootUnit}.toml - * Legacy fallback: {projectRoot}/src/idx/{unit}.toml * * Example: * # unit sample @@ -33,7 +32,6 @@ */ public final class Index { - private static final String IDX_DIR_NAME = "idx"; private static final String STANDALONE_IDX_DIR_NAME = "s_idx"; private static final String SRC_DIR_NAME = "src"; private static final String BIN_DIR_NAME = "bin"; @@ -103,14 +101,6 @@ private static String getUnitSectionName(String unitName) { return CLASSES_SECTION_PREFIX + unitName; } - private static File getLegacyIndexFile(String unitName) { - if (projectRoot == null) { - return new File("src/" + IDX_DIR_NAME + "/" + unitName + FILE_EXTENSION); - } - return new File(projectRoot + File.separator + SRC_DIR_NAME + - File.separator + IDX_DIR_NAME + File.separator + unitName + FILE_EXTENSION); - } - private static File getStandaloneIndexFile(String rootUnit) { if (projectRoot == null) { return new File("src/" + BIN_DIR_NAME + "/" + STANDALONE_IDX_DIR_NAME + "/" + rootUnit + FILE_EXTENSION); @@ -168,9 +158,6 @@ public static Index load(String unitName) { } String rootUnit = getRootUnit(unitName); String docText = loadPreferredDocumentText(unitName, rootUnit); - if (docText == null) { - docText = loadLegacyDocumentText(unitName, rootUnit); - } if (docText == null) { return null; } @@ -201,7 +188,7 @@ public boolean save() { String documentText = writeDocumentText(rootUnit, merged); if (projectRoot == null) { - return saveLegacyFallback(unit, documentText); + return false; } if (shouldUseStandaloneIndex(rootUnit)) { @@ -554,30 +541,8 @@ private static String loadPreferredDocumentText(String unitName, String rootUnit return null; } - private static String loadLegacyDocumentText(String unitName, String rootUnit) { - File unitLegacy = getLegacyIndexFile(unitName); - if (unitLegacy.exists()) { - try { - return readFileToString(unitLegacy); - } catch (IOException ignored) {} - } - - if (!rootUnit.equals(unitName)) { - File rootLegacy = getLegacyIndexFile(rootUnit); - if (rootLegacy.exists()) { - try { - return readFileToString(rootLegacy); - } catch (IOException ignored) {} - } - } - return null; - } - private static IndexDocument loadExistingDocument(String unitName, String rootUnit) { String content = loadPreferredDocumentText(unitName, rootUnit); - if (content == null) { - content = loadLegacyDocumentText(unitName, rootUnit); - } if (content == null) { return new IndexDocument(System.currentTimeMillis(), DEFAULT_GENERATOR, new HashMap>()); } @@ -637,15 +602,6 @@ private static boolean saveStandaloneIndex(String rootUnit, String content) { return writeStringToFile(file, content); } - private static boolean saveLegacyFallback(String unitName, String content) { - File file = getLegacyIndexFile(unitName); - File parent = file.getParentFile(); - if (parent != null && !parent.exists() && !parent.mkdirs()) { - return false; - } - return writeStringToFile(file, content); - } - private static boolean writeStringToFile(File file, String content) { PrintWriter writer = null; try { diff --git a/src/main/java/cod/ir/IRManager.java b/src/main/java/cod/ir/IRManager.java index c4f1f9a0..ec24e0b2 100644 --- a/src/main/java/cod/ir/IRManager.java +++ b/src/main/java/cod/ir/IRManager.java @@ -274,8 +274,8 @@ private byte[] readContainerEntry(String unit, String entryName) throws IOExcept } } - private void writeContainerEntry(String unit, String entryName, byte[] value) throws IOException { - if (unit == null || entryName == null || value == null) return; + private void writeContainerEntry(String unit, String entryName, byte[] entryData) throws IOException { + if (unit == null || entryName == null || entryData == null) return; File container = getContainerFile(unit); File parent = container.getParentFile(); @@ -286,7 +286,7 @@ private void writeContainerEntry(String unit, String entryName, byte[] value) th Object containerLock = getContainerLock(container); synchronized (containerLock) { Map entries = readContainerEntries(container); - entries.put(entryName, value); + entries.put(entryName, entryData); File temp = new File(container.getAbsolutePath() + ".tmp"); ZipOutputStream out = null; From 7e9c27979e92513abe16c20ab71f6fb791ae9937 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 13 Apr 2026 02:41:36 +0000 Subject: [PATCH 4/9] Plan project-wide single codc container update Agent-Logs-Url: https://github.com/DanexCodr/Coderive/sessions/4406dea4-5099-4330-8990-ed9e8f0ac13b Co-authored-by: DanexCodr <216312766+DanexCodr@users.noreply.github.com> --- source_.jar | Bin 354869 -> 356177 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/source_.jar b/source_.jar index 0d51494801d5fcd703f1c25bc7c506e95e03a17b..359c7df5d4d7a66771b0526be0b90df09b7776a5 100644 GIT binary patch delta 18080 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 X=kLuS)*pY!(|dw^qzoWDE8_kSH5%?F delta 17135 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 }1?17Q7 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 From 895086c9eced5caff2374303d7cc528b89880c23 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 13 Apr 2026 02:43:05 +0000 Subject: [PATCH 5/9] Switch codc/index layout to single project-wide container Agent-Logs-Url: https://github.com/DanexCodr/Coderive/sessions/4406dea4-5099-4330-8990-ed9e8f0ac13b Co-authored-by: DanexCodr <216312766+DanexCodr@users.noreply.github.com> --- source_.jar | Bin 356177 -> 355431 bytes src/main/java/cod/interpreter/Index.java | 138 ++------------------ src/main/java/cod/ir/IRManager.java | 23 +--- src/main/java/cod/runner/CommandRunner.java | 4 +- src/main/java/cod/runner/TestRunner.java | 2 +- 5 files changed, 23 insertions(+), 144 deletions(-) diff --git a/source_.jar b/source_.jar index 359c7df5d4d7a66771b0526be0b90df09b7776a5..3378fbcd9747991a99ed2d485e8b28c1f1157664 100644 GIT binary patch delta 12564 zcmZ8{1yohr_cdI&bayw1qI63)NOyNiNtbW|5s>Z!s34L8(%p!l(k&q=-6;*<;obMW z|9d~iU|irV# z_&tsetKj0OAh0M6Ap@|}5Q$)}zZwqb+CvY!B;`ny`~w?%NJ$6%=Uj#=V{6A~$^?;X zWM-S}nRS+h-TZI&-_y%RWzU#=L-dz8Nhtk(vE2VcOrbGn8r8o`L3iC@WN&|msIS1K z(YKIVtwh*vb2YH*&p<}_*ke&AKQ|Sgy&>go8?BVmQ@eQ`C~f+++`c``aD4Oa#3`Sn zfmnGaar@$v+`b#K{^_WAggFoIsk)P(lq3iRvzLqzb#CZ!E^?eCQfDVuv7oq;R}lYI zN@X~y*XmF=njWVgb_(=@o!h6=A$5#Ddvf5$AQ%y1TVJzFMr*#>EbZPM&3*H9*JWXp zh0{Y*n^vDD8#mt8EA=yMCQXOx*Rz`#!V6>GO%7R}65jyY?6~Ls$WgP>(ki55;xOEx zxze&;21WzL=D2=RR|jZ73G>|?{QB*rG&D`Q+GrH{n3vipr09+m^EWceSLR|cAYTP?!4?w}g5^D(nFT1f=E zOO2}Rgle`GH*?m#6{pKFDBh*&_%*@(SLO3eB3D#KvRgsDeQ@#^+(TnHTDrgsPsGLhe*PkXE)2xMD)f|HaQtF zy7bYfc%k@86tGEl2WVoHX9-F*DeF>GI9FD<{hJnq**emy!lZR5#~xXu!?q4%zhS3K zUPVJe9=VaF<)0#pR(cu4C&6B8m{j`J&ufqDK0dO@j*9d7VQN1Y-t8oQ;#@%U?NOQSJYBfwD6PR~v=R=OzY0I!HS=qOHlUM--#t+ZeCyFuLX%*O3(bqq*ynVb9ljG*Oo=!R3G-{}Bc}BXs zjCWns7*d`Z=NwEwCMZ%bv-Ecj58jh~q{YPUC}3@0ufMMm_v4h}l@nu-BOSB>`Lp3K zZN3`E51k3H)f#tBoz2~|yW}cQ;kwbZ)Nuh-vz6xk7^aDD6MGN5U71QEOSe5{>#a|o zkOxj!TXR$PLVPnZGjS11Nl1myvd*|n5&0Kac zva|U^?MMCZQe)~giL_Lw?cOL>f37)B=W`z0qee0DHeKCG-jv)v;%Y0D6)@tzrjfRN z(RX@6Ml+_k-#Pq}{prh2_kx1bwkePNl7PY68@3-03j+lw=9ySeNJe8IlR!h=8H#0N zX0WcY5{v`y!BT^AvOU1*o)kLR{8_B%RA(C7{#54o;7|>u%RBv6LTiVY zdP_bTmUrgIKaHq6I&L@}oM{>Pg z{5Y&|ZFg(j_O83hYl}#}{bL4sQ+h0$rq_(>#pl2j)vV+>Qj@o>Q?JdogfYGym{_Bn za;NwYT{*J4a^%d18GpBXi733-ynXKei4jmA+AXR0hPKdW6(ycm6YFfjd*PT$Nlcfd z8_3_qH-9`eVVICQpK_S|ijR%vi3tDWUtfx0-m?$v%3ak*PG9ZKSQ~_#GcG-uX>+1o zt1BC53F_PFS6uaPB=i~4)bOXba6aY7Arr{^lq0ub`b2I(=(#t3;K`??$LhNZ zL<-bHyrE*~QdvDOM$msvxtX49jNB3-7PB4AApUtugN|I;E2sK`^*~bPN`RA|8D**4k4Lj3~s zg>FkJQiQ*vI@}zQ@p5dKS~LpZtrZe7;t%vBoUAT=zKzaSn8NYaL_9cy)+N!uyY)lV zkd6ruqib!j@MZ|TjDAOu^zBmYFTxbWDQg>9bJs67UpP8z{g>+P61-!wE1v4Ia3CQR zkEwPS{J}<{t{ZJrKZAP8jG)cz`;CObx|(F}PSjqaLm$5UD&V@flyS)pU9jpvNGqc# zD%58XlORdtH!}(ep6Vw6}lAbbU zC2bx*^reF%C$6WOnX||Hi3b`-IU)1hK}PFulDJZl8ICd{Nqzn4#}m^^n??qDU}S^Z z9E%!L&S@VWqRh%A44-w#M!YL4is^`!;dyQvM)0P*oRGhfNt)_=hpZ1}C@F1CL4!}X zn3CU<+%I1hkh{|F-Z(a;zt5&pwHvk{;9y@bgkc`2Cx+Csokd3|I0xg}l4IdJy8Kv{ z4b88ZYMUuG#6w&1S1!ZX%o<*93V;o|<>afl>vHeuuWmoKRKXuFROXPKc`dhCvxL;_ zgNgC<6su&@FNK@(DQ!$tGArF$3LWG;V=RC1gS@UTz8@{-s(Em81qH_5GXx{QAnY&F z>e7lVQF$XL7lk|YhIzwCZ* z%<-k(7KfK=WA#s1V015b`nfN3X?R|x1;u6M;|cC~+7hAry8|x8gD{&}p4>&+#soIQ z5@$kWPQAU`kY^R4e^P}~y4gdJ8=n@x=Qx2%zOQ~M>dk7vS{R<7)3cw? zN{8}Ft+K?m^&_*Bw(#t?Z!`jerVW-qu{$3T!SS;#i zK4(irre~vSVc{@Y#r^yW`K>u&xP9k#)jT8K!-_^)ZyN7g)c=2<4B!euNs@tbf(V-& zMDQ0b70a5}12~bAqJCew70nQH zrEhNTZ*Dr6XQ+x5)<4cn8DnCj(0#&&a!0$fV;yZ{z;_a?qhr9Vr{iaoA5A|`l^$RH zNT|6@0TUK%CH{RHsU%6S__NC>%UiN|m)@b$20vqNSm9-*{b+>sNdp<+X9u)be7ma3 zw4|Nh{C2{wQZ-5@_XNtTvgV*u%|g!Sz@<{M$<k(vQF0dy9ACWJ?$vw~zy3GOH}Tcz=vFv5&%_(YNcgcX^1O)e1mgX~SoS6PxQg z+BehY${AfwHj?TG3!l<$68SZ-7&1c8rfS-0Z(2%wX{YlV+56TU%F9>+ewR)W#-hKl zCTI;JwHZU5m`sT_4y6{$i?$j3b9hD?=BurR$L?3!A>Z$6ZDr98nAwB@ zSB~P6i>qBD#rg-->QV)dK`;8eY#)Y(jdtb_8T`sySo=?(KT44C^!FCK=DpstJrDBq zzM!#VayiABj1v(Pr-%*DRm)vEj3s*%xe#;!D=gVw+MM=5=z85mdHP2n*vBjI!j9~4 zbLZyAL9^O^JbQR#e8L^dZ~33!vQ-DmCKQH?vE|-lsl|)ETX=a1y7vwA^zfS-jeb=} z^cbxO_D94IeLx9!*UmCQvkM7#G1~Kjd0znUWS8N43nryB}FEM;&xK_pAJ4EYoW~ zPXGB>ibA7op5!2&_}g`DxJiFPg%?Hq{hAQjM0$t^!cQ$m6u%7Bv*#W9*om-q!-B<1 z6)80Qch3>A1E^AMX8OA$MO9hr*(BFZGGHo+(t4T0`ok^=dziUhY;R>Nh1QoWv`ddf zE>}rCWRfPjx~u$RuGaKh%+U>Xx`!-u~)l|H)IODYX*b@=8odATB1t@FqcTtx{zw<1$0YnLNzO zkYS2AvR8Kdp{3AyAHVfSSH%Q=W(`diIrQb1_VpU;R(0KN$q)`06R~5?Uf6!=+Yzg| z3aFeAdb;n(itMketaqF8vl<`X+V|cRp=M1>^rc^+W7TBz=lY&=T0AozWn6PFcWfHt zl|FV+%Ixzbd#M{9W>(P@u8(>0gD(;Gpd9J4U>1>?x~}|PnavH0>@VF}(_xA3eF4NZ zRDA?FPK+rT6w6Xf-~9}h3eUY_uFpTP#i;bKhKq7j-bwd#2}Rm{XJ(&fdTY}W5Ju#l zN5o~}b1A7|BBB`mk!e9W2w{=y6;8uJ=*ufDA za<)Ee3)jU;lS!!cxzR_ICXNn*SGQ@LOa);HF#)th-H4$9Pn=giR0}UDkZ-s8GmzLV zmA9*GH`<{K#J-iwNGz@>_)#pC?SZ7mUL`WLHA%-4aDu!_95Dnilf8Za+}EKk=gH4~u2-f=pS-5mBRj){(LDdK=W++>jhZ4Y4}_&daM zMA&u}LmQEzdYOHo+94u-)rcf)aup%pjnE}7#A?=%ku?3cV0KQ_r^3~ha8cNYS_UaS z_jNx_)$jC+Jg?;zNGd6|a48_iCD~t5gm9NTrK2)`@C$X)9nmdDUsuk){^d!_@cpaP zmwaBCXwmVtI*RruCC-|!rQCAa*3}N)x zWbjm|QMt&H)JZ+o_j)#sJl?k?tt%jrt%?1O?Qn4WI%&g3n6yicT=T5y)7{Zd@LAxz zqO#Q|oXAIOI1P?-grVJnLso^obcp*`j~vr&@?PqCFm<2Wa?UvvG6}W+>4h1a)!@Ni z2#f6_<6d&rL&&8qN?OF-QsC{&{d@vhCykei+B_NP+&4Oi9N^vQHJSW%!r1{%`$ zew!#-FK@z(IQ`>%UJ3P&Rzl9ZeP&d^Vh$@|$n1oy(15Lh@E|$Dn^gj5gp_9TF#{)ZEk$a1%jnk^HHE6^{TDL~u zAWD=d8_dvnW0SJti%Q~=z!-YN&IuV8rx;WgznyitD;dEYDdP~i_|f!F=we*8%2IZ$(YzGvJ&pp=SsuK zfoy#-sH9Rlbo&zJa8nN}&G;rNEa#1@%DdT3}B=a&%7MdOw zNRXVL!$`JsJ7^iSLDqwhhxO~4(>iu^yF1Fml3NXPN;lju%t7?Ig2Yk%BK3zk)0`~F z=&Ee@cV>oRK8?Lg(pve+1$7WK{IOii7Z-V@{lTG|m*w z^sk0i+IUPJ3-UUtVwonE*{XGC!`zXt&J(kbbsoQ8z7}AH$sDt<%O)VQr;q#P>y zdoBlyV~BpO55NB`|4Hs2*?(Mht^9b6gv+KHi$pIbD7R)QOy0F6?=1wm^FynE;&DTs z%9m+HGzTF&Vbs&SjGG(vWhmLW&YRv;+2)a1{#eN3hDTk@9&DXl#{QW^?<_XWtA{-V zdAZV&tv=}uSWp7I%c#lrSgD$2=BBH#I6WgJ-`8lOz1!Tyi8IZmgFOaWeDU}TxtwT) zzx}gxog`8j{q7bz!l%APl#Ey9KpQsT!Ru$2M9>k)J^k1Kx_p(+4TKt`Q!(d*E(-#-~^<6K!is zwpVPZZ0Zs=;k!=vt~IWDo-`SRN}q8cwQhXs;`3g~e2KO68mpd?_C=;uy4(Z7qT!RG zHw&I@ft1kqxZG9D+Y*a55*q)%q7Z>qMNj`@a7YRH<)~a@3?my+OYM5Vqk6Kr zLOy-sL0)Va^;h44va;d2AByAn*CqoFc*a+t1`t=9d$i?iooe3)|gF~QxvCu%r%E85CziTZnX-wEPDqK^U zUe&e2;7y?}0{=4=r*(M~0Tm7X0<);^nVG9R3&{FIFjwURk)P4Oc1Ju#4UE~A`~f** z$!dmodq;^(1kf~j0=~(H0q6bj*4Ybhv5sn}tE;yW{YV?)q&$86TuMIbV1lr>^@Cn$ za$n%muHDEd9qfUhZkY4A!nC6-DSH@JEu}&~3zWX(I&|}2*yJ{&V<{GSY?ZE~AsotU z;5-juf^o#|KT6Vi_%3TDBDAX$Z=-UBDC?x%&Q4GQ+?Di^CM+}&8*K& zq>qEnsDrkn{uEBy3moH*(W*nVXIEpc(`;O) z6F6^Mfu-E5Q_ap2!ruEEM!yj2KX9hxU+d6bUqUnO$`X;r=s_`Nb2~hite?7q@&QNP z7A9GPsic?ViX0`b5ntL6I{y|o{N(fVKplsCJ8n^J6J6uh0k5wyB;$RAS1)b#eyG&6 z|C9+Z)zZo=@H?oae&9I~;&R9@741yICR-_`7&rrl9SYb*^#0%?6P;`mj=1qla)+u24Ks)h7z#`(P&%lmm$nVSA??CpZ{=_@*czIF9%)OWj3;a1tl%!MiN)IA#&8>O)^Q%M&m{SnKM5g@+?BF;4-2O) zKK)ubm+=B8s4G|G__;-xkY(%$0=?^3@t0TV-$EPF3W>yMj$0G#C_Yi9Y5eN6IJc~v zB+b&M%g^#~D_uYUb(kxjsg52t(Zfp=b2Z}&-ZOX=sBz$=?4Tpj_*dE*^}hbD2G zZ@EcJGXO1^*o0VJJMe)v6^jxKyL%ZuBZoJiKBKOGIjRea4 zAC;{!h{)%OcqKKpFUl9h=@IR|`F?omQ8=d?+RqXOzK!4;u9Mx6wDPIjrAXzz7Z@lV z>6EF_GjDj7(RK7D`%^U$4lPW()O7XeDc_qtTLuRI>qF-grTJaW4F3h|HP~B${f^GN zL)@EFb6!|ox)FD`c-VQ*RavFw=If_%(jtzPRQcqMYtk@VU^sN{rnCJIlgS(Y_<79d zE29MGX#}QAuB4v|XKA!Qg;2hX{l4XDjUy0)C>r6;zv(IWS*_5?O+-K)%c1pko6w`n z;F4`d8B-h-%lCE+)u%pGhMF@KIKMB>osV-6IlM!L&_$5g+LmMR>vdaAe@3{V*beVp zHDH_m`hgkRe8?x}l#3rU<2Q3*R-X`o{GA6!4Sd}8Ia!nRB`yNOj>un++W<9ZC~BHB z6t_O58Tk+k#uA}ZxHVlg8$xlayVSC6YKD=7o-voy(8?>LXY*-EdHH)YUAXB;u0*vI zSF~WhRIn#tql}nZBCWw#Br(${=Qvk3DX+KoZ0t62M0i}Nr`HkV&yn?d!3xE?tP6v+ z3sck7NqNZlM9))VK$M%1pl-9vj z!Zyv0aCN!Sa)9FqnAMqj;}$mJO*@g#WCeuf3h~YH$4i~c;eNF&VLN6lC_7&?(XY+r zt#>G#gwf$Ow>_UlY0fFBUSq9!HkaktUy6aeUj_ zJl>Fg+MReNqPKOMVngn;(YIIb=K1`qC`>;BvluqFMNl>Fs<%~<$H%1mtt=fRb#`^6mcpC~Sdo@S-f*z}LS1zB&)Zwyy^;MA4ILqrldoFj&vzO?^Ngr5*&$Ved zbC1$iarn1iv`G*(Y4HIY%)z5jJdtono^6%Zjr>N=pS@^5*AGQJGv?Ds+dJAj*8{_Y zVSUQ``5v2gMecl|viw<^>RxH>2h0o0%&-kSR;WNH8F!wEJP=PAPk9HeC+I`QrovGL zC%33;c18kxu|oC{;KqqW_SfXrE3YGeg~D2OI}ONe+&sf1NC?q<$ETw@&f2)pvJIu@ zHJqB0u9$Omor?n0p73BW;f_JHJz9Tl;$O;1veA7rNc}3fpG5W^_WF18B;msjz00S# z9Je&T)QzlSnsSN5e&9cp)sV%T>(}e}wY(btLin4py?fNasC1@i{tfZKY%m#t?-&y7 z4yJ&;MN}n5JjWxH-mMa6lO^=2R=H#)ebJaTHdmw}yMJaMCGGV3bB;!ba_1Qtkw)~LHPiApt{k@z!Fg$jy@;O#0D(&Ye zOMF4H+pyONNIfoJtttCxvupP-=K5&%Q~y!=&VgBcaY84_%U7pcvjqitRwQNQFr4I= z9=@6rl_2C~YIo&fup<&JnmlSE?+G>sm$A0_#L}|Q~L{US35{7vm`daD~Bk|4| za0Pz*`4ejKdlFMozk*M2{}+j%qzV|dPs=v!$Ua5iK$ zE#AH@!9oPl;twiCR(8)Sk0w>tu7Z8;rg_+_iD(fSL9?j!F7<|5L!kR~T+8lzmq$N~ zIGLkd^pelFIaC*!8-s<{>4}zSdQY_bWLkA;({L@l+Icpp%Jw=`?&xaP5ynL+Qa5&) zw5sQy;yGsudb9Em{2C{J`zJk<;{CoD=VwJ3*%~Iv0L`y;#Cs16^GwiZ2*WO6o`qc@ z1g|a5UJfXUkYR)yU8>Bk9O0RQ(r_wVa4^uY$|<`J;q#r z*Ct8tO8tarjMtBTl{(xDk zE16=GNVW6ZO_oIY62y;$D0{6nfKO$cESroRRYb675^LxtzU1U;9PM)wk6>5cqOI@V zQKVir+q$KM3}(VS)vC}(B97Iv*$2PDM2Tg)!7YV5O^mN(SUx=CvG0!X)=zm!tM3Os z?R-KsBnCT{&xx3sxm-=U{hZv-<173->!ALkz^KD1Y3rxcrBmmHWQs>kNf7P>%7<4z z;?3jeJU6{$8_qTs^-U_XIWPuJFJvFg-R&;wp29v)mBWnaMZnp?s17hrg zL@O>5U-_3;ns;%X)SXt8qYOMOB9m_CeZASj>oR-Q!~9vF$SOOebDH$Fck<;k;Ch-1 zqsbQGeNUxD-)ZONVtakgA@WN?L=%7p3iU-aNem&ZFNQ)%c>ec2u|Ywo1tJo_DFoGp z*cJnlf>2T*TL>x*VXD3d20;hPpF$r(Ui}Y^4P0CxVglGA&_|H1 ztN)td0G1+9UI;D%fG-B61VATfslgC@p#NU{8tosJ0(c?{GL2Yp##0n30Xe6GgAq}v z7-AoQCkEAlNQuI^5>W{5U%97YL9vq3kbx|5C06)b*hiU(2ZlxiZ z0IN7i%WC{f=pqgkhUn_TnFC!2D$p$sZZq!x7-E1@5-ih039w8V2LA|A05b`w0L0kv zU(8oS2mxF@eyXn*m4j2tAV7N}GL-E%2|E7N}iA4Ran zKqGwRt`R~6%qoFpJyg7JMl+m#pahO2%~v?^QGyC0x&akR;B=*q!nvDKa76#Iv!8_E zVIlneQxn2E2^S4GIE~r~#!03{=5oBgA_^1AJD63PMyM@D*e=aK#!44u+7B&;fHb zFcKd!ocVwZx?1A|YuBX))=mowr`w=N;1Qt?3awD!%peL99`IZf6#A)y!UR;n%?ONj zjSAYg-U~mV!G)OUNZ4?Xf6$TsUDY~txQU4dlp8SvNYH@lL&7oPMyQ%#mT_2cV5kW; z*9996rm>N50aFt&u0HO6+>zn_9Zw6&hsXv5W$5g*)Vvlf_DE&-guAw(hp zD6~OllMv2m6M-9Q5CR>`6930Bl=wbRdZ0ra%7GXQ9B6|x8cPZsYJ=OoAO(&7Dp!~e zScT7Ia9^!D;5Eli0SEZHU}Iz{;h=&N2@P=61>?$4!I^R@Ft^rw#*hZipy+|un=LII zSm}XhjVm1-%+MiW!o!X0f#LS(;WV~BR0P7x2nY81;6DRzCOGKThdzaPF~h+kGuRt; z12ED@mcI=jAmPKCm~H_2t9StK2o)=sLJ{I@F5Zo z@Wv1nW

67;H$C@b=u?3k%ucG`|s42(bZpVFWdX3_iK99UZV|1h(~x9WIbJhH^t5 zaKb^lF}Om*1qW}qz#Q#l!M+fffF32d;oVR(0smDA^1wBPCg8X*^TI&_FIdn*dC;JN z?>~+7<%0{9O+iy50XWDr1p`|N!rM6{2%6rRg8OL|f-ftWfz3-3z6WH$wJfjaXWCbQsVhJX} z{`_C+150qA!d(AhMIaFZf2_fS zEEb@*ftn)H0Kqm;Ekx`4kB7jG4O9jak#TSE5V*}iA^?JH!3dK1_Y5mgpAT+n@t!gH z1ZQ~dprVkGQaE^P2i^oIw!lGq3larDYY%Eme!v+Id$6jtJ8;0Z3tq*$_scJ?;mq1K z64iY;Jn)_lEJGJ5km!7WYY>4<3W$&)V*wowP%OItzDtCF!218sdhoL*rUrKlmcC+m{IDwJ>!(ae3j!;>M+o%5uF@ShSs3b(Y z_iLa5#ZM1WWEklz^cVxJkFaL2MZ^89?O%ZsfmDY5sR34h?@9gO6;4 zAZ*{^juiWlaqn&M0ALFF-^cOCiF<)DBybKce7lHD01xutFVqMKZ2zei`wCnSe!Kol fj|aSV0V`j>2jsXwT_BIo0DM=dFvR delta 13501 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 J2n06D{{b{a idx/{rootUnit}.toml - * Standalone fallback: {projectRoot}/src/bin/s_idx/{rootUnit}.toml + * File format (preferred): {projectRoot}/src/bin/project.codc -> idx/project.toml * * Example: * # unit sample @@ -32,14 +31,11 @@ */ public final class Index { - private static final String STANDALONE_IDX_DIR_NAME = "s_idx"; - private static final String SRC_DIR_NAME = "src"; - private static final String BIN_DIR_NAME = "bin"; - private static final String CODC_EXTENSION = ".codc"; - private static final String CODB_EXTENSION = ".codb"; private static final String FILE_EXTENSION = ".toml"; private static final String CLASSES_SECTION = "classes"; private static final String CLASSES_SECTION_PREFIX = CLASSES_SECTION + ":"; + private static final String PROJECT_INDEX_NAME = "project"; + private static final String SRC_DIR_NAME = "src"; private static final String DEFAULT_GENERATOR = "Coderive 1.0"; private final String unit; @@ -89,31 +85,9 @@ public static String getProjectRoot() { return projectRoot; } - private static String getRootUnit(String unitName) { - if (unitName == null || unitName.isEmpty()) return "default"; - int dot = unitName.indexOf('.'); - if (dot < 0) return unitName; - if (dot == 0) return "default"; - return unitName.substring(0, dot); - } - private static String getUnitSectionName(String unitName) { return CLASSES_SECTION_PREFIX + unitName; } - - private static File getStandaloneIndexFile(String rootUnit) { - if (projectRoot == null) { - return new File("src/" + BIN_DIR_NAME + "/" + STANDALONE_IDX_DIR_NAME + "/" + rootUnit + FILE_EXTENSION); - } - return new File(projectRoot + File.separator + SRC_DIR_NAME + File.separator + BIN_DIR_NAME + - File.separator + STANDALONE_IDX_DIR_NAME + File.separator + rootUnit + FILE_EXTENSION); - } - - private static File getCodcFile(String rootUnit) { - if (projectRoot == null) return null; - return new File(projectRoot + File.separator + SRC_DIR_NAME + File.separator + BIN_DIR_NAME + - File.separator + rootUnit + CODC_EXTENSION); - } /** * Creates a new index for the specified unit. @@ -156,8 +130,7 @@ public static Index load(String unitName) { if (unitName == null || unitName.trim().isEmpty()) { return null; } - String rootUnit = getRootUnit(unitName); - String docText = loadPreferredDocumentText(unitName, rootUnit); + String docText = loadPreferredDocumentText(unitName); if (docText == null) { return null; } @@ -179,28 +152,23 @@ public static Index load(String unitName) { * @return true if saved successfully, false otherwise */ public boolean save() { - String rootUnit = getRootUnit(unit); - IndexDocument merged = loadExistingDocument(unit, rootUnit); + IndexDocument merged = loadExistingDocument(unit); merged.timestamp = timestamp; merged.generator = (generator == null || generator.isEmpty()) ? DEFAULT_GENERATOR : generator; merged.unitMappings.put(unit, new HashMap(classes)); - String documentText = writeDocumentText(rootUnit, merged); + String documentText = writeDocumentText(merged); if (projectRoot == null) { return false; } - if (shouldUseStandaloneIndex(rootUnit)) { - return saveStandaloneIndex(rootUnit, documentText); - } - IRManager manager = new IRManager(projectRoot); try { manager.saveIndex(unit, documentText); return true; } catch (IOException e) { - return saveStandaloneIndex(rootUnit, documentText); + return false; } } @@ -521,106 +489,26 @@ public Map getMappings() { // ========== Private Helpers ========== - private static String loadPreferredDocumentText(String unitName, String rootUnit) { + private static String loadPreferredDocumentText(String unitName) { if (projectRoot == null) { return null; } IRManager manager = new IRManager(projectRoot); - String content = manager.loadIndex(unitName); - if (content != null) { - return content; - } - - File standalone = getStandaloneIndexFile(rootUnit); - if (standalone.exists()) { - try { - return readFileToString(standalone); - } catch (IOException ignored) {} - } - return null; + return manager.loadIndex(unitName); } - private static IndexDocument loadExistingDocument(String unitName, String rootUnit) { - String content = loadPreferredDocumentText(unitName, rootUnit); + private static IndexDocument loadExistingDocument(String unitName) { + String content = loadPreferredDocumentText(unitName); if (content == null) { return new IndexDocument(System.currentTimeMillis(), DEFAULT_GENERATOR, new HashMap>()); } return parseDocument(content, unitName); } - private static boolean shouldUseStandaloneIndex(String rootUnit) { - File codc = getCodcFile(rootUnit); - if (codc != null && codc.exists()) { - return false; - } - return hasStandaloneArtifacts(rootUnit); - } - - private static boolean hasStandaloneArtifacts(String rootUnit) { - if (projectRoot == null) return false; - File binDir = new File(projectRoot + File.separator + SRC_DIR_NAME + File.separator + BIN_DIR_NAME); - if (!binDir.exists() || !binDir.isDirectory()) { - return false; - } - - File[] children = binDir.listFiles(); - if (children == null) return false; - - for (File child : children) { - if (!child.isDirectory()) continue; - String name = child.getName(); - if (!(name.equals(rootUnit) || name.startsWith(rootUnit + "."))) { - continue; - } - if (containsCodb(child)) { - return true; - } - } - return false; - } - - private static boolean containsCodb(File dir) { - File[] files = dir.listFiles(); - if (files == null) return false; - for (File file : files) { - if (file.isDirectory()) { - if (containsCodb(file)) return true; - } else if (file.getName().endsWith(CODB_EXTENSION)) { - return true; - } - } - return false; - } - - private static boolean saveStandaloneIndex(String rootUnit, String content) { - File file = getStandaloneIndexFile(rootUnit); - File parent = file.getParentFile(); - if (parent != null && !parent.exists() && !parent.mkdirs()) { - return false; - } - return writeStringToFile(file, content); - } - - private static boolean writeStringToFile(File file, String content) { - PrintWriter writer = null; - try { - writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream(file), StandardCharsets.UTF_8)); - writer.print(content); - writer.flush(); - return true; - } catch (IOException e) { - return false; - } finally { - if (writer != null) { - writer.close(); - } - } - } - - private static String writeDocumentText(String rootUnit, IndexDocument doc) { + private static String writeDocumentText(IndexDocument doc) { StringBuilder out = new StringBuilder(); - out.append("# root-unit ").append(rootUnit).append("\n"); + out.append("# project-index ").append(PROJECT_INDEX_NAME).append(FILE_EXTENSION).append("\n"); out.append("timestamp = \"").append(doc.timestamp).append("\"\n"); out.append("generator = \"").append(doc.generator).append("\"\n"); out.append("\n"); diff --git a/src/main/java/cod/ir/IRManager.java b/src/main/java/cod/ir/IRManager.java index ec24e0b2..fb74b851 100644 --- a/src/main/java/cod/ir/IRManager.java +++ b/src/main/java/cod/ir/IRManager.java @@ -33,6 +33,8 @@ public class IRManager { private static final String IR_EXT = ".codb"; private static final String CONTAINER_EXT = ".codc"; private static final String INDEX_DIR = "idx/"; + private static final String PROJECT_CONTAINER_NAME = "project"; + private static final String PROJECT_INDEX_FILE_NAME = "project.toml"; private static final int BUFFER_SIZE = 8192; private static final Map CONTAINER_LOCKS = new ConcurrentHashMap(); @@ -158,8 +160,7 @@ public void clearCache() { public String loadIndex(String unit) { if (unit == null || unit.isEmpty()) return null; - String rootUnit = getRootUnit(unit); - String entryName = getIndexEntryName(rootUnit); + String entryName = getProjectIndexEntryName(); try { byte[] data = readContainerEntry(unit, entryName); if (data == null) return null; @@ -171,8 +172,7 @@ public String loadIndex(String unit) { public void saveIndex(String unit, String indexContent) throws IOException { if (unit == null || unit.isEmpty() || indexContent == null) return; - String rootUnit = getRootUnit(unit); - String entryName = getIndexEntryName(rootUnit); + String entryName = getProjectIndexEntryName(); writeContainerEntry(unit, entryName, indexContent.getBytes(StandardCharsets.UTF_8)); } @@ -216,25 +216,16 @@ private File getIRFile(String unit, String className) { } private File getContainerFile(String unit) { - String rootUnit = getRootUnit(unit); - String path = projectRoot + "/src/" + BIN_DIR + "/" + rootUnit + CONTAINER_EXT; + String path = projectRoot + "/src/" + BIN_DIR + "/" + PROJECT_CONTAINER_NAME + CONTAINER_EXT; return new File(path); } - private String getRootUnit(String unit) { - if (unit == null || unit.isEmpty()) return "default"; - int dot = unit.indexOf('.'); - if (dot < 0) return unit; - if (dot == 0) return "default"; - return unit.substring(0, dot); - } - private String getContainerEntryName(String unit, String className) { return unit + "/" + className + IR_EXT; } - private String getIndexEntryName(String rootUnit) { - return INDEX_DIR + rootUnit + ".toml"; + private String getProjectIndexEntryName() { + return INDEX_DIR + PROJECT_INDEX_FILE_NAME; } private Artifact readArtifactFromContainer(String unit, String className) throws IOException { diff --git a/src/main/java/cod/runner/CommandRunner.java b/src/main/java/cod/runner/CommandRunner.java index f43ba78e..3b17d708 100644 --- a/src/main/java/cod/runner/CommandRunner.java +++ b/src/main/java/cod/runner/CommandRunner.java @@ -139,7 +139,7 @@ private void handleCompileCommand(String[] args) throws Exception { int compiled = 0; for (Type type : ast.unit.types) { bm.save(ast.unit.name, type); - System.out.println("Compiled (CodP-TAC artifact): " + type.name + " → .codc/" + ast.unit.name + "/" + type.name + ".codb"); + System.out.println("Compiled (CodP-TAC artifact): " + type.name + " → .codc/" + ast.unit.name + "/" + type.name + ".codb"); compiled++; } @@ -227,7 +227,7 @@ private void compileToBytecode(Program ast) { try { irManager.save(unitName, type); compiled++; - DebugSystem.debug(NAME + LOG_TAG, "Compiled CodP-TAC artifact: " + type.name + " → .codc/" + unitName + "/" + type.name + ".codb"); + DebugSystem.debug(NAME + LOG_TAG, "Compiled CodP-TAC artifact: " + type.name + " → .codc/" + unitName + "/" + type.name + ".codb"); } catch (Exception e) { DebugSystem.warn(NAME + LOG_TAG, "Failed to compile " + type.name + ": " + e.getMessage()); } diff --git a/src/main/java/cod/runner/TestRunner.java b/src/main/java/cod/runner/TestRunner.java index 4a533401..28d36df7 100644 --- a/src/main/java/cod/runner/TestRunner.java +++ b/src/main/java/cod/runner/TestRunner.java @@ -312,7 +312,7 @@ private void compileToBytecode(Program ast) { try { irManager.save(unitName, type); compiled++; - DebugSystem.debug(NAME + LOG_TAG, "Compiled CodP-TAC artifact: " + type.name + " → .codc/" + unitName + "/" + type.name + ".codb"); + DebugSystem.debug(NAME + LOG_TAG, "Compiled CodP-TAC artifact: " + type.name + " → .codc/" + unitName + "/" + type.name + ".codb"); } catch (Exception e) { DebugSystem.warn(NAME + LOG_TAG, "Failed to compile " + type.name + ": " + e.getMessage()); } From e72cafd4f8a75b623443ce4af147beff70d61707 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 13 Apr 2026 02:44:43 +0000 Subject: [PATCH 6/9] Polish project-wide index header wording Agent-Logs-Url: https://github.com/DanexCodr/Coderive/sessions/4406dea4-5099-4330-8990-ed9e8f0ac13b Co-authored-by: DanexCodr <216312766+DanexCodr@users.noreply.github.com> --- src/main/java/cod/interpreter/Index.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/cod/interpreter/Index.java b/src/main/java/cod/interpreter/Index.java index 5100c315..c7ea815d 100644 --- a/src/main/java/cod/interpreter/Index.java +++ b/src/main/java/cod/interpreter/Index.java @@ -31,10 +31,8 @@ */ public final class Index { - private static final String FILE_EXTENSION = ".toml"; private static final String CLASSES_SECTION = "classes"; private static final String CLASSES_SECTION_PREFIX = CLASSES_SECTION + ":"; - private static final String PROJECT_INDEX_NAME = "project"; private static final String SRC_DIR_NAME = "src"; private static final String DEFAULT_GENERATOR = "Coderive 1.0"; @@ -508,7 +506,7 @@ private static IndexDocument loadExistingDocument(String unitName) { private static String writeDocumentText(IndexDocument doc) { StringBuilder out = new StringBuilder(); - out.append("# project-index ").append(PROJECT_INDEX_NAME).append(FILE_EXTENSION).append("\n"); + out.append("# project-wide multi-unit class index\n"); out.append("timestamp = \"").append(doc.timestamp).append("\"\n"); out.append("generator = \"").append(doc.generator).append("\"\n"); out.append("\n"); From fe8fc6c0d33e83c7a5839473e56add1575af3a3d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 13 Apr 2026 02:46:12 +0000 Subject: [PATCH 7/9] Check project root before index document build Agent-Logs-Url: https://github.com/DanexCodr/Coderive/sessions/4406dea4-5099-4330-8990-ed9e8f0ac13b Co-authored-by: DanexCodr <216312766+DanexCodr@users.noreply.github.com> --- src/main/java/cod/interpreter/Index.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/cod/interpreter/Index.java b/src/main/java/cod/interpreter/Index.java index c7ea815d..dc0221e5 100644 --- a/src/main/java/cod/interpreter/Index.java +++ b/src/main/java/cod/interpreter/Index.java @@ -150,6 +150,10 @@ public static Index load(String unitName) { * @return true if saved successfully, false otherwise */ public boolean save() { + if (projectRoot == null) { + return false; + } + IndexDocument merged = loadExistingDocument(unit); merged.timestamp = timestamp; merged.generator = (generator == null || generator.isEmpty()) ? DEFAULT_GENERATOR : generator; @@ -157,10 +161,6 @@ public boolean save() { String documentText = writeDocumentText(merged); - if (projectRoot == null) { - return false; - } - IRManager manager = new IRManager(projectRoot); try { manager.saveIndex(unit, documentText); From 0b2e076245d90b49ed293c1cc53258fe09411f91 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 13 Apr 2026 02:50:22 +0000 Subject: [PATCH 8/9] Plan HOOK.toml root index entry update Agent-Logs-Url: https://github.com/DanexCodr/Coderive/sessions/48b0c447-3fad-45cc-b283-44f5c1288492 Co-authored-by: DanexCodr <216312766+DanexCodr@users.noreply.github.com> --- source_.jar | Bin 355431 -> 355397 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/source_.jar b/source_.jar index 3378fbcd9747991a99ed2d485e8b28c1f1157664..ac97e06be4d96a4647306c7c612f1b775942bc09 100644 GIT binary patch delta 11141 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 delta 11262 zcmZWvWk3{N+uohop}V_91*Ka`Qo6fAx)d-GRuoZ6M3f4{M(^UYQwZp@bD*UE2BDj6ChGv}GIAw= zjfgIQJ%}OjS?`F776dp67R(^LK#Zbg0IE=1I<(BA;$(naSO|gJ7&a1ki7|{oDP}2v z1tu)+07_V%0eGsThUYM2Y$E@kN3QQX`GAHiBoe8dT%e*W4{SsWINAE>KL6$6z|L5} z$qwdIAkN+l;6A$#9a`3N+#|;P%{fAh+2NvwtFU3Lf6rEq2M1oAJZAxf@@4{<<23`I z#YYIo_$=tX7I}VuB2uZ3TEQg&ZXmiNz>d)IzjPc$82=tXT6hVVN{AQ`eEdW=5LhC% zhd?0-76RoY{QwsDsi+nFmSQfrDg`Fha#t#k6N)VXoK;x>P^!8SD92P4{_&a7X8wC* z7xigiWu#$GjF6|f7GPDo7SZj{79pIU>R1CSIo%KzIu>M_1_AhJ`U$`suNv+zj4}Kb zx<%T&3rxJ=r>`2$DT1*SNNghLuG=*IkNhrO{y#OHR2k^1q}Mc#T;S*@j{}>6GMh^v zmZz-~9a?H_FBAO2>?;X=8^hJ`88J-kFA4>rj-zz*|D;|4xMn*s60XOb5HroMZ z+h$9`_IIckka~r^1F$jN8^FnMkoSVj2x9%U~oyx#e5b zY9g>?j56>_>miHcF>5fcg5($?!I?2SM49GzCGjn5Ft&o3?ZUvHdB-&r;J|JR;NQZ( zXMq9&fK85nRK)%sx5YS3ju9A!9a1T)v z2wUHV$l*;0nV~?e5b&a(526L^g`BvQ62?^EOUPQH3eB0p5Y6Q`7y#}%%R=-IG%|uY zv>d+71vs`;bZ!CVBVw$7FAGG@?_~&f+h_T}IYY}q$mKvlThBs1M3iMCeO~NbWS;+7 zVMaY_3brVT^oR=|Vnc)qCCJP)NiK2}NDnQWm+Sz>ro9j+JAwJpl%>dT01F!bD)MI` z&|o$sM>26p^XK~Jet$X2s7NC1|ATYmFckh%9pk07T9CQHkxIL{l|0G>8fSNt=UM3u zyf}lb4g`Z4WD|BGip1j1D4a|prBU!d8Hf;Gq=|9SERK=s%UheDHg%jV2OMdfmE<61 z!h!LJS6c!Ti6pO!SEf^hX?P78Ck9bzA+IAy`?ry$LE6Fk&<4)!J>(2U!dYlebL<8y ziIlB|&$rP>tI)+5X|bQkF9~+`KgdSFKJN!Pl!)|gi7X4I-zJJA5o6>tA!QkmjJv(SPIU$^&Mo?X0fHB}X?g-#Z zD{)7dK_T!nUPuqX2ybKppp6f52jE~KB3GDzV1Mm)nu9Nr2i75N+z(j-Z1B-|Bozq! zwje2l=EYVdm1y`TA~K*szq>?nzfWWqd^`zZ!t0X=4)~QM

lW*oIstav-u3(I6U* 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 GZt;IP-U2=V From d5ad6fa5ab2bbc8b33e1e3524681d21d2d27701a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 13 Apr 2026 02:50:50 +0000 Subject: [PATCH 9/9] Store shared index as HOOK.toml at codc root Agent-Logs-Url: https://github.com/DanexCodr/Coderive/sessions/48b0c447-3fad-45cc-b283-44f5c1288492 Co-authored-by: DanexCodr <216312766+DanexCodr@users.noreply.github.com> --- source_.jar | Bin 355397 -> 355393 bytes src/main/java/cod/interpreter/Index.java | 2 +- src/main/java/cod/ir/IRManager.java | 5 ++--- .../java/cod/semantic/ImportResolver.java | 2 +- 4 files changed, 4 insertions(+), 5 deletions(-) diff --git a/source_.jar b/source_.jar index ac97e06be4d96a4647306c7c612f1b775942bc09..2780569130a157a15748acf337862c14108b5c70 100644 GIT binary patch delta 18089 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 diff --git a/src/main/java/cod/interpreter/Index.java b/src/main/java/cod/interpreter/Index.java index dc0221e5..8156aac6 100644 --- a/src/main/java/cod/interpreter/Index.java +++ b/src/main/java/cod/interpreter/Index.java @@ -15,7 +15,7 @@ * Index file for Coderive units. * Stores classname → filename mappings for O(1) import resolution. * - * File format (preferred): {projectRoot}/src/bin/project.codc -> idx/project.toml + * File format (preferred): {projectRoot}/src/bin/project.codc -> HOOK.toml * * Example: * # unit sample diff --git a/src/main/java/cod/ir/IRManager.java b/src/main/java/cod/ir/IRManager.java index fb74b851..220d910d 100644 --- a/src/main/java/cod/ir/IRManager.java +++ b/src/main/java/cod/ir/IRManager.java @@ -32,9 +32,8 @@ public class IRManager { private static final String BIN_DIR = "bin"; private static final String IR_EXT = ".codb"; private static final String CONTAINER_EXT = ".codc"; - private static final String INDEX_DIR = "idx/"; private static final String PROJECT_CONTAINER_NAME = "project"; - private static final String PROJECT_INDEX_FILE_NAME = "project.toml"; + private static final String PROJECT_INDEX_FILE_NAME = "HOOK.toml"; private static final int BUFFER_SIZE = 8192; private static final Map CONTAINER_LOCKS = new ConcurrentHashMap(); @@ -225,7 +224,7 @@ private String getContainerEntryName(String unit, String className) { } private String getProjectIndexEntryName() { - return INDEX_DIR + PROJECT_INDEX_FILE_NAME; + return PROJECT_INDEX_FILE_NAME; } private Artifact readArtifactFromContainer(String unit, String className) throws IOException { diff --git a/src/main/java/cod/semantic/ImportResolver.java b/src/main/java/cod/semantic/ImportResolver.java index 10eb1d5c..e87daf04 100644 --- a/src/main/java/cod/semantic/ImportResolver.java +++ b/src/main/java/cod/semantic/ImportResolver.java @@ -208,7 +208,7 @@ public void setCurrentFileDirectory(String filePath) { } } - // Set the project root for Index class (for src/idx/ location) + // Set the project root for Index class (for src/bin/project.codc index location) Index.setProjectRoot(srcMainRoot); DebugSystem.debug("IMPORTS", "Set Index project root from: " + srcMainRoot);