{"_id":"vocareum-publisher","_rev":"35-058c90da09acd3f25ffbd3d787e96646","name":"vocareum-publisher","dist-tags":{"latest":"1.4.0"},"versions":{"1.0.0":{"name":"vocareum-publisher","version":"1.0.0","keywords":["vocareum","education","assignments","publishing","cli","github-action"],"author":{"name":"Vocareum"},"license":"MIT","_id":"vocareum-publisher@1.0.0","maintainers":[{"name":"ddlin","email":"david+npm@vocareum.com"}],"homepage":"https://github.com/ddlin/vocareum-publisher#readme","bugs":{"url":"https://github.com/ddlin/vocareum-publisher/issues"},"bin":{"vocareum-publish":"dist/index.js"},"dist":{"shasum":"7dc9e9a3d8ba2cdc4f3cbbd702ae78529dcf1ee1","tarball":"https://registry.npmjs.org/vocareum-publisher/-/vocareum-publisher-1.0.0.tgz","fileCount":129,"integrity":"sha512-iYGEOj72Soe19YiEdafoiqo6C1Bz67Pla7mvzwWmxmtlq7iKJMPVMmobBTsNaqUF4ilqt86NuBY4e//hH4JYxQ==","signatures":[{"sig":"MEUCIDtWf5rFRIDcNJbrz3/OratYDlVYps/8unIDf6bS2ZZQAiEAvkQL17NT6OeMp+utchYbrtNFduXKSF7OMW1hxQ3Yqlo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":350890},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"db8588256374f0d646f991a77b16757facb438d1","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","format":"prettier --write 'src/**/*.ts'","lint:fix":"eslint src --ext .ts --fix","probe:api":"node scripts/probe-vocareum-api.mjs","typecheck":"tsc --noEmit","build:action":"tsc && cp action/action.yml dist/action/","test:coverage":"vitest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"ddlin","email":"david+npm@vocareum.com"},"repository":{"url":"git+https://github.com/ddlin/vocareum-publisher.git","type":"git"},"_npmVersion":"11.6.0","description":"Publish assignment content from GitHub to Vocareum","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ora":"^7.0.0","zod":"^3.22.0","axios":"^1.6.0","chalk":"^5.3.0","js-yaml":"^4.1.0","inquirer":"^9.2.0","commander":"^11.1.0","form-data":"^4.0.0","simple-git":"^3.21.0","cosmiconfig":"^9.0.0","@actions/core":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^8.56.0","vitest":"^1.0.0","prettier":"^3.1.0","typescript":"^5.3.0","@types/node":"^20.10.0","@types/js-yaml":"^4.0.9","@types/inquirer":"^9.0.7","@typescript-eslint/parser":"^6.15.0","@typescript-eslint/eslint-plugin":"^6.15.0"},"_npmOperationalInternal":{"tmp":"tmp/vocareum-publisher_1.0.0_1770970850767_0.23299057624098585","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"vocareum-publisher","version":"1.0.1","keywords":["vocareum","education","assignments","publishing","cli","github-action"],"author":{"name":"Vocareum"},"license":"MIT","_id":"vocareum-publisher@1.0.1","maintainers":[{"name":"ddlin","email":"david+npm@vocareum.com"}],"homepage":"https://github.com/ddlin/vocareum-publisher#readme","bugs":{"url":"https://github.com/ddlin/vocareum-publisher/issues"},"bin":{"vocareum-publish":"dist/index.js"},"dist":{"shasum":"b69d5339a03e31ab573a36cf22760edef9d136f7","tarball":"https://registry.npmjs.org/vocareum-publisher/-/vocareum-publisher-1.0.1.tgz","fileCount":133,"integrity":"sha512-GOIKMYmOjGIyOkoRy96B5ISWd49XbSU8HTTFOeY93xsZeCTySQanK+6KBsMic8/GRRMK2OLgB0oCMlxfY2mQ7A==","signatures":[{"sig":"MEQCIEXcKkZcqxsJksfZTQLWPpqLiMmVDkvsL7jExLjebdVEAiApvCr4ukGOzC0CQSNu4vNb54mYu+LJNyq1nmkA8Dc+Ew==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":568358},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"283ac63eea29164e697d7bd109b592d3e91abc6d","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","format":"prettier --write 'src/**/*.ts'","lint:fix":"eslint src --ext .ts --fix","probe:api":"node scripts/probe-vocareum-api.mjs","typecheck":"tsc --noEmit","build:action":"tsc && cp action/action.yml dist/action/","test:coverage":"vitest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"ddlin","email":"david+npm@vocareum.com"},"repository":{"url":"git+https://github.com/ddlin/vocareum-publisher.git","type":"git"},"_npmVersion":"11.6.0","description":"Publish assignment content from GitHub to Vocareum","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ora":"^7.0.0","zod":"^3.22.0","axios":"^1.6.0","chalk":"^5.3.0","js-yaml":"^4.1.0","inquirer":"^9.2.0","commander":"^11.1.0","form-data":"^4.0.0","simple-git":"^3.21.0","cosmiconfig":"^9.0.0","@actions/core":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^8.56.0","vitest":"^1.0.0","prettier":"^3.1.0","typescript":"^5.3.0","@types/node":"^20.10.0","@types/js-yaml":"^4.0.9","@types/inquirer":"^9.0.7","@typescript-eslint/parser":"^6.15.0","@typescript-eslint/eslint-plugin":"^6.15.0"},"_npmOperationalInternal":{"tmp":"tmp/vocareum-publisher_1.0.1_1771011473457_0.6192772413885588","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"vocareum-publisher","version":"1.0.2","keywords":["vocareum","education","assignments","publishing","cli","github-action"],"author":{"name":"Vocareum"},"license":"MIT","_id":"vocareum-publisher@1.0.2","maintainers":[{"name":"ddlin","email":"david+npm@vocareum.com"}],"homepage":"https://github.com/ddlin/vocareum-publisher#readme","bugs":{"url":"https://github.com/ddlin/vocareum-publisher/issues"},"bin":{"vocareum-publish":"dist/index.js"},"dist":{"shasum":"ead7a056675c45df2fb15798c7385c2ded7001a4","tarball":"https://registry.npmjs.org/vocareum-publisher/-/vocareum-publisher-1.0.2.tgz","fileCount":137,"integrity":"sha512-OYxE+0OIzUpqrH+MpSvN5fp5wMeVXdNfIIEhP7RjFLVXQUj/RJYA5t9iwRyUjZ6vsnGtRxIMxKo84wc9lbbR4w==","signatures":[{"sig":"MEQCIDHK74vroT/12wTthhJcQMxgaY1s/UlYhgorWgmHYLfiAiA3vUCsdU9fE+hMhmZblmJPBo+H3DWv39fA3qA6/EJWXw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":602971},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"d3312ba6dd94239b705903e321f26cf44c0af7d2","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","format":"prettier --write 'src/**/*.ts'","lint:fix":"eslint src --ext .ts --fix","probe:api":"node scripts/probe-vocareum-api.mjs","typecheck":"tsc --noEmit","build:action":"tsc && cp action/action.yml dist/action/","test:coverage":"vitest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"ddlin","email":"david+npm@vocareum.com"},"repository":{"url":"git+https://github.com/ddlin/vocareum-publisher.git","type":"git"},"_npmVersion":"11.6.0","description":"Publish assignment content from GitHub to Vocareum","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ora":"^7.0.0","zod":"^3.22.0","axios":"^1.6.0","chalk":"^5.3.0","js-yaml":"^4.1.0","inquirer":"^9.2.0","commander":"^11.1.0","form-data":"^4.0.0","simple-git":"^3.21.0","cosmiconfig":"^9.0.0","@actions/core":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^8.56.0","vitest":"^1.0.0","prettier":"^3.1.0","typescript":"^5.3.0","@types/node":"^20.10.0","@types/js-yaml":"^4.0.9","@types/inquirer":"^9.0.7","@typescript-eslint/parser":"^6.15.0","@typescript-eslint/eslint-plugin":"^6.15.0"},"_npmOperationalInternal":{"tmp":"tmp/vocareum-publisher_1.0.2_1771057086502_0.21856589699643725","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"vocareum-publisher","version":"1.0.3","keywords":["vocareum","education","assignments","publishing","cli","github-action"],"author":{"name":"Vocareum"},"license":"MIT","_id":"vocareum-publisher@1.0.3","maintainers":[{"name":"ddlin","email":"david+npm@vocareum.com"}],"homepage":"https://github.com/ddlin/vocareum-publisher#readme","bugs":{"url":"https://github.com/ddlin/vocareum-publisher/issues"},"bin":{"vocareum-publish":"dist/index.js"},"dist":{"shasum":"1186a3965c9bc3d90c5aee60f76c613aa62b16b5","tarball":"https://registry.npmjs.org/vocareum-publisher/-/vocareum-publisher-1.0.3.tgz","fileCount":137,"integrity":"sha512-ffmXyjlzq+dh1hjESl2n+tN2kkbT+PyenYp7mO4wEgJPYSYmAGuoqwoIFcbItCXoEvnglmvVxidErIFSP9bnUg==","signatures":[{"sig":"MEUCIE5AF5dAPUc+Pi+MWdqhKAFE9/pdZdyJZpEn6TBrSJiUAiEAo/lQBSPJgbOUO7ID6k9mn9wgKao21tEjVA/2XXk/AUE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":611371},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"86fc060104a846a6948d3a9f73d8407fecf6d765","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","format":"prettier --write 'src/**/*.ts'","lint:fix":"eslint src --ext .ts --fix","probe:api":"node scripts/probe-vocareum-api.mjs","typecheck":"tsc --noEmit","build:action":"tsc && cp action/action.yml dist/action/","test:coverage":"vitest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"ddlin","email":"david+npm@vocareum.com"},"repository":{"url":"git+https://github.com/ddlin/vocareum-publisher.git","type":"git"},"_npmVersion":"11.6.0","description":"Publish assignment content from GitHub to Vocareum","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ora":"^7.0.0","zod":"^3.22.0","axios":"^1.6.0","chalk":"^5.3.0","js-yaml":"^4.1.0","inquirer":"^9.2.0","commander":"^11.1.0","form-data":"^4.0.0","simple-git":"^3.21.0","cosmiconfig":"^9.0.0","@actions/core":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^8.56.0","vitest":"^1.0.0","prettier":"^3.1.0","typescript":"^5.3.0","@types/node":"^20.10.0","@types/js-yaml":"^4.0.9","@types/inquirer":"^9.0.7","@typescript-eslint/parser":"^6.15.0","@typescript-eslint/eslint-plugin":"^6.15.0"},"_npmOperationalInternal":{"tmp":"tmp/vocareum-publisher_1.0.3_1771089569426_0.9467748108880378","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"vocareum-publisher","version":"1.0.4","keywords":["vocareum","education","assignments","publishing","cli","github-action"],"author":{"name":"Vocareum"},"license":"MIT","_id":"vocareum-publisher@1.0.4","maintainers":[{"name":"ddlin","email":"david+npm@vocareum.com"}],"homepage":"https://github.com/ddlin/vocareum-publisher#readme","bugs":{"url":"https://github.com/ddlin/vocareum-publisher/issues"},"bin":{"vocareum-publish":"dist/index.js"},"dist":{"shasum":"cddb5979600a24c26cf823a299ce4b95ba2ffe04","tarball":"https://registry.npmjs.org/vocareum-publisher/-/vocareum-publisher-1.0.4.tgz","fileCount":141,"integrity":"sha512-05uvTSSk0pzxx5ZdRm0Au1UX2sd6JDYusdPSSFFTnejMblcOG1ohXiT5wVHU/4eVN2sVh2Kv+D4eoC1w8+WJnQ==","signatures":[{"sig":"MEUCIFKd/f+nwZNVOMgF5XNn78JH07PDbS9IlYIMcFfidHOfAiEAqHZxZVL8KkD71wV4l9zFY6fr6rXIwcOsgV9WkPaWjIQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":630430},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"b2d8d85b7fd71e08621347430ec74340016d27e6","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","format":"prettier --write 'src/**/*.ts'","lint:fix":"eslint src --ext .ts --fix","probe:api":"node scripts/probe-vocareum-api.mjs","typecheck":"tsc --noEmit","build:action":"tsc && cp action/action.yml dist/action/","test:coverage":"vitest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"ddlin","email":"david+npm@vocareum.com"},"repository":{"url":"git+https://github.com/ddlin/vocareum-publisher.git","type":"git"},"_npmVersion":"11.6.0","description":"Publish assignment content from GitHub to Vocareum","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ora":"^7.0.0","zod":"^3.22.0","axios":"^1.6.0","chalk":"^5.3.0","js-yaml":"^4.1.0","inquirer":"^9.2.0","commander":"^11.1.0","form-data":"^4.0.0","simple-git":"^3.21.0","cosmiconfig":"^9.0.0","@actions/core":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^8.56.0","vitest":"^1.0.0","prettier":"^3.1.0","typescript":"^5.3.0","@types/node":"^20.10.0","@types/js-yaml":"^4.0.9","@types/inquirer":"^9.0.7","@typescript-eslint/parser":"^6.15.0","@typescript-eslint/eslint-plugin":"^6.15.0"},"_npmOperationalInternal":{"tmp":"tmp/vocareum-publisher_1.0.4_1771092766911_0.14964406666200558","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"vocareum-publisher","version":"1.0.6","keywords":["vocareum","education","assignments","publishing","cli","github-action"],"author":{"name":"Vocareum"},"license":"MIT","_id":"vocareum-publisher@1.0.6","maintainers":[{"name":"ddlin","email":"david+npm@vocareum.com"}],"homepage":"https://github.com/ddlin/vocareum-publisher#readme","bugs":{"url":"https://github.com/ddlin/vocareum-publisher/issues"},"bin":{"vocareum-publish":"dist/index.js"},"dist":{"shasum":"8f2e07e7ecb309bb660694915b0da75942c8294f","tarball":"https://registry.npmjs.org/vocareum-publisher/-/vocareum-publisher-1.0.6.tgz","fileCount":141,"integrity":"sha512-CmEl9j5qq31tXSbkiqhlfdxlO4T6cX1meezpW4tth5Kkf3YDRDc5UY+f9tXU35c9ZBfYVKFt7Rg0YH6+mHMkQQ==","signatures":[{"sig":"MEUCIQCaVdK0C/pUDF5tc+WmKwPJiSKAqysBRdcUZo9HLKvppgIgBZx+IL25lEBpksKkqkr6Qa3BxeTTbjSjjWi551cTYLw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":631829},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"3968fd6ce42210cfd515e74d2f7438a824e02c31","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","format":"prettier --write 'src/**/*.ts'","lint:fix":"eslint src --ext .ts --fix","probe:api":"node scripts/probe-vocareum-api.mjs","typecheck":"tsc --noEmit","build:action":"tsc && cp action/action.yml dist/action/","test:coverage":"vitest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"ddlin","email":"david+npm@vocareum.com"},"repository":{"url":"git+https://github.com/ddlin/vocareum-publisher.git","type":"git"},"_npmVersion":"11.6.0","description":"Publish assignment content from GitHub to Vocareum","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ora":"^7.0.0","zod":"^3.22.0","axios":"^1.6.0","chalk":"^5.3.0","js-yaml":"^4.1.0","inquirer":"^9.2.0","commander":"^11.1.0","form-data":"^4.0.0","simple-git":"^3.21.0","cosmiconfig":"^9.0.0","@actions/core":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^8.56.0","vitest":"^1.0.0","prettier":"^3.1.0","typescript":"^5.3.0","@types/node":"^20.10.0","@types/js-yaml":"^4.0.9","@types/inquirer":"^9.0.7","@typescript-eslint/parser":"^6.15.0","@typescript-eslint/eslint-plugin":"^6.15.0"},"_npmOperationalInternal":{"tmp":"tmp/vocareum-publisher_1.0.6_1771129915547_0.8068788680492678","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"vocareum-publisher","version":"1.0.7","keywords":["vocareum","education","assignments","publishing","cli","github-action"],"author":{"name":"Vocareum"},"license":"MIT","_id":"vocareum-publisher@1.0.7","maintainers":[{"name":"ddlin","email":"david+npm@vocareum.com"}],"homepage":"https://github.com/ddlin/vocareum-publisher#readme","bugs":{"url":"https://github.com/ddlin/vocareum-publisher/issues"},"bin":{"vocareum-publish":"dist/index.js"},"dist":{"shasum":"17c695580c76f113510ac8771a4a90a40b33814b","tarball":"https://registry.npmjs.org/vocareum-publisher/-/vocareum-publisher-1.0.7.tgz","fileCount":141,"integrity":"sha512-8eHlPqJxfI3S1cli63kM0g9HjfK7avYrvtucZ05IVVyVUQ8ZxUtu/9TMKpCDkvR6IkCEQ8qqaemcOEbGqltoLg==","signatures":[{"sig":"MEUCIQCMj7dh6uk7w7tWdEOzJ/fXRKpENkPHl4J8847N2XbF/wIgG7FzSpzNJNlM+q9RSBV5KqkIoFwzR9PfPvUfifTyo10=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":632052},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"0522780ab8dae5ecbc9a224ecf5610893dbe335e","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","format":"prettier --write 'src/**/*.ts'","lint:fix":"eslint src --ext .ts --fix","probe:api":"node scripts/probe-vocareum-api.mjs","typecheck":"tsc --noEmit","build:action":"tsc && cp action/action.yml dist/action/","test:coverage":"vitest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"ddlin","email":"david+npm@vocareum.com"},"repository":{"url":"git+https://github.com/ddlin/vocareum-publisher.git","type":"git"},"_npmVersion":"11.6.0","description":"Publish assignment content from GitHub to Vocareum","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ora":"^7.0.0","zod":"^3.22.0","axios":"^1.6.0","chalk":"^5.3.0","js-yaml":"^4.1.0","inquirer":"^9.2.0","commander":"^11.1.0","form-data":"^4.0.0","simple-git":"^3.21.0","cosmiconfig":"^9.0.0","@actions/core":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^8.56.0","vitest":"^1.0.0","prettier":"^3.1.0","typescript":"^5.3.0","@types/node":"^20.10.0","@types/js-yaml":"^4.0.9","@types/inquirer":"^9.0.7","@typescript-eslint/parser":"^6.15.0","@typescript-eslint/eslint-plugin":"^6.15.0"},"_npmOperationalInternal":{"tmp":"tmp/vocareum-publisher_1.0.7_1771180320593_0.002960314274489839","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"vocareum-publisher","version":"1.0.8","keywords":["vocareum","education","assignments","publishing","cli","github-action"],"author":{"name":"Vocareum"},"license":"MIT","_id":"vocareum-publisher@1.0.8","maintainers":[{"name":"ddlin","email":"david+npm@vocareum.com"}],"homepage":"https://github.com/ddlin/vocareum-publisher#readme","bugs":{"url":"https://github.com/ddlin/vocareum-publisher/issues"},"bin":{"vocareum-publish":"dist/index.js"},"dist":{"shasum":"71a3744d6058c9a9f247a137975628566017921a","tarball":"https://registry.npmjs.org/vocareum-publisher/-/vocareum-publisher-1.0.8.tgz","fileCount":141,"integrity":"sha512-Dr3zgb/4PLKn4VBnxDZ0R6kJ1W4o37Flwmvnh96vrArV2n186md6zsxFtF6OpiRdTBmzJoHWB97NyeiYcyFpOQ==","signatures":[{"sig":"MEUCID7UmPMBsNqtoUvirkuxb5Z21pU9kqh6mfVy3pWWhmPrAiEAztjWzEedXT8sMv49QOPBf1k3CGcfJwV2+qfu6Q6xVv4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":651563},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"dc197aae638af097831e181c2c2686fe542effc5","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","format":"prettier --write 'src/**/*.ts'","lint:fix":"eslint src --ext .ts --fix","probe:api":"node scripts/probe-vocareum-api.mjs","typecheck":"tsc --noEmit","build:action":"tsc && cp action/action.yml dist/action/","test:coverage":"vitest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"ddlin","email":"david+npm@vocareum.com"},"repository":{"url":"git+https://github.com/ddlin/vocareum-publisher.git","type":"git"},"_npmVersion":"11.6.0","description":"Publish assignment content from GitHub to Vocareum","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ora":"^7.0.0","zod":"^3.22.0","axios":"^1.6.0","chalk":"^5.3.0","js-yaml":"^4.1.0","inquirer":"^9.2.0","commander":"^11.1.0","form-data":"^4.0.0","simple-git":"^3.21.0","cosmiconfig":"^9.0.0","@actions/core":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^8.56.0","vitest":"^1.0.0","prettier":"^3.1.0","typescript":"^5.3.0","@types/node":"^20.10.0","@types/js-yaml":"^4.0.9","@types/inquirer":"^9.0.7","@typescript-eslint/parser":"^6.15.0","@typescript-eslint/eslint-plugin":"^6.15.0"},"_npmOperationalInternal":{"tmp":"tmp/vocareum-publisher_1.0.8_1771182634261_0.1879068330322975","host":"s3://npm-registry-packages-npm-production"}},"1.0.9":{"name":"vocareum-publisher","version":"1.0.9","keywords":["vocareum","education","assignments","publishing","cli","github-action"],"author":{"name":"Vocareum"},"license":"MIT","_id":"vocareum-publisher@1.0.9","maintainers":[{"name":"ddlin","email":"david+npm@vocareum.com"}],"homepage":"https://github.com/ddlin/vocareum-publisher#readme","bugs":{"url":"https://github.com/ddlin/vocareum-publisher/issues"},"bin":{"vocgit":"dist/index.js"},"dist":{"shasum":"b07584fccd57d4008918737e7b9ba94e8889051a","tarball":"https://registry.npmjs.org/vocareum-publisher/-/vocareum-publisher-1.0.9.tgz","fileCount":141,"integrity":"sha512-e2+XqbkjOUg5HHlDRdAP6HfRUTOiJFHzG59hTcAEZm1LnFozVk4Xm0bKR/lrJW8FwQl3Cr2DtSt4m9nUichITw==","signatures":[{"sig":"MEUCIFQ8RVliWEJ+K+lIzASUpSfQ1KwLIjDo9vam3Avzd97JAiEAjfBjNKKURF1s3DR1I1ZB76nk0y8IxYAAMfq94gc4ma0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":651566},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"1c394d8c9d483317e8b9efcf43759d46c77f6c3c","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","format":"prettier --write 'src/**/*.ts'","lint:fix":"eslint src --ext .ts --fix","probe:api":"node scripts/probe-vocareum-api.mjs","typecheck":"tsc --noEmit","build:action":"tsc && cp action/action.yml dist/action/","test:coverage":"vitest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"ddlin","email":"david+npm@vocareum.com"},"repository":{"url":"git+https://github.com/ddlin/vocareum-publisher.git","type":"git"},"_npmVersion":"11.6.0","description":"Publish assignment content from GitHub to Vocareum","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ora":"^7.0.0","zod":"^3.22.0","axios":"^1.6.0","chalk":"^5.3.0","js-yaml":"^4.1.0","inquirer":"^9.2.0","commander":"^11.1.0","form-data":"^4.0.0","simple-git":"^3.21.0","cosmiconfig":"^9.0.0","@actions/core":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^8.56.0","vitest":"^1.0.0","prettier":"^3.1.0","typescript":"^5.3.0","@types/node":"^20.10.0","@types/js-yaml":"^4.0.9","@types/inquirer":"^9.0.7","@typescript-eslint/parser":"^6.15.0","@typescript-eslint/eslint-plugin":"^6.15.0"},"_npmOperationalInternal":{"tmp":"tmp/vocareum-publisher_1.0.9_1771184972938_0.5818750060234856","host":"s3://npm-registry-packages-npm-production"}},"1.0.10":{"name":"vocareum-publisher","version":"1.0.10","keywords":["vocareum","education","assignments","publishing","cli","github-action"],"author":{"name":"Vocareum"},"license":"MIT","_id":"vocareum-publisher@1.0.10","maintainers":[{"name":"ddlin","email":"david+npm@vocareum.com"}],"homepage":"https://github.com/ddlin/vocareum-publisher#readme","bugs":{"url":"https://github.com/ddlin/vocareum-publisher/issues"},"bin":{"vocgit":"dist/index.js"},"dist":{"shasum":"93942d06e77f06513afb9df083473b7429cc8045","tarball":"https://registry.npmjs.org/vocareum-publisher/-/vocareum-publisher-1.0.10.tgz","fileCount":141,"integrity":"sha512-EQx8VRIu/4bl3p6sNsbcUVKimmDxGkvAq5TiUv3gTj2gUatimphoVhoEMhfrQV7Y9keT7gkbItAayMmbPIrCbA==","signatures":[{"sig":"MEUCIGFc5wk32sll9C34hI9jqewOUrxb3M/20/OHoxrEtgEPAiEA8P+/iTlX7rH0po8ghCTOn/lbRdB5ZtsZqNeZ9K75g5c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":653989},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"5523cea2845e0b33eaaa18663d532451d07f4989","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","format":"prettier --write 'src/**/*.ts'","lint:fix":"eslint src --ext .ts --fix","probe:api":"node scripts/probe-vocareum-api.mjs","typecheck":"tsc --noEmit","build:action":"tsc && cp action/action.yml dist/action/","test:coverage":"vitest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"ddlin","email":"david+npm@vocareum.com"},"repository":{"url":"git+https://github.com/ddlin/vocareum-publisher.git","type":"git"},"_npmVersion":"11.6.0","description":"Publish assignment content from GitHub to Vocareum","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ora":"^7.0.0","zod":"^3.22.0","axios":"^1.6.0","chalk":"^5.3.0","js-yaml":"^4.1.0","inquirer":"^9.2.0","commander":"^11.1.0","form-data":"^4.0.0","simple-git":"^3.21.0","cosmiconfig":"^9.0.0","@actions/core":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^8.56.0","vitest":"^1.0.0","prettier":"^3.1.0","typescript":"^5.3.0","@types/node":"^20.10.0","@types/js-yaml":"^4.0.9","@types/inquirer":"^9.0.7","@typescript-eslint/parser":"^6.15.0","@typescript-eslint/eslint-plugin":"^6.15.0"},"_npmOperationalInternal":{"tmp":"tmp/vocareum-publisher_1.0.10_1771867204209_0.21211190694980764","host":"s3://npm-registry-packages-npm-production"}},"1.0.11":{"name":"vocareum-publisher","version":"1.0.11","keywords":["vocareum","education","assignments","publishing","cli","github-action"],"author":{"name":"Vocareum"},"license":"MIT","_id":"vocareum-publisher@1.0.11","maintainers":[{"name":"ddlin","email":"david+npm@vocareum.com"}],"homepage":"https://github.com/ddlin/vocareum-publisher#readme","bugs":{"url":"https://github.com/ddlin/vocareum-publisher/issues"},"bin":{"vocgit":"dist/index.js"},"dist":{"shasum":"fddb7e03019a20eb1fabd5e3bd82382628b120ec","tarball":"https://registry.npmjs.org/vocareum-publisher/-/vocareum-publisher-1.0.11.tgz","fileCount":141,"integrity":"sha512-R+xBJfVRnkhqBXGbCfFRzDarL90v/he+OJa5DqT1LXbbAhyKp+hM2N8Nb4kXb2aVygtzZlIkotZltNB7AylpXQ==","signatures":[{"sig":"MEYCIQCfAx5FqkqS1278fkbysdoNG/3lm6yZlwk/zLJwLAGWWwIhAMcN2M6J8x7nq299yMAPEll+l+xEUUQJhrmi0nj3OkKx","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":671311},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"12af19a14171a30da76571df7af95b6979845ff0","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","format":"prettier --write 'src/**/*.ts'","lint:fix":"eslint src --ext .ts --fix","probe:api":"node scripts/probe-vocareum-api.mjs","typecheck":"tsc --noEmit","build:action":"tsc && cp action/action.yml dist/action/","test:coverage":"vitest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"ddlin","email":"david+npm@vocareum.com"},"repository":{"url":"git+https://github.com/ddlin/vocareum-publisher.git","type":"git"},"_npmVersion":"11.6.0","description":"Publish assignment content from GitHub to Vocareum","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ora":"^7.0.0","zod":"^3.22.0","axios":"^1.6.0","chalk":"^5.3.0","js-yaml":"^4.1.0","inquirer":"^9.2.0","commander":"^11.1.0","form-data":"^4.0.0","simple-git":"^3.21.0","cosmiconfig":"^9.0.0","@actions/core":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^8.56.0","vitest":"^1.0.0","prettier":"^3.1.0","typescript":"^5.3.0","@types/node":"^20.10.0","@types/js-yaml":"^4.0.9","@types/inquirer":"^9.0.7","@typescript-eslint/parser":"^6.15.0","@typescript-eslint/eslint-plugin":"^6.15.0"},"_npmOperationalInternal":{"tmp":"tmp/vocareum-publisher_1.0.11_1771903931412_0.16643029787484598","host":"s3://npm-registry-packages-npm-production"}},"1.0.12":{"name":"vocareum-publisher","version":"1.0.12","keywords":["vocareum","education","assignments","publishing","cli","github-action"],"author":{"name":"Vocareum"},"license":"MIT","_id":"vocareum-publisher@1.0.12","maintainers":[{"name":"ddlin","email":"david+npm@vocareum.com"}],"homepage":"https://github.com/ddlin/vocareum-publisher#readme","bugs":{"url":"https://github.com/ddlin/vocareum-publisher/issues"},"bin":{"vocgit":"dist/index.js"},"dist":{"shasum":"8a36037a94fd7482cd5e567f67da723d6687c6f5","tarball":"https://registry.npmjs.org/vocareum-publisher/-/vocareum-publisher-1.0.12.tgz","fileCount":141,"integrity":"sha512-WbNgWdgWXMd8D2PcFXwuEie8N0kUGTk1E9g6vGDAksg4OlihMQb19WxCvyKIBQtopCZQF95j1LwRZXeSXatG2A==","signatures":[{"sig":"MEQCICMV4Z4AWMzu5yhV1J9LBwJUeYWeI2q3vQdJsd+91gaBAiBR8ERPtenmFOxXP/G66G1In1NBjbkiU+wu44BAtBv+hg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":671311},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"e79312da77f67ab480043c83c1bf8afd6d6ee5e6","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","format":"prettier --write 'src/**/*.ts'","lint:fix":"eslint src --ext .ts --fix","probe:api":"node scripts/probe-vocareum-api.mjs","typecheck":"tsc --noEmit","build:action":"tsc && cp action/action.yml dist/action/","test:coverage":"vitest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"ddlin","email":"david+npm@vocareum.com"},"repository":{"url":"git+https://github.com/ddlin/vocareum-publisher.git","type":"git"},"_npmVersion":"11.6.0","description":"Publish assignment content from GitHub to Vocareum","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ora":"^7.0.0","zod":"^3.22.0","axios":"^1.6.0","chalk":"^4.1.2","js-yaml":"^4.1.0","inquirer":"^9.2.0","commander":"^11.1.0","form-data":"^4.0.0","simple-git":"^3.21.0","cosmiconfig":"^9.0.0","@actions/core":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^8.56.0","vitest":"^1.0.0","prettier":"^3.1.0","typescript":"^5.3.0","@types/node":"^20.10.0","@types/js-yaml":"^4.0.9","@types/inquirer":"^9.0.7","@typescript-eslint/parser":"^6.15.0","@typescript-eslint/eslint-plugin":"^6.15.0"},"_npmOperationalInternal":{"tmp":"tmp/vocareum-publisher_1.0.12_1771907627004_0.897187815015049","host":"s3://npm-registry-packages-npm-production"}},"1.0.13":{"name":"vocareum-publisher","version":"1.0.13","keywords":["vocareum","education","assignments","publishing","cli","github-action"],"author":{"name":"Vocareum"},"license":"MIT","_id":"vocareum-publisher@1.0.13","maintainers":[{"name":"ddlin","email":"david+npm@vocareum.com"}],"homepage":"https://github.com/ddlin/vocareum-publisher#readme","bugs":{"url":"https://github.com/ddlin/vocareum-publisher/issues"},"bin":{"vocgit":"dist/index.js"},"dist":{"shasum":"5bc182dd3e9f71e89c4fd4f704749300c4fee1ea","tarball":"https://registry.npmjs.org/vocareum-publisher/-/vocareum-publisher-1.0.13.tgz","fileCount":141,"integrity":"sha512-9FdjVb/8henGgxW9eyOHxHKWJL6FkGehigrIIDaAtA3LYpWJ8jGR/mmHPTvZ8v3p3stwKRO1FoqLiESB7cf4pw==","signatures":[{"sig":"MEQCIE8rgnm/fQZQ1nFKMXZNHPkCidV6HZZW+yWmcg4pl3uKAiA963Ej7rCDin43BY6O/z5j0xQ8NBLPshe2EYysxym0nw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":679299},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"80960accfb09364da6090a284fc25083463c35a6","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","format":"prettier --write 'src/**/*.ts'","lint:fix":"eslint src --ext .ts --fix","probe:api":"node scripts/probe-vocareum-api.mjs","typecheck":"tsc --noEmit","build:action":"tsc && cp action/action.yml dist/action/","test:coverage":"vitest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"ddlin","email":"david+npm@vocareum.com"},"repository":{"url":"git+https://github.com/ddlin/vocareum-publisher.git","type":"git"},"_npmVersion":"11.6.0","description":"Publish assignment content from GitHub to Vocareum","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ora":"^7.0.0","zod":"^3.22.0","axios":"^1.6.0","chalk":"^4.1.2","js-yaml":"^4.1.0","inquirer":"^9.2.0","commander":"^11.1.0","form-data":"^4.0.0","simple-git":"^3.21.0","cosmiconfig":"^9.0.0","@actions/core":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^8.56.0","vitest":"^1.0.0","prettier":"^3.1.0","typescript":"^5.3.0","@types/node":"^20.10.0","@types/js-yaml":"^4.0.9","@types/inquirer":"^9.0.7","@typescript-eslint/parser":"^6.15.0","@typescript-eslint/eslint-plugin":"^6.15.0"},"_npmOperationalInternal":{"tmp":"tmp/vocareum-publisher_1.0.13_1773279926835_0.1081407464689228","host":"s3://npm-registry-packages-npm-production"}},"1.0.14":{"name":"vocareum-publisher","version":"1.0.14","keywords":["vocareum","education","assignments","publishing","cli","github-action"],"author":{"name":"Vocareum"},"license":"MIT","_id":"vocareum-publisher@1.0.14","maintainers":[{"name":"ddlin","email":"david+npm@vocareum.com"}],"homepage":"https://github.com/ddlin/vocareum-publisher#readme","bugs":{"url":"https://github.com/ddlin/vocareum-publisher/issues"},"bin":{"vocgit":"dist/index.js"},"dist":{"shasum":"e4a51f1291f1e0b6e145b286c66ee8047f976d9e","tarball":"https://registry.npmjs.org/vocareum-publisher/-/vocareum-publisher-1.0.14.tgz","fileCount":141,"integrity":"sha512-23csP5oGW/6PPZp81tVvon88LJoF2BapvaaGW2N1XUH5KnrdbAUj8ZMbg5NdwLuFwSjA5l7kDRIPOTR86xavgw==","signatures":[{"sig":"MEUCIAI5pXoFrJicBDpZm6hvXWj+dLf6dq7cwq4aV0oJmATWAiEAwabptX+FY1DiIpfx2pUT2uoFEKzXHHTyL9smmLxVHyo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":681180},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"5a2e1ebf0c581260d199205c1d9789865b3caf31","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","format":"prettier --write 'src/**/*.ts'","lint:fix":"eslint src --ext .ts --fix","probe:api":"node scripts/probe-vocareum-api.mjs","typecheck":"tsc --noEmit","build:action":"tsc && cp action/action.yml dist/action/","test:coverage":"vitest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"ddlin","email":"david+npm@vocareum.com"},"repository":{"url":"git+https://github.com/ddlin/vocareum-publisher.git","type":"git"},"_npmVersion":"11.6.0","description":"Publish assignment content from GitHub to Vocareum","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ora":"^7.0.0","zod":"^3.22.0","axios":"^1.6.0","chalk":"^4.1.2","js-yaml":"^4.1.0","inquirer":"^9.2.0","commander":"^11.1.0","form-data":"^4.0.0","simple-git":"^3.21.0","cosmiconfig":"^9.0.0","@actions/core":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^8.56.0","vitest":"^1.0.0","prettier":"^3.1.0","typescript":"^5.3.0","@types/node":"^20.10.0","@types/js-yaml":"^4.0.9","@types/inquirer":"^9.0.7","@typescript-eslint/parser":"^6.15.0","@typescript-eslint/eslint-plugin":"^6.15.0"},"_npmOperationalInternal":{"tmp":"tmp/vocareum-publisher_1.0.14_1773283402903_0.4519593994120259","host":"s3://npm-registry-packages-npm-production"}},"1.0.15":{"name":"vocareum-publisher","version":"1.0.15","keywords":["vocareum","education","assignments","publishing","cli","github-action"],"author":{"name":"Vocareum"},"license":"MIT","_id":"vocareum-publisher@1.0.15","maintainers":[{"name":"ddlin","email":"david+npm@vocareum.com"}],"homepage":"https://github.com/ddlin/vocareum-publisher#readme","bugs":{"url":"https://github.com/ddlin/vocareum-publisher/issues"},"bin":{"vocgit":"dist/index.js"},"dist":{"shasum":"257ae13309c6dbf7540c2fb2b495836cab15151d","tarball":"https://registry.npmjs.org/vocareum-publisher/-/vocareum-publisher-1.0.15.tgz","fileCount":141,"integrity":"sha512-lC8Cd9JtdvKsoBu8Jc7I1OLK+OpO9cYeUwMW0NgvzmdtAcfhRfRKlOS4NesPi7UjRinB3w+J/gheeN7RcCeL2w==","signatures":[{"sig":"MEUCIQDM2r6mR8Mh0fuPBpkvq9e2M0axfJc8fQpb9Rc6ZdVr2QIgGE1W3L81mgVbcKkNhvDqLrveVQXG9H5bu1CH57wOqio=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":690943},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"06fd991f5ef1878e748cab5ec8d183deb8b6ed59","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","format":"prettier --write 'src/**/*.ts'","lint:fix":"eslint src --ext .ts --fix","probe:api":"node scripts/probe-vocareum-api.mjs","typecheck":"tsc --noEmit","build:action":"tsc && cp action/action.yml dist/action/","test:coverage":"vitest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"ddlin","email":"david+npm@vocareum.com"},"repository":{"url":"git+https://github.com/ddlin/vocareum-publisher.git","type":"git"},"_npmVersion":"11.6.0","description":"Publish assignment content from GitHub to Vocareum","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ora":"^7.0.0","zod":"^3.22.0","axios":"^1.6.0","chalk":"^4.1.2","js-yaml":"^4.1.0","inquirer":"^9.2.0","commander":"^11.1.0","form-data":"^4.0.0","simple-git":"^3.21.0","cosmiconfig":"^9.0.0","@actions/core":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^8.56.0","vitest":"^1.0.0","prettier":"^3.1.0","typescript":"^5.3.0","@types/node":"^20.10.0","@types/js-yaml":"^4.0.9","@types/inquirer":"^9.0.7","@typescript-eslint/parser":"^6.15.0","@typescript-eslint/eslint-plugin":"^6.15.0"},"_npmOperationalInternal":{"tmp":"tmp/vocareum-publisher_1.0.15_1776979520430_0.10196839810247815","host":"s3://npm-registry-packages-npm-production"}},"1.0.16":{"name":"vocareum-publisher","version":"1.0.16","keywords":["vocareum","education","assignments","publishing","cli","github-action"],"author":{"name":"Vocareum"},"license":"MIT","_id":"vocareum-publisher@1.0.16","maintainers":[{"name":"ddlin","email":"david+npm@vocareum.com"}],"homepage":"https://github.com/ddlin/vocareum-publisher#readme","bugs":{"url":"https://github.com/ddlin/vocareum-publisher/issues"},"bin":{"vocgit":"dist/index.js"},"dist":{"shasum":"e6bda4591f6065058dd0d16928c40f67fad4e857","tarball":"https://registry.npmjs.org/vocareum-publisher/-/vocareum-publisher-1.0.16.tgz","fileCount":141,"integrity":"sha512-Bh1OstvaQuE8Sf0zBCR/n0eZxorT7oc8pHK0Pq+xWJEY5HJcwjuVov2uq8QRIFryG0FPxQ9ifTdKIJatue7W5w==","signatures":[{"sig":"MEUCIDZbLl/yg5rlLluBHnXjWsxoN7J+g+zwUKq19nJ6CIkYAiEA9wrHX6yOYJkTmYgt/01ucdbIqHwH8SMuivch3pXnUMM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":692577},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"0c4b8cd2f04e220158a244a11bacc34f78be40bf","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","format":"prettier --write 'src/**/*.ts'","lint:fix":"eslint src --ext .ts --fix","probe:api":"node scripts/probe-vocareum-api.mjs","typecheck":"tsc --noEmit","build:action":"tsc && cp action/action.yml dist/action/","test:coverage":"vitest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"ddlin","email":"david+npm@vocareum.com"},"repository":{"url":"git+https://github.com/ddlin/vocareum-publisher.git","type":"git"},"_npmVersion":"11.6.0","description":"Publish assignment content from GitHub to Vocareum","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ora":"^7.0.0","zod":"^3.22.0","axios":"^1.6.0","chalk":"^4.1.2","js-yaml":"^4.1.0","inquirer":"^9.2.0","commander":"^11.1.0","form-data":"^4.0.0","simple-git":"^3.21.0","cosmiconfig":"^9.0.0","@actions/core":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^8.56.0","vitest":"^1.0.0","prettier":"^3.1.0","typescript":"^5.3.0","@types/node":"^20.10.0","@types/js-yaml":"^4.0.9","@types/inquirer":"^9.0.7","@typescript-eslint/parser":"^6.15.0","@typescript-eslint/eslint-plugin":"^6.15.0"},"_npmOperationalInternal":{"tmp":"tmp/vocareum-publisher_1.0.16_1776988328594_0.708855561145862","host":"s3://npm-registry-packages-npm-production"}},"1.0.17":{"name":"vocareum-publisher","version":"1.0.17","keywords":["vocareum","education","assignments","publishing","cli","github-action"],"author":{"name":"Vocareum"},"license":"MIT","_id":"vocareum-publisher@1.0.17","maintainers":[{"name":"ddlin","email":"david+npm@vocareum.com"}],"homepage":"https://github.com/ddlin/vocareum-publisher#readme","bugs":{"url":"https://github.com/ddlin/vocareum-publisher/issues"},"bin":{"vocgit":"dist/index.js"},"dist":{"shasum":"4d18de1b6701970a0186dc9db7c4d7ed261c9c43","tarball":"https://registry.npmjs.org/vocareum-publisher/-/vocareum-publisher-1.0.17.tgz","fileCount":141,"integrity":"sha512-ZqQ/wyismIUZTSlFKMscYRErHT+t+1kfy7MBGHm627hSILRRub2wsMJqPCP0pJDzEXsrw6aPLlQ/D6AP8tf+Mg==","signatures":[{"sig":"MEQCIFNzaBDFB+smCJ1Xfauv0kAoJeuhL7RoRjt0Bt00NyaoAiB06qQCrMc0aRu8gQEH2lJNEH6YFaLb0vSbTQBuAwXsEQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":697586},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"93dcc5a04c462a34571f3ced8145f02ce92a3bbb","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","format":"prettier --write 'src/**/*.ts'","lint:fix":"eslint src --ext .ts --fix","probe:api":"node scripts/probe-vocareum-api.mjs","typecheck":"tsc --noEmit","build:action":"tsc && cp action/action.yml dist/action/","test:coverage":"vitest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"ddlin","email":"david+npm@vocareum.com"},"repository":{"url":"git+https://github.com/ddlin/vocareum-publisher.git","type":"git"},"_npmVersion":"11.6.0","description":"Publish assignment content from GitHub to Vocareum","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ora":"^7.0.0","zod":"^3.22.0","axios":"^1.6.0","chalk":"^4.1.2","js-yaml":"^4.1.0","inquirer":"^9.2.0","commander":"^11.1.0","form-data":"^4.0.0","simple-git":"^3.21.0","cosmiconfig":"^9.0.0","@actions/core":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^8.56.0","vitest":"^1.0.0","prettier":"^3.1.0","typescript":"^5.3.0","@types/node":"^20.10.0","@types/js-yaml":"^4.0.9","@types/inquirer":"^9.0.7","@typescript-eslint/parser":"^6.15.0","@typescript-eslint/eslint-plugin":"^6.15.0"},"_npmOperationalInternal":{"tmp":"tmp/vocareum-publisher_1.0.17_1776988838044_0.895071270339928","host":"s3://npm-registry-packages-npm-production"}},"1.0.18":{"name":"vocareum-publisher","version":"1.0.18","keywords":["vocareum","education","assignments","publishing","cli","github-action"],"author":{"name":"Vocareum"},"license":"MIT","_id":"vocareum-publisher@1.0.18","maintainers":[{"name":"ddlin","email":"david+npm@vocareum.com"}],"homepage":"https://github.com/ddlin/vocareum-publisher#readme","bugs":{"url":"https://github.com/ddlin/vocareum-publisher/issues"},"bin":{"vocgit":"dist/index.js"},"dist":{"shasum":"8f9c23ccf1ced1d9b3b4ef00812a25cec84cd92d","tarball":"https://registry.npmjs.org/vocareum-publisher/-/vocareum-publisher-1.0.18.tgz","fileCount":141,"integrity":"sha512-3s14xX0Mg/XAgyu3w8qasiTP38xVIGSglc++6iaNHnQsnXq/wF2p3pgIY9yrqOTmTiAFshYbhGJpOi/w156mnA==","signatures":[{"sig":"MEUCIQDEPE2SXtdPeUNld7Nwra/PD205dx1nFx5WLeFCrTb4UwIgQxrWt92mQ7uAomBMQpMnvc5/uxjnKyvy+BRM6PrlQlY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":702817},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"5ea34c6ae9512069f35b3896286e93833d7c7d04","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","format":"prettier --write 'src/**/*.ts'","lint:fix":"eslint src --ext .ts --fix","probe:api":"node scripts/probe-vocareum-api.mjs","typecheck":"tsc --noEmit","build:action":"tsc && cp action/action.yml dist/action/","test:coverage":"vitest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"ddlin","email":"david+npm@vocareum.com"},"repository":{"url":"git+https://github.com/ddlin/vocareum-publisher.git","type":"git"},"_npmVersion":"11.6.0","description":"Publish assignment content from GitHub to Vocareum","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ora":"^7.0.0","zod":"^3.22.0","axios":"^1.6.0","chalk":"^4.1.2","js-yaml":"^4.1.0","inquirer":"^9.2.0","commander":"^11.1.0","form-data":"^4.0.0","simple-git":"^3.21.0","cosmiconfig":"^9.0.0","@actions/core":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^8.56.0","vitest":"^1.0.0","prettier":"^3.1.0","typescript":"^5.3.0","@types/node":"^20.10.0","@types/js-yaml":"^4.0.9","@types/inquirer":"^9.0.7","@typescript-eslint/parser":"^6.15.0","@typescript-eslint/eslint-plugin":"^6.15.0"},"_npmOperationalInternal":{"tmp":"tmp/vocareum-publisher_1.0.18_1779229481887_0.3386001692726739","host":"s3://npm-registry-packages-npm-production"}},"1.0.19":{"name":"vocareum-publisher","version":"1.0.19","keywords":["vocareum","education","assignments","publishing","cli","github-action"],"author":{"name":"Vocareum"},"license":"MIT","_id":"vocareum-publisher@1.0.19","maintainers":[{"name":"ddlin","email":"david+npm@vocareum.com"}],"homepage":"https://github.com/ddlin/vocareum-publisher#readme","bugs":{"url":"https://github.com/ddlin/vocareum-publisher/issues"},"bin":{"vocgit":"dist/index.js"},"dist":{"shasum":"9bec0ee6ac3641ff858db94a8d7b73ebd73eebc4","tarball":"https://registry.npmjs.org/vocareum-publisher/-/vocareum-publisher-1.0.19.tgz","fileCount":141,"integrity":"sha512-QPeflOORVaCb+Kg7HHxGH1Pkz1hhwDvZ2yqrwc3O8UOMLSTwVLSitKXUfWDwCTXqT5GhpHYPT3MSCSO2sM53Xw==","signatures":[{"sig":"MEUCIQDwjw/oF0a5O4VApwidSKDpVBkI5xT7CCvmJPk3BPX+BQIgA6TJM9aekUWPlhe1gYFx8dsfWGgyp4DORftQYBVU2rM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":705386},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"244107e0e1371c69868778ffeb276bbb0db6e2ae","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","format":"prettier --write 'src/**/*.ts'","lint:fix":"eslint src --ext .ts --fix","probe:api":"node scripts/probe-vocareum-api.mjs","typecheck":"tsc --noEmit","build:action":"tsc && cp action/action.yml dist/action/","test:coverage":"vitest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"ddlin","email":"david+npm@vocareum.com"},"repository":{"url":"git+https://github.com/ddlin/vocareum-publisher.git","type":"git"},"_npmVersion":"11.6.0","description":"Publish assignment content from GitHub to Vocareum","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ora":"^7.0.0","zod":"^3.22.0","axios":"^1.6.0","chalk":"^4.1.2","js-yaml":"^4.1.0","inquirer":"^9.2.0","commander":"^11.1.0","form-data":"^4.0.0","simple-git":"^3.21.0","cosmiconfig":"^9.0.0","@actions/core":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^8.56.0","vitest":"^1.0.0","prettier":"^3.1.0","typescript":"^5.3.0","@types/node":"^20.10.0","@types/js-yaml":"^4.0.9","@types/inquirer":"^9.0.7","@typescript-eslint/parser":"^6.15.0","@typescript-eslint/eslint-plugin":"^6.15.0"},"_npmOperationalInternal":{"tmp":"tmp/vocareum-publisher_1.0.19_1779236507130_0.9515783791545931","host":"s3://npm-registry-packages-npm-production"}},"1.0.20":{"name":"vocareum-publisher","version":"1.0.20","keywords":["vocareum","education","assignments","publishing","cli","github-action"],"author":{"name":"Vocareum"},"license":"MIT","_id":"vocareum-publisher@1.0.20","maintainers":[{"name":"ddlin","email":"david+npm@vocareum.com"}],"homepage":"https://github.com/ddlin/vocareum-publisher#readme","bugs":{"url":"https://github.com/ddlin/vocareum-publisher/issues"},"bin":{"vocgit":"dist/index.js"},"dist":{"shasum":"7ef213e9f615bf4eaebf0c0d1cfb81c28943955e","tarball":"https://registry.npmjs.org/vocareum-publisher/-/vocareum-publisher-1.0.20.tgz","fileCount":149,"integrity":"sha512-T5o/Rxo000CjK3f3VvdWgtu7858QE8Neb1nMWiaeIFZgYTyprXa/YAq5rOfvSoY+yDGJ1Wt6M4X5M6BJ9RKsAQ==","signatures":[{"sig":"MEUCIHAB0+Ma88+ttIF9nHnJ6WhZPzYO5/0rspqRhVWsq8gCAiEAqDEunSNuTY+PhjewRX65Pe5bULMIWaNMqWJVwm+gdOE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":744949},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"3f9bbf275053ddd4ae65071e16c26e54d0b9ebfa","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","format":"prettier --write 'src/**/*.ts'","lint:fix":"eslint src --ext .ts --fix","probe:api":"node scripts/probe-vocareum-api.mjs","typecheck":"tsc --noEmit","build:action":"tsc && cp action/action.yml dist/action/","test:coverage":"vitest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"ddlin","email":"david+npm@vocareum.com"},"repository":{"url":"git+https://github.com/ddlin/vocareum-publisher.git","type":"git"},"_npmVersion":"11.6.0","description":"Publish assignment content from GitHub to Vocareum","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ora":"^7.0.0","zod":"^3.22.0","axios":"^1.6.0","chalk":"^4.1.2","js-yaml":"^4.1.0","inquirer":"^9.2.0","commander":"^11.1.0","form-data":"^4.0.0","simple-git":"^3.21.0","cosmiconfig":"^9.0.0","@actions/core":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^8.56.0","vitest":"^1.0.0","prettier":"^3.1.0","typescript":"^5.3.0","@types/node":"^20.10.0","@types/js-yaml":"^4.0.9","@types/inquirer":"^9.0.7","@typescript-eslint/parser":"^6.15.0","@typescript-eslint/eslint-plugin":"^6.15.0"},"_npmOperationalInternal":{"tmp":"tmp/vocareum-publisher_1.0.20_1779638105913_0.04339231529971066","host":"s3://npm-registry-packages-npm-production"}},"1.0.22":{"name":"vocareum-publisher","version":"1.0.22","keywords":["vocareum","education","assignments","publishing","cli","github-action"],"author":{"name":"Vocareum"},"license":"MIT","_id":"vocareum-publisher@1.0.22","maintainers":[{"name":"ddlin","email":"david+npm@vocareum.com"}],"homepage":"https://github.com/ddlin/vocareum-publisher#readme","bugs":{"url":"https://github.com/ddlin/vocareum-publisher/issues"},"bin":{"vocgit":"dist/index.js"},"dist":{"shasum":"5b75f3d371cf94e2c55ca05de22ab59ad9567990","tarball":"https://registry.npmjs.org/vocareum-publisher/-/vocareum-publisher-1.0.22.tgz","fileCount":149,"integrity":"sha512-iixNzWTA2NyVhIEpzEZurKg/929j8I/lhgyNxhL5VjDkexFPMY5w48fn+2CM/m3u28q7TT34Dpln1mROw2pmwg==","signatures":[{"sig":"MEUCIQCG4uxUQpQXcM1/7SbtNzZoywWKpQnSMk47pDtrcUGdMgIgWUdPGQ4J1yGZpBh0zGkBFvKDQPArMeoHmnaRIfJCPJ8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":775296},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"830d68de3f3d67d57da117e30ca802f0ae7f30f9","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","format":"prettier --write 'src/**/*.ts'","lint:fix":"eslint src --ext .ts --fix","probe:api":"node scripts/probe-vocareum-api.mjs","typecheck":"tsc --noEmit","build:action":"tsc && cp action/action.yml dist/action/","test:coverage":"vitest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"ddlin","email":"david+npm@vocareum.com"},"repository":{"url":"git+https://github.com/ddlin/vocareum-publisher.git","type":"git"},"_npmVersion":"11.6.0","description":"Publish assignment content from GitHub to Vocareum","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ora":"^7.0.0","zod":"^3.22.0","axios":"^1.6.0","chalk":"^4.1.2","js-yaml":"^4.1.0","inquirer":"^9.2.0","commander":"^11.1.0","form-data":"^4.0.0","simple-git":"^3.21.0","cosmiconfig":"^9.0.0","@actions/core":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^8.56.0","vitest":"^1.0.0","prettier":"^3.1.0","typescript":"^5.3.0","@types/node":"^20.10.0","@types/js-yaml":"^4.0.9","@types/inquirer":"^9.0.7","@typescript-eslint/parser":"^6.15.0","@typescript-eslint/eslint-plugin":"^6.15.0"},"_npmOperationalInternal":{"tmp":"tmp/vocareum-publisher_1.0.22_1779853369326_0.45784868900708964","host":"s3://npm-registry-packages-npm-production"}},"1.0.23":{"name":"vocareum-publisher","version":"1.0.23","keywords":["vocareum","education","assignments","publishing","cli","github-action"],"author":{"name":"Vocareum"},"license":"MIT","_id":"vocareum-publisher@1.0.23","maintainers":[{"name":"ddlin","email":"david+npm@vocareum.com"}],"homepage":"https://github.com/ddlin/vocareum-publisher#readme","bugs":{"url":"https://github.com/ddlin/vocareum-publisher/issues"},"bin":{"vocgit":"dist/index.js"},"dist":{"shasum":"2508b4e271fd176b42d984f44ba9346cf9be1f77","tarball":"https://registry.npmjs.org/vocareum-publisher/-/vocareum-publisher-1.0.23.tgz","fileCount":154,"integrity":"sha512-03Nyktd5ew/AxDPez5WDIp8cY9h58Aa/ThEWTU3ir0Kq8Ot33sx0tOC02izay9/AD9LYca5bO7KlwdTRF1cKcA==","signatures":[{"sig":"MEUCICQUG+Gjyl2OhBhdy5xjhK4hDUpPIkvDkRDbieXQXk9mAiEAyU2rBhVAEjIsYjgEcESmlJ7s5b0/zh4WMdp/kGbCfiI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":790404},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"f52b43a2667fdb8587952bce4ac40946e6b954ca","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","format":"prettier --write 'src/**/*.ts'","lint:fix":"eslint src --ext .ts --fix","probe:api":"node scripts/probe-vocareum-api.mjs","typecheck":"tsc --noEmit","build:action":"tsc && cp action/action.yml dist/action/","test:coverage":"vitest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"ddlin","email":"david+npm@vocareum.com"},"repository":{"url":"git+https://github.com/ddlin/vocareum-publisher.git","type":"git"},"_npmVersion":"11.6.0","description":"Publish assignment content from GitHub to Vocareum","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ora":"^7.0.0","zod":"^3.22.0","axios":"^1.6.0","chalk":"^4.1.2","js-yaml":"^4.1.0","inquirer":"^9.2.0","commander":"^11.1.0","form-data":"^4.0.0","simple-git":"^3.21.0","cosmiconfig":"^9.0.0","@actions/core":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^8.56.0","vitest":"^1.0.0","prettier":"^3.1.0","typescript":"^5.3.0","@types/node":"^20.10.0","@types/js-yaml":"^4.0.9","@types/inquirer":"^9.0.7","@typescript-eslint/parser":"^6.15.0","@typescript-eslint/eslint-plugin":"^6.15.0"},"_npmOperationalInternal":{"tmp":"tmp/vocareum-publisher_1.0.23_1779856560032_0.2628380986610954","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"vocareum-publisher","version":"1.1.0","keywords":["vocareum","education","assignments","publishing","cli","github-action"],"author":{"name":"Vocareum"},"license":"MIT","_id":"vocareum-publisher@1.1.0","maintainers":[{"name":"ddlin","email":"david+npm@vocareum.com"}],"homepage":"https://github.com/ddlin/vocareum-publisher#readme","bugs":{"url":"https://github.com/ddlin/vocareum-publisher/issues"},"bin":{"vocgit":"dist/index.js"},"dist":{"shasum":"566422538b5f3ef76096a41dbe65edef04a59e12","tarball":"https://registry.npmjs.org/vocareum-publisher/-/vocareum-publisher-1.1.0.tgz","fileCount":169,"integrity":"sha512-iM9Og/jfyvsxnb52MGTorzyxWDgxha8Bj7azsqRT3LwmeGH1sExpFkd4hGam+OVMHElyWosoudDnyzsRCeVnOQ==","signatures":[{"sig":"MEUCIQDAPttropHoZ81/1hYQ7BJDqMtg238ioQj6Xo94oioCiwIgd92lv8o7FX0E0mv2rGi3B8Z8cxlr1ULkOyfUNEma12I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":829242},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"1edd76fd31d68a8a88d81c00227b9ee2aef5da4e","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","format":"prettier --write 'src/**/*.ts'","lint:fix":"eslint src --ext .ts --fix","probe:v3":"node scripts/probe-v3-oauth.mjs","probe:api":"node scripts/probe-vocareum-api.mjs","typecheck":"tsc --noEmit","test:coverage":"vitest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"ddlin","email":"david+npm@vocareum.com"},"repository":{"url":"git+https://github.com/ddlin/vocareum-publisher.git","type":"git"},"_npmVersion":"11.6.0","description":"Publish assignment content from GitHub to Vocareum","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ora":"^7.0.0","zod":"^3.22.0","axios":"^1.6.0","chalk":"^4.1.2","js-yaml":"^4.1.0","inquirer":"^9.2.0","commander":"^11.1.0","form-data":"^4.0.0","simple-git":"^3.21.0","cosmiconfig":"^9.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^8.56.0","vitest":"^1.0.0","prettier":"^3.1.0","typescript":"^5.3.0","@types/node":"^20.10.0","@types/js-yaml":"^4.0.9","@types/inquirer":"^9.0.7","@typescript-eslint/parser":"^6.15.0","@typescript-eslint/eslint-plugin":"^6.15.0"},"_npmOperationalInternal":{"tmp":"tmp/vocareum-publisher_1.1.0_1780333984943_0.4300914561934932","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"vocareum-publisher","version":"1.1.1","keywords":["vocareum","education","assignments","publishing","cli","github-action"],"author":{"name":"Vocareum"},"license":"MIT","_id":"vocareum-publisher@1.1.1","maintainers":[{"name":"ddlin","email":"david+npm@vocareum.com"}],"homepage":"https://github.com/ddlin/vocareum-publisher#readme","bugs":{"url":"https://github.com/ddlin/vocareum-publisher/issues"},"bin":{"vocgit":"dist/index.js"},"dist":{"shasum":"08a2e7ccb3c23dfe520e72eef77678facb839037","tarball":"https://registry.npmjs.org/vocareum-publisher/-/vocareum-publisher-1.1.1.tgz","fileCount":169,"integrity":"sha512-Ajgz2BZd8oyzRTYqUcDKQd1rqSfCDZNjkNomGrKe3Oimqd0/MdhpXEXkxcGcj2bM1GD+F8NkhFp69uAIfeKWqw==","signatures":[{"sig":"MEQCIEWKLJ52OjlPGr6DAge/zinkuzq3VTiXvpGUx2UAkLw4AiBaz45s5plL3w61SubU+N6Kqp8nJsq0A1G0M+SNOk5GHw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1262358},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"82682be9abe18a37de059d593346b90e4803e7c3","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","format":"prettier --write 'src/**/*.ts'","lint:fix":"eslint src --ext .ts --fix","probe:v3":"node scripts/probe-v3-oauth.mjs","probe:api":"node scripts/probe-vocareum-api.mjs","typecheck":"tsc --noEmit","test:coverage":"vitest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"ddlin","email":"david+npm@vocareum.com"},"repository":{"url":"git+https://github.com/ddlin/vocareum-publisher.git","type":"git"},"_npmVersion":"11.6.0","description":"Publish assignment content from GitHub to Vocareum","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ora":"^7.0.0","zod":"^3.22.0","axios":"^1.6.0","chalk":"^4.1.2","js-yaml":"^4.1.0","inquirer":"^9.2.0","commander":"^11.1.0","form-data":"^4.0.0","simple-git":"^3.21.0","cosmiconfig":"^9.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^8.57.1","vitest":"^3.2.6","prettier":"^3.1.0","typescript":"^5.3.0","@types/node":"^20.10.0","@types/js-yaml":"^4.0.9","@types/inquirer":"^9.0.7","@vitest/coverage-v8":"^3.2.6","@typescript-eslint/parser":"^8.61.0","@typescript-eslint/eslint-plugin":"^8.61.0"},"_npmOperationalInternal":{"tmp":"tmp/vocareum-publisher_1.1.1_1781151112589_0.5824002017793057","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"vocareum-publisher","version":"1.2.0","keywords":["vocareum","education","assignments","publishing","cli","github-action"],"author":{"name":"Vocareum"},"license":"MIT","_id":"vocareum-publisher@1.2.0","maintainers":[{"name":"ddlin","email":"david+npm@vocareum.com"}],"homepage":"https://github.com/ddlin/vocareum-publisher#readme","bugs":{"url":"https://github.com/ddlin/vocareum-publisher/issues"},"bin":{"vocgit":"dist/index.js"},"dist":{"shasum":"f5475dc931f25267ce7eadbca1d008162ec2db0f","tarball":"https://registry.npmjs.org/vocareum-publisher/-/vocareum-publisher-1.2.0.tgz","fileCount":177,"integrity":"sha512-BgaYergtj1kV0MP8iAwYLl7ly/UopzG4kzK9foCCS7wxqkxBHJNrGRdjUy3NwBfzHEG63IR6rKeDZc4MXnW04g==","signatures":[{"sig":"MEUCIQDXBnYCvKNwm5POfbOVlIAXBlo4riL09IJU0Uv12kzOogIgRsRxFnGmQtMsXca1R6x0zU8PXQvNTWGrVKr4F1b2Q8M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1314438},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"f6337745b819ea54f78c15d4ca8796cdd4bce3f4","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","format":"prettier --write 'src/**/*.ts'","lint:fix":"eslint src --ext .ts --fix","probe:v3":"node scripts/probe-v3-oauth.mjs","probe:api":"node scripts/probe-vocareum-api.mjs","typecheck":"tsc --noEmit","test:coverage":"vitest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"ddlin","email":"david+npm@vocareum.com"},"repository":{"url":"git+https://github.com/ddlin/vocareum-publisher.git","type":"git"},"_npmVersion":"11.6.0","description":"Publish assignment content from GitHub to Vocareum","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ora":"^7.0.0","zod":"^3.22.0","axios":"^1.6.0","chalk":"^4.1.2","js-yaml":"^4.1.0","inquirer":"^9.2.0","commander":"^11.1.0","form-data":"^4.0.0","simple-git":"^3.21.0","cosmiconfig":"^9.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^8.57.1","vitest":"^3.2.6","prettier":"^3.1.0","typescript":"^5.3.0","@types/node":"^20.10.0","@types/js-yaml":"^4.0.9","@types/inquirer":"^9.0.7","@vitest/coverage-v8":"^3.2.6","@typescript-eslint/parser":"^8.61.0","@typescript-eslint/eslint-plugin":"^8.61.0"},"_npmOperationalInternal":{"tmp":"tmp/vocareum-publisher_1.2.0_1781218572761_0.41408326895961634","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"vocareum-publisher","version":"1.3.0","keywords":["vocareum","education","assignments","publishing","cli","github-action"],"author":{"name":"Vocareum"},"license":"MIT","_id":"vocareum-publisher@1.3.0","maintainers":[{"name":"ddlin","email":"david+npm@vocareum.com"}],"homepage":"https://github.com/ddlin/vocareum-publisher#readme","bugs":{"url":"https://github.com/ddlin/vocareum-publisher/issues"},"bin":{"vocgit":"dist/index.js"},"dist":{"shasum":"421aff361da70e6fbbdc888b2ef554dbdf9a7659","tarball":"https://registry.npmjs.org/vocareum-publisher/-/vocareum-publisher-1.3.0.tgz","fileCount":185,"integrity":"sha512-15G4F3Zrc34LlibkieZwOksE6ZbzAcHM8eGi5OvIKAGs8DwrwwkRFIy9HmTLE24PyT9dOjU8eNDMobYrjJLzAg==","signatures":[{"sig":"MEUCIQDAzocBCO+ouEl9qq1BzwJ5hC3IztvzCq+w8qLtrJkEpwIgafpZ7+opPQ86N5no3Hnrh48gjQaDcuSQVuMmo98SaXg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1350516},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"129bd80600804f3d12ed1560db75645f33584c53","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","format":"prettier --write 'src/**/*.ts'","lint:fix":"eslint src --ext .ts --fix","probe:v3":"node scripts/probe-v3-oauth.mjs","probe:api":"node scripts/probe-vocareum-api.mjs","typecheck":"tsc --noEmit","test:coverage":"vitest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"ddlin","email":"david+npm@vocareum.com"},"repository":{"url":"git+https://github.com/ddlin/vocareum-publisher.git","type":"git"},"_npmVersion":"11.6.0","description":"Publish assignment content from GitHub to Vocareum","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ora":"^7.0.0","zod":"^3.22.0","axios":"^1.6.0","chalk":"^4.1.2","js-yaml":"^4.1.0","inquirer":"^9.2.0","commander":"^11.1.0","form-data":"^4.0.0","simple-git":"^3.21.0","cosmiconfig":"^9.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^8.57.1","vitest":"^3.2.6","prettier":"^3.1.0","typescript":"^5.3.0","@types/node":"^20.10.0","@types/js-yaml":"^4.0.9","@types/inquirer":"^9.0.7","@vitest/coverage-v8":"^3.2.6","@typescript-eslint/parser":"^8.61.0","@typescript-eslint/eslint-plugin":"^8.61.0"},"_npmOperationalInternal":{"tmp":"tmp/vocareum-publisher_1.3.0_1782011465194_0.06786076699367083","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"vocareum-publisher","version":"1.3.1","keywords":["vocareum","education","assignments","publishing","cli","github-action"],"author":{"name":"Vocareum"},"license":"MIT","_id":"vocareum-publisher@1.3.1","maintainers":[{"name":"ddlin","email":"david+npm@vocareum.com"}],"homepage":"https://github.com/ddlin/vocareum-publisher#readme","bugs":{"url":"https://github.com/ddlin/vocareum-publisher/issues"},"bin":{"vocgit":"dist/index.js"},"dist":{"shasum":"b14eb669da43131aa0e262901fe3a321aaf2d617","tarball":"https://registry.npmjs.org/vocareum-publisher/-/vocareum-publisher-1.3.1.tgz","fileCount":189,"integrity":"sha512-0OaEo0iKP8S/7zTiofJNcirYGYFmlaR0qxW5WwbNnLL6oTTQOZBKSAyfhYOL3+3qtPKKjjMkspXonxgrc/63Fg==","signatures":[{"sig":"MEYCIQD8Yldf7T0Mr21+uH7ev8/TAX+cugdauXK1lxKAWZmu0gIhAMK9iFlPgPMSvE6B7/X87OAB3KEzxnyCB3keJzCPKQvA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1372976},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"d9ace79747aaeb201d72bbd495af78ba9e1c2cff","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"vitest","build":"tsc","format":"prettier --write 'src/**/*.ts'","lint:fix":"eslint src --ext .ts --fix","probe:v3":"node scripts/probe-v3-oauth.mjs","probe:api":"node scripts/probe-vocareum-api.mjs","typecheck":"tsc --noEmit","test:coverage":"vitest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"ddlin","email":"david+npm@vocareum.com"},"repository":{"url":"git+https://github.com/ddlin/vocareum-publisher.git","type":"git"},"_npmVersion":"11.6.0","description":"Publish assignment content from GitHub to Vocareum","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ora":"^7.0.0","zod":"^3.22.0","axios":"^1.6.0","chalk":"^4.1.2","js-yaml":"^4.1.0","inquirer":"^9.2.0","commander":"^11.1.0","form-data":"^4.0.0","simple-git":"^3.21.0","cosmiconfig":"^9.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^8.57.1","vitest":"^3.2.6","prettier":"^3.1.0","typescript":"^5.3.0","@types/node":"^20.10.0","@types/js-yaml":"^4.0.9","@types/inquirer":"^9.0.7","@vitest/coverage-v8":"^3.2.6","@typescript-eslint/parser":"^8.61.0","@typescript-eslint/eslint-plugin":"^8.61.0"},"_npmOperationalInternal":{"tmp":"tmp/vocareum-publisher_1.3.1_1782017720191_0.048550670381800165","host":"s3://npm-registry-packages-npm-production"}},"1.3.2":{"name":"vocareum-publisher","version":"1.3.2","keywords":["vocareum","education","assignments","publishing","cli","github-action"],"author":{"name":"Vocareum"},"license":"MIT","_id":"vocareum-publisher@1.3.2","maintainers":[{"name":"ddlin","email":"david+npm@vocareum.com"}],"homepage":"https://github.com/ddlin/vocareum-publisher#readme","bugs":{"url":"https://github.com/ddlin/vocareum-publisher/issues"},"bin":{"vocgit":"dist/index.js"},"dist":{"shasum":"d72d6ca90171761a188f4197f66604292653c209","tarball":"https://registry.npmjs.org/vocareum-publisher/-/vocareum-publisher-1.3.2.tgz","fileCount":237,"integrity":"sha512-L01fE5/z/Wfi/5/xlhn4l+uJxtS921ZAbp0gJiHk4myXAC8HvRq5RoqwU6XdU9xlqFUP80qU2Kkr7DqfJ4qlBw==","signatures":[{"sig":"MEYCIQCDUKFUsuiaF15RFe2pirjhbZRSOGjCtVTyKSX4nIo6kgIhAMcoB74EJsIYZTgCrXWbe9cwbEgh19BP11hwGHMttB7u","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1493171},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"1c920080f0733f0c9d4d50cf398fc2624aef34de","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"npm run build && vitest","build":"tsc","format":"prettier --write 'src/**/*.ts'","lint:fix":"eslint src --ext .ts --fix","probe:v3":"node scripts/probe-v3-oauth.mjs","probe:api":"node scripts/probe-vocareum-api.mjs","typecheck":"tsc --noEmit","test:coverage":"vitest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"ddlin","email":"david+npm@vocareum.com"},"repository":{"url":"git+https://github.com/ddlin/vocareum-publisher.git","type":"git"},"_npmVersion":"11.6.0","description":"Publish assignment content from GitHub to Vocareum","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ora":"^7.0.0","zod":"^3.22.0","axios":"^1.6.0","chalk":"^4.1.2","js-yaml":"^4.1.0","inquirer":"^9.2.0","commander":"^11.1.0","form-data":"^4.0.0","simple-git":"^3.21.0","cosmiconfig":"^9.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^8.57.1","vitest":"^3.2.6","prettier":"^3.1.0","typescript":"^5.3.0","@types/node":"^20.10.0","@types/js-yaml":"^4.0.9","@types/inquirer":"^9.0.7","@vitest/coverage-v8":"^3.2.6","@typescript-eslint/parser":"^8.61.0","@typescript-eslint/eslint-plugin":"^8.61.0"},"_npmOperationalInternal":{"tmp":"tmp/vocareum-publisher_1.3.2_1782679744598_0.8022279355122321","host":"s3://npm-registry-packages-npm-production"}},"1.3.3":{"name":"vocareum-publisher","version":"1.3.3","keywords":["vocareum","education","assignments","publishing","cli","github-action"],"author":{"name":"Vocareum"},"license":"MIT","_id":"vocareum-publisher@1.3.3","maintainers":[{"name":"ddlin","email":"david+npm@vocareum.com"}],"homepage":"https://github.com/ddlin/vocareum-publisher#readme","bugs":{"url":"https://github.com/ddlin/vocareum-publisher/issues"},"bin":{"vocgit":"dist/index.js"},"dist":{"shasum":"0449c0133c79d4f3137f0b7b0bae06c07abcaf3e","tarball":"https://registry.npmjs.org/vocareum-publisher/-/vocareum-publisher-1.3.3.tgz","fileCount":237,"integrity":"sha512-WBbF4kix/MXYKwqayz4PKxxJJuKuecD5prJrRynFCuRITNt0ZvxZM6Wl50vZ3joH1ZRNiLT6rktNlxVVU5EEPw==","signatures":[{"sig":"MEUCIFt8aEGUVWMI1CmmXm6QdhtbsTT20/+xkSJpVKZUztjkAiEAy3osifTFumU0CEdtIQzkfT//PUYZrxvqebYw5Q1jz2I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1495762},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"d80f2b7ec86e52438ab87ad00a8db346f7845c58","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"npm run build && vitest","build":"tsc","format":"prettier --write 'src/**/*.ts'","lint:fix":"eslint src --ext .ts --fix","probe:v3":"node scripts/probe-v3-oauth.mjs","probe:api":"node scripts/probe-vocareum-api.mjs","typecheck":"tsc --noEmit","test:coverage":"vitest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"ddlin","email":"david+npm@vocareum.com"},"repository":{"url":"git+https://github.com/ddlin/vocareum-publisher.git","type":"git"},"_npmVersion":"11.6.0","description":"Publish assignment content from GitHub to Vocareum","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ora":"^7.0.0","zod":"^3.22.0","axios":"^1.6.0","chalk":"^4.1.2","js-yaml":"^4.1.0","inquirer":"^9.2.0","commander":"^11.1.0","form-data":"^4.0.0","simple-git":"^3.21.0","cosmiconfig":"^9.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^8.57.1","vitest":"^3.2.6","prettier":"^3.1.0","typescript":"^5.3.0","@types/node":"^20.10.0","@types/js-yaml":"^4.0.9","@types/inquirer":"^9.0.7","@vitest/coverage-v8":"^3.2.6","@typescript-eslint/parser":"^8.61.0","@typescript-eslint/eslint-plugin":"^8.61.0"},"_npmOperationalInternal":{"tmp":"tmp/vocareum-publisher_1.3.3_1783008657075_0.4895243962521343","host":"s3://npm-registry-packages-npm-production"}},"1.3.4":{"name":"vocareum-publisher","version":"1.3.4","keywords":["vocareum","education","assignments","publishing","cli","github-action"],"author":{"name":"Vocareum"},"license":"MIT","_id":"vocareum-publisher@1.3.4","maintainers":[{"name":"ddlin","email":"david+npm@vocareum.com"}],"homepage":"https://github.com/ddlin/vocareum-publisher#readme","bugs":{"url":"https://github.com/ddlin/vocareum-publisher/issues"},"bin":{"vocgit":"dist/index.js"},"dist":{"shasum":"630ef9290eb16f6931972ed14cfdbb496f1f96ca","tarball":"https://registry.npmjs.org/vocareum-publisher/-/vocareum-publisher-1.3.4.tgz","fileCount":237,"integrity":"sha512-TOO+wywLOpN7aa2XdSkTLipIkXfeQZckAb+wTpMPQZ55ujecVKcLFMA5XRe6PEKGm5wGW0xyAjlE7d2FkGfekg==","signatures":[{"sig":"MEQCIF8qVA2HmueNzc6tGOOozKvIDfKGKXbbJGLL029DaVB4AiABRH9BMMUckmXSs2t35SnoLR0TjfF/Idi8YWpT+YM15w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1502690},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"cb12a8f6fef59e4113fe1f91256ffd717417ac0a","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"npm run build && vitest","build":"tsc","format":"prettier --write 'src/**/*.ts'","lint:fix":"eslint src --ext .ts --fix","probe:v3":"node scripts/probe-v3-oauth.mjs","probe:api":"node scripts/probe-vocareum-api.mjs","typecheck":"tsc --noEmit","test:coverage":"vitest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"ddlin","email":"david+npm@vocareum.com"},"repository":{"url":"git+https://github.com/ddlin/vocareum-publisher.git","type":"git"},"_npmVersion":"11.6.0","description":"Publish assignment content from GitHub to Vocareum","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ora":"^7.0.0","zod":"^3.22.0","axios":"^1.6.0","chalk":"^4.1.2","js-yaml":"^4.1.0","inquirer":"^9.2.0","commander":"^11.1.0","form-data":"^4.0.0","simple-git":"^3.21.0","cosmiconfig":"^9.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^8.57.1","vitest":"^3.2.6","prettier":"^3.1.0","typescript":"^5.3.0","@types/node":"^20.10.0","@types/js-yaml":"^4.0.9","@types/inquirer":"^9.0.7","@vitest/coverage-v8":"^3.2.6","@typescript-eslint/parser":"^8.61.0","@typescript-eslint/eslint-plugin":"^8.61.0"},"_npmOperationalInternal":{"tmp":"tmp/vocareum-publisher_1.3.4_1783483545672_0.5915985840164104","host":"s3://npm-registry-packages-npm-production"}},"1.3.5":{"name":"vocareum-publisher","version":"1.3.5","keywords":["vocareum","education","assignments","publishing","cli","github-action"],"author":{"name":"Vocareum"},"license":"MIT","_id":"vocareum-publisher@1.3.5","maintainers":[{"name":"ddlin","email":"david+npm@vocareum.com"}],"homepage":"https://github.com/ddlin/vocareum-publisher#readme","bugs":{"url":"https://github.com/ddlin/vocareum-publisher/issues"},"bin":{"vocgit":"dist/index.js"},"dist":{"shasum":"acd2f6caf698630a422a57e1c600ab96c3257bb8","tarball":"https://registry.npmjs.org/vocareum-publisher/-/vocareum-publisher-1.3.5.tgz","fileCount":237,"integrity":"sha512-YXd+WYvsX2OpcuNA4fcrsu+4t1Q5pA0VPeAzxj943XyeTM3Dy3XLqpLwTRfgGZsi7xbP6I34rqbStL8pvVahQQ==","signatures":[{"sig":"MEYCIQD9K5ROKbTTrMhY3cZrGIv8nZiroyNgV2AY5FF1/65PUwIhALwvEGPHFrIU52Jj8Om1v+uVZ5oZByslVhUbNyisTeHe","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1508952},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"37eb60187acf98a50dba6073ad75230964def495","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"npm run build && vitest","build":"tsc","format":"prettier --write 'src/**/*.ts'","lint:fix":"eslint src --ext .ts --fix","probe:v3":"node scripts/probe-v3-oauth.mjs","probe:api":"node scripts/probe-vocareum-api.mjs","typecheck":"tsc --noEmit","test:coverage":"vitest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"ddlin","email":"david+npm@vocareum.com"},"repository":{"url":"git+https://github.com/ddlin/vocareum-publisher.git","type":"git"},"_npmVersion":"11.6.0","description":"Publish assignment content from GitHub to Vocareum","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ora":"^7.0.0","zod":"^3.22.0","axios":"^1.6.0","chalk":"^4.1.2","js-yaml":"^4.1.0","inquirer":"^9.2.0","commander":"^11.1.0","form-data":"^4.0.0","simple-git":"^3.21.0","cosmiconfig":"^9.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^8.57.1","vitest":"^3.2.6","prettier":"^3.1.0","typescript":"^5.3.0","@types/node":"^20.10.0","@types/js-yaml":"^4.0.9","@types/inquirer":"^9.0.7","@vitest/coverage-v8":"^3.2.6","@typescript-eslint/parser":"^8.61.0","@typescript-eslint/eslint-plugin":"^8.61.0"},"_npmOperationalInternal":{"tmp":"tmp/vocareum-publisher_1.3.5_1783490919034_0.04783257357470805","host":"s3://npm-registry-packages-npm-production"}},"1.3.6":{"name":"vocareum-publisher","version":"1.3.6","keywords":["vocareum","education","assignments","publishing","cli","github-action"],"author":{"name":"Vocareum"},"license":"MIT","_id":"vocareum-publisher@1.3.6","maintainers":[{"name":"ddlin","email":"david+npm@vocareum.com"}],"homepage":"https://github.com/ddlin/vocareum-publisher#readme","bugs":{"url":"https://github.com/ddlin/vocareum-publisher/issues"},"bin":{"vocgit":"dist/index.js"},"dist":{"shasum":"8c37ee05e3caf6dc37a1a553d8b800acf9c7e186","tarball":"https://registry.npmjs.org/vocareum-publisher/-/vocareum-publisher-1.3.6.tgz","fileCount":237,"integrity":"sha512-XdopAR5+tx2TDx/APJWlYA2dGdKCYY2+PTl1s5LuleF8erjjVCqgaG/m+IDEWbWqclOgETHj8NReYLfX9If4oQ==","signatures":[{"sig":"MEUCIGOnza8UGVUkNdJAkvpu3Kd3IStEf/M4DKjoG542kq6pAiEA4BitFAy53k0cbFQOKo8qiQVc1Leo1qsITu7xFREZhqs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1512062},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"1d928c744a2f72e23584b369e59f9ab7b4aa9199","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"npm run build && vitest","build":"tsc","format":"prettier --write 'src/**/*.ts'","lint:fix":"eslint src --ext .ts --fix","probe:v3":"node scripts/probe-v3-oauth.mjs","probe:api":"node scripts/probe-vocareum-api.mjs","typecheck":"tsc --noEmit","test:coverage":"vitest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"ddlin","email":"david+npm@vocareum.com"},"repository":{"url":"git+https://github.com/ddlin/vocareum-publisher.git","type":"git"},"_npmVersion":"11.6.0","description":"Publish assignment content from GitHub to Vocareum","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ora":"^7.0.0","zod":"^3.22.0","axios":"^1.6.0","chalk":"^4.1.2","js-yaml":"^4.1.0","inquirer":"^9.2.0","commander":"^11.1.0","form-data":"^4.0.0","simple-git":"^3.21.0","cosmiconfig":"^9.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^8.57.1","vitest":"^3.2.6","prettier":"^3.1.0","typescript":"^5.3.0","@types/node":"^20.10.0","@types/js-yaml":"^4.0.9","@types/inquirer":"^9.0.7","@vitest/coverage-v8":"^3.2.6","@typescript-eslint/parser":"^8.61.0","@typescript-eslint/eslint-plugin":"^8.61.0"},"_npmOperationalInternal":{"tmp":"tmp/vocareum-publisher_1.3.6_1783495542459_0.6704995051060185","host":"s3://npm-registry-packages-npm-production"}},"1.3.7":{"name":"vocareum-publisher","version":"1.3.7","keywords":["vocareum","education","assignments","publishing","cli","github-action"],"author":{"name":"Vocareum"},"license":"MIT","_id":"vocareum-publisher@1.3.7","maintainers":[{"name":"ddlin","email":"david+npm@vocareum.com"}],"homepage":"https://github.com/ddlin/vocareum-publisher#readme","bugs":{"url":"https://github.com/ddlin/vocareum-publisher/issues"},"bin":{"vocgit":"dist/index.js"},"dist":{"shasum":"38681ea84bb91c95d613d9a760bf73d5db0b35b0","tarball":"https://registry.npmjs.org/vocareum-publisher/-/vocareum-publisher-1.3.7.tgz","fileCount":237,"integrity":"sha512-Glx8zYil8EQplII9znfPsOanOL6WVVD4ISkoft0OyYtro0tinwlzuDHc4P77yji9ebvNHsCAJP8KsT6nHOK+SQ==","signatures":[{"sig":"MEUCIEm7rr0bP3g6dYabVDnJhjagwaPFgdsyiVnJH9+Yxk5yAiEA6s4y8BS2xvKCHZDBSyI+x4c8C1p3/bIqc28s9vbofJ4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1513963},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"0ae0d54f5035263e6b1a87bb64b7edd1f24bc091","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"npm run build && vitest","build":"tsc","format":"prettier --write 'src/**/*.ts'","lint:fix":"eslint src --ext .ts --fix","probe:v3":"node scripts/probe-v3-oauth.mjs","probe:api":"node scripts/probe-vocareum-api.mjs","typecheck":"tsc --noEmit","test:coverage":"vitest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"ddlin","email":"david+npm@vocareum.com"},"repository":{"url":"git+https://github.com/ddlin/vocareum-publisher.git","type":"git"},"_npmVersion":"11.6.0","description":"Publish assignment content from GitHub to Vocareum","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ora":"^7.0.0","zod":"^3.22.0","axios":"^1.6.0","chalk":"^4.1.2","js-yaml":"^4.1.0","inquirer":"^9.2.0","commander":"^11.1.0","form-data":"^4.0.0","simple-git":"^3.21.0","cosmiconfig":"^9.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^8.57.1","vitest":"^3.2.6","prettier":"^3.1.0","typescript":"^5.3.0","@types/node":"^20.10.0","@types/js-yaml":"^4.0.9","@types/inquirer":"^9.0.7","@vitest/coverage-v8":"^3.2.6","@typescript-eslint/parser":"^8.61.0","@typescript-eslint/eslint-plugin":"^8.61.0"},"_npmOperationalInternal":{"tmp":"tmp/vocareum-publisher_1.3.7_1783523966437_0.7529743139974836","host":"s3://npm-registry-packages-npm-production"}},"1.3.8":{"name":"vocareum-publisher","version":"1.3.8","keywords":["vocareum","education","assignments","publishing","cli","github-action"],"author":{"name":"Vocareum"},"license":"MIT","_id":"vocareum-publisher@1.3.8","maintainers":[{"name":"ddlin","email":"david+npm@vocareum.com"}],"homepage":"https://github.com/ddlin/vocareum-publisher#readme","bugs":{"url":"https://github.com/ddlin/vocareum-publisher/issues"},"bin":{"vocgit":"dist/index.js"},"dist":{"shasum":"c7fa972e68cdd217fa73e781f2c5560640816f27","tarball":"https://registry.npmjs.org/vocareum-publisher/-/vocareum-publisher-1.3.8.tgz","fileCount":237,"integrity":"sha512-7uK7eyXCV1BO66FIj5aV0wrdc1iDX9pNNv1wn7PrIv0zIcGzptkFTiVs+8G5Kco0Zw2/O4QVTKm/JKJ0zMjtvQ==","signatures":[{"sig":"MEUCIQDgSyoEyUQIRCgvFA/RIFbHDYfGm6glxG6NbKLr+HnGSwIgKyYDjhXw1ws70qWIL7ckpLiLCX42Il2Z68r4RtnVq/4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1520058},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"548087decf0181d69f492379425e525fd8bcfdcb","scripts":{"dev":"tsx src/index.ts","lint":"eslint src --ext .ts","test":"npm run build && vitest","build":"tsc","format":"prettier --write 'src/**/*.ts'","lint:fix":"eslint src --ext .ts --fix","probe:v3":"node scripts/probe-v3-oauth.mjs","probe:api":"node scripts/probe-vocareum-api.mjs","typecheck":"tsc --noEmit","test:coverage":"vitest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"ddlin","email":"david+npm@vocareum.com"},"repository":{"url":"git+https://github.com/ddlin/vocareum-publisher.git","type":"git"},"_npmVersion":"11.6.0","description":"Publish assignment content from GitHub to Vocareum","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ora":"^7.0.0","zod":"^3.22.0","axios":"^1.6.0","chalk":"^4.1.2","js-yaml":"^4.1.0","inquirer":"^9.2.0","commander":"^11.1.0","form-data":"^4.0.0","simple-git":"^3.21.0","cosmiconfig":"^9.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","eslint":"^8.57.1","vitest":"^3.2.6","prettier":"^3.1.0","typescript":"^5.3.0","@types/node":"^20.10.0","@types/js-yaml":"^4.0.9","@types/inquirer":"^9.0.7","@vitest/coverage-v8":"^3.2.6","@typescript-eslint/parser":"^8.61.0","@typescript-eslint/eslint-plugin":"^8.61.0"},"_npmOperationalInternal":{"tmp":"tmp/vocareum-publisher_1.3.8_1788381556255_0.1759991921350117","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"vocareum-publisher","version":"1.4.0","description":"Publish assignment content from GitHub to Vocareum","main":"./dist/index.js","types":"./dist/index.d.ts","bin":{"vocgit":"dist/index.js"},"scripts":{"build":"tsc","dev":"tsx src/index.ts","probe:api":"node scripts/probe-vocareum-api.mjs","probe:v3":"node scripts/probe-v3-oauth.mjs","probe:rubrics":"node scripts/probe-rubrics.mjs","test":"npm run build && vitest","test:coverage":"vitest --coverage","lint":"eslint src --ext .ts","lint:fix":"eslint src --ext .ts --fix","format":"prettier --write 'src/**/*.ts'","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"engines":{"node":">=18.0.0"},"keywords":["vocareum","education","assignments","publishing","cli","github-action"],"author":{"name":"Vocareum"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/ddlin/vocareum-publisher.git"},"bugs":{"url":"https://github.com/ddlin/vocareum-publisher/issues"},"homepage":"https://github.com/ddlin/vocareum-publisher#readme","dependencies":{"axios":"^1.6.0","chalk":"^4.1.2","commander":"^11.1.0","cosmiconfig":"^9.0.0","form-data":"^4.0.0","inquirer":"^9.2.0","js-yaml":"^4.1.0","ora":"^7.0.0","simple-git":"^3.21.0","zod":"^3.22.0"},"devDependencies":{"@types/inquirer":"^9.0.7","@types/js-yaml":"^4.0.9","@types/node":"^20.10.0","@typescript-eslint/eslint-plugin":"^8.61.0","@typescript-eslint/parser":"^8.61.0","@vitest/coverage-v8":"^3.2.6","eslint":"^8.57.1","prettier":"^3.1.0","tsx":"^4.7.0","typescript":"^5.3.0","vitest":"^3.2.6"},"_id":"vocareum-publisher@1.4.0","gitHead":"888de171a5e089107e80d1f062945b71deaf2600","_nodeVersion":"24.10.0","_npmVersion":"11.6.0","dist":{"integrity":"sha512-Qcf0H4CYmGlqMNI34FZkAZankO21aD2s6ddHaTqlkGSnygz0woPbGGLT2D3DfysBg88vpHoFFFFVbfk9R3K3Dg==","shasum":"6733aefdf9a65164b1ce093c30f8611878f2051e","tarball":"https://registry.npmjs.org/vocareum-publisher/-/vocareum-publisher-1.4.0.tgz","fileCount":257,"unpackedSize":1773029,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIAWxK69HZvwQsKz/+e+vdk9lK6KWVZT0IMcm46dIf2vWAiEA3gQeayZKsPieO77OUr+Pwte6uRqPPBRRvW843ATOPag="}]},"_npmUser":{"name":"ddlin","email":"david+npm@vocareum.com"},"directories":{},"maintainers":[{"name":"ddlin","email":"david+npm@vocareum.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/vocareum-publisher_1.4.0_1788586311728_0.818577336368226"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-13T08:20:50.765Z","modified":"2026-09-05T05:31:52.030Z","1.0.0":"2026-02-13T08:20:50.940Z","1.0.1":"2026-02-13T19:37:53.663Z","1.0.2":"2026-02-14T08:18:06.682Z","1.0.3":"2026-02-14T17:19:29.590Z","1.0.4":"2026-02-14T18:12:47.103Z","1.0.6":"2026-02-15T04:31:55.697Z","1.0.7":"2026-02-15T18:32:00.810Z","1.0.8":"2026-02-15T19:10:34.423Z","1.0.9":"2026-02-15T19:49:33.114Z","1.0.10":"2026-02-23T17:20:04.401Z","1.0.11":"2026-02-24T03:32:11.596Z","1.0.12":"2026-02-24T04:33:47.137Z","1.0.13":"2026-03-12T01:45:26.996Z","1.0.14":"2026-03-12T02:43:23.073Z","1.0.15":"2026-04-23T21:25:20.573Z","1.0.16":"2026-04-23T23:52:08.730Z","1.0.17":"2026-04-24T00:00:38.179Z","1.0.18":"2026-05-19T22:24:42.048Z","1.0.19":"2026-05-20T00:21:47.370Z","1.0.20":"2026-05-24T15:55:06.152Z","1.0.22":"2026-05-27T03:42:49.504Z","1.0.23":"2026-05-27T04:36:00.312Z","1.1.0":"2026-06-01T17:13:05.122Z","1.1.1":"2026-06-11T04:11:52.749Z","1.2.0":"2026-06-11T22:56:12.955Z","1.3.0":"2026-06-21T03:11:05.355Z","1.3.1":"2026-06-21T04:55:20.394Z","1.3.2":"2026-06-28T20:49:04.740Z","1.3.3":"2026-07-02T16:10:57.223Z","1.3.4":"2026-07-08T04:05:45.892Z","1.3.5":"2026-07-08T06:08:39.171Z","1.3.6":"2026-07-08T07:25:42.697Z","1.3.7":"2026-07-08T15:19:26.592Z","1.3.8":"2026-09-02T20:39:16.451Z","1.4.0":"2026-09-05T05:31:51.880Z"},"bugs":{"url":"https://github.com/ddlin/vocareum-publisher/issues"},"author":{"name":"Vocareum"},"license":"MIT","homepage":"https://github.com/ddlin/vocareum-publisher#readme","keywords":["vocareum","education","assignments","publishing","cli","github-action"],"repository":{"type":"git","url":"git+https://github.com/ddlin/vocareum-publisher.git"},"description":"Publish assignment content from GitHub to Vocareum","maintainers":[{"name":"ddlin","email":"david+npm@vocareum.com"}],"readme":"# Vocareum Publisher\n\nPush assignment content from GitHub to Vocareum.\n\nA CLI tool and GitHub Action that enables instructors to maintain assignment content in Git with full version control while seamlessly syncing to Vocareum.\n\nReleased components (the CLI and the VS Code extension are versioned independently — see the [CHANGELOG](CHANGELOG.md), [npm](https://www.npmjs.com/package/vocareum-publisher), and the [Releases](https://github.com/ddlin/vocareum-publisher/releases) page for current versions):\n- CLI package: [`vocareum-publisher`](https://www.npmjs.com/package/vocareum-publisher) on npm (`npm install -g vocareum-publisher`)\n- VS Code extension: `vocgit` — see [vscode-extension/](vscode-extension/) for installation\n\n**[Video Walkthrough](https://www.loom.com/share/2af5f925c0244db0bf9825f8e7e133bd)** - Watch a quick demo of vocgit in action.\n\n## Features\n\n- **Git-First Workflow**: GitHub is the source of truth for all assignment content\n- **CLI Tool**: Local development and push via command line\n- **GitHub Action**: Automated CI/CD push on git push\n- **Change Detection**: Only uploads changed content (efficient)\n- **Template-Based Creation**: Create new assignments from templates\n- **Validation**: Verify configuration before pushing\n- **Forward-Compatible Settings**: Unrecognized Vocareum settings fields are preserved under `_unknown_settings` in `vocareum.yaml` and passed back through on push, so new platform features never silently drop out of your config\n\n## Installation\n\n```bash\nnpm install -g vocareum-publisher\n```\n\n## Quick Start\n\n### 1. Initialize a Course Repository\n\n```bash\nmkdir my-course && cd my-course\ngit init\nvocgit init\n```\n\n### 2. Create an Assignment\n\n```bash\nvocgit new lab1-intro\n# Follow interactive prompts\n```\n\n### 3. Add Content\n\nAdd your files to the generated directory structure:\n\n```\nlab1-intro/\n├── part1/\n│   ├── startercode/   # Student-visible starter code\n│   ├── scripts/       # Grading scripts\n│   ├── docs/          # Documentation\n│   ├── data/          # Datasets\n│   └── private/       # Private files\n```\n\n`vocgit new` scaffolds one part (`part1`) with default directories:\n`startercode`, `scripts`, `docs`, `data`, and `private`.\nIf needed, add `lib` and `asnlib` manually and include them in `parts[].directories`.\n\n### 4. Validate and Push\n\n```bash\nvocgit validate\nvocgit push\n```\n\n### 5. Commit and Push\n\n```bash\ngit add .\ngit commit -m \"Add Lab 1\"\ngit push\n```\n\n## Configuration\n\nAll configuration is stored in `vocareum.yaml`:\n\n```yaml\nversion: \"1.0\"\n\nvocareum:\n  org_id: \"12345\"\n  course_id: \"67890\"\n  templates:                        # Named templates for creating new assignments\n    - id: \"99999\"\n      name: \"Standard Lab\"\n      course_id: \"67890\"            # Same course\n    - id: \"88888\"\n      name: \"Cloud Lab\"\n      course_id: \"11111\"            # Template in different course\n    - id: \"77777\"\n      name: \"Timed Exam\"\n      course_id: \"67890\"\n  excluded_assignments:       # Assignment IDs to hide from orphan detection\n    - \"111222\"\n    - \"333444\"\n  course_settings:            # Optional course metadata sync\n    name: \"Intro to ML\"\n    description: \"Spring section\"\n\nassignments:\n  - assignment_id: \"11111\"\n    name: \"Lab 1: Introduction\"\n    path: \"lab1-intro\"\n    sync_settings: true              # Optional override; defaults to publish_options.sync_settings\n    settings:                       # Optional assignment settings\n      nosubmit: false\n      publish: true\n      publish_grades: false\n      auto_submit: false\n      grading_on_submit: true\n      exam_mode: \"TIMED\"            # NO_EXAM, SCHEDULED, TIMED, TIMED_UNRESTRICTED\n      exam_duration: 120\n      num_attempts: 3\n      grading_visibility: \"ALL\"     # ALL or ASSIGNED\n      _observed_settings:           # Pull-only API fields; vocgit does not push these\n        description: \"Introduction to the course\"\n    parts:\n      - part_id: \"22222\"\n        path: \"part1\"\n        name: \"Part 1: Setup\"\n        sync_settings: true          # Optional part-level override\n        settings:                   # Optional part settings\n          submission_filters:\n            include: [\"*.py\"]\n            exclude: [\"*.pyc\"]\n          session_length: \"60\"      # minutes\n          late_penalty_percent: 10  # Accepted by API; may not echo on read\n          late_penalty_percent_rule: \"max score\"\n          deadlinedate: \"2025-03-15T23:59:00Z\"\n          number_of_submissions: 5\n          lab_interface:\n            panels: [\"Console\"]\n            controls: [\"Reset\"]\n        rubrics:                       # Recorded by `pull`; created/updated by `push` (never deleted)\n          - name: \"[Tasks 2-5] Prompts were run in the playground\"\n            seqnum: \"1\"\n            maxscore: \"10\"\n            auto: true\n            exclude: false\n  - assignment_id: null\n    name: \"Lab 2: Classification\"\n    assignment_name_for_lookup: \"Lab 2: Classification\"  # Optional name-based ID discovery\n    path: \"lab2-classification\"\n    parts:\n      - part_id: null\n        path: \"part1\"\n        name: \"Part 1: Implementation\"\n        settings:\n          cloud_labs: true\n          session_length: \"60\"\n          labtype: \"JupyterLab\"\n          endlab: true\n\npublish_options:\n  on_missing_id: \"skip\"\n  auto_commit: false\n  sync_settings: true                # Set false to sync files only, not settings\n  sync_rubrics: true                 # Set false to skip fetching/pushing rubrics (at least one extra API call per part)\n  sync_deletes: false\n\npublish_history:\n  - timestamp: \"2026-02-12T22:30:00Z\"\n    commit_sha: \"abc123def456\"\n    published_by: \"github-actions\"\n    status: \"failed\"   # success | failed\n    content_state:\n      \"lab1-intro/part1/startercode\": \"9a7f...\"\n    failed:\n      - type: \"file\"\n        id: \"22222/startercode/main.py\"\n        error: \"Timed out after 30000ms waiting for part update (txn=123)\"\n```\n\n## Understanding Settings Sync\n\nvocgit keeps assignment and part settings in sync between `vocareum.yaml` and Vocareum. The fields you set under `settings:` are pushed on `vocgit push`, and `vocgit pull` detects when Vocareum's values have drifted from yours.\n\nBecause Vocareum's API treats fields inconsistently — some are writable, some are read-only, some it accepts but never reports back — vocgit sorts every settings field into one of a few groups. After a `pull`, you may notice new keys appear in your YAML. **These are expected and safe to leave alone:**\n\n- **Top-level settings** (e.g. `nosubmit`, `session_length`, `submission_filters`) — fields vocgit both reads and writes. Edit these to change behavior on Vocareum.\n- **`_observed_settings`** — fields Vocareum reports on read but does **not** accept on write (or that only apply at create time). vocgit records them so your config reflects the real server state, but it never pushes them. Informational only.\n\n  This is where point totals live. A part's **`max_points`** and an assignment's\n  **`total_points`** are *derived* by Vocareum from the part's rubric criteria — the sum of\n  each criterion's `maxscore` where `exclude` is not true — and are not storable. Setting\n  `max_points` on a part is accepted and silently discarded; setting `total_points` on an\n  assignment is rejected outright. **To change a course's points, edit `parts[].rubrics`\n  in `vocareum.yaml` and push** — see [Rubrics](#rubrics) below. This is the *only* way\n  vocgit can change a course's points, since both point fields are otherwise read-only.\n- **`_unknown_settings`** — fields vocgit doesn't recognize yet (typically new Vocareum features). vocgit preserves them verbatim and passes them back through unchanged on the next push, so nothing is silently lost. When these appear, vocgit prints an end-of-run notice asking you to [file an issue](https://github.com/ddlin/vocareum-publisher/issues/new) so the field can be promoted to a supported setting.\n\n**\"Accepted but not confirmed\" fields.** Some writable fields (e.g. `exam_mode`, `exam_duration`, `deadlinedate`, `late_penalty_percent`) are accepted by the API on write but are not echoed back on read. vocgit writes them and trusts the success response — it just can't read them back to confirm the value applied, so it won't report drift on them.\n\n### Opting out of settings sync\n\nSet `sync_settings: false` to sync **files only** and leave Vocareum's settings untouched. This is useful when settings are managed in the Vocareum UI and you only want vocgit to push content.\n\nPrecedence (most specific wins): **part** → **assignment** → **`publish_options.sync_settings`** → defaults to `true`.\n\n```yaml\npublish_options:\n  sync_settings: false          # Global: don't sync any settings\nassignments:\n  - name: \"Lab 1\"\n    sync_settings: true         # ...except this assignment\n    parts:\n      - path: \"part1\"\n        sync_settings: false    # ...but not this part\n```\n\nWhen settings sync is disabled for an assignment or part, vocgit skips both pushing its settings and reporting settings drift for it on pull. The settings stay in `vocareum.yaml` — they're just ignored until you re-enable sync.\n\n### Rubrics\n\n`vocgit pull` fetches each part's grading rubric and records it under `parts[].rubrics` in `vocareum.yaml`, reporting drift the same way it does for settings. `vocgit push` then keeps Vocareum's rubric rows in sync with what's in `vocareum.yaml`: it **creates** local criteria that don't exist remotely and **updates** ones whose `maxscore`/`auto`/`exclude` drifted — matched by criterion **name**. This is on by default (see [Opting out](#opting-out-of-rubric-sync) below) and it's the only way vocgit can change a course's points, since `max_points`/`total_points` are otherwise read-only derived fields (see [Understanding Settings Sync](#understanding-settings-sync) above).\n\n**`push` never deletes a rubric criterion.** A remote row with no matching local name is reported as an *orphan* and left in place — you'll see it called out by name in the push confirmation, along with the resulting point total (\"points would go from 25 to 30\"), before anything is written. This matters because **renaming a criterion in `vocareum.yaml` does not rename it on Vocareum** — vocgit has no way to tell \"renamed\" apart from \"deleted one, added another\" — so a rename creates a *new* criterion (the old one becomes an orphan) and inflates the part's `max_points`. Watch for that line in the confirmation before you approve it.\n\nA part is refused entirely (nothing is written) if its rubric names collide — either two local criteria share a name, or two remote ones do — since a name match against duplicates is ambiguous and guessing risks updating the wrong row's points. In `--non-interactive` mode, when a part also has orphans, only its **creates** are held back — its updates still proceed, since an update can't duplicate or inflate points the way a create can. The run is logged as a failure; re-run interactively to confirm the held creates.\n\n**Rubric sync does not run for a newly created assignment** in the same push that creates it — the assignment is created from a template that already carries the template's rubrics, and diffing against not-yet-known remote IDs isn't meaningful in the same pass. Run `vocgit push` a second time and it reconciles rubrics for the new assignment normally, same as any other drift.\n\nEvery rubric write is recorded in `publish_history[].changes.rubrics`, one entry per part touched or held: which criteria were created and updated (by name), the resulting point delta, and — for a held part — why nothing was written.\n\nThe server-assigned rubric ID is deliberately not stored in `vocareum.yaml` — it's course-scoped and must not be reused if the rubric is later recreated in a different course.\n\n#### Opting out of rubric sync\n\nFetching and writing rubrics costs at least one extra API call per part (more on read if a part has over 100 criteria, since `listRubrics` paginates at 100 rows per page). Set `publish_options.sync_rubrics: false` to disable it — both the `pull`-side fetch/drift-check and the `push`-side create/update — on courses where that matters:\n\n```yaml\npublish_options:\n  sync_rubrics: false          # Skip fetching and pushing rubrics entirely\n```\n\n`sync_rubrics` is nested inside the settings-sync pass, not a separate one — `sync_settings: false` disables rubric sync too, regardless of `sync_rubrics`. There's no independent rubric-only traversal, so if you manage settings by hand in the Vocareum UI but still want rubrics synced from Git, that combination isn't supported yet. This only affects drift detection and push: importing an orphaned assignment on pull records its rubrics whenever `sync_rubrics` is on, the same way it records settings, regardless of `sync_settings`.\n\nThe rubrics **write** token permissions (POST, PUT — see [Generating a Token](#generating-a-token)) are required for `push` to create or update criteria; without them, `push` fails the run with an error telling you to regenerate the token, rather than silently leaving points unmigrated. The **read** permission (GET) is also required for `push`: before it can diff local criteria against remote, `push` reads each managed part's rubrics, and a failed read (missing scope included) now fails the run the same way a failed write does — a green push that silently migrated no points is exactly what this feature exists to prevent. GET is optional only for `pull`: a token without it logs a warning and pull continues normally, with settings and content drift unaffected. There are two independent read fetchers on the pull side (drift detection and orphan import), each warning at most once, so a single pull run can log that at most twice; push's own plan-time read is separate from both and is not counted in that limit.\n\n## CLI Commands\n\n| Command | Description |\n|---------|-------------|\n| `vocgit init` | Initialize a new course repository |\n| `vocgit new <path>` | Create new assignment structure |\n| `vocgit validate` | Validate configuration and structure |\n| `vocgit fix` | Interactively fix validation issues |\n| `vocgit pull` | Import or exclude orphaned assignments from Vocareum |\n| `vocgit status` | Show current local sync status (default command) |\n| `vocgit push` | Push content to Vocareum |\n\n```bash\nvocgit                  # Same as: vocgit status\nvocgit status --verbose # Include per-assignment details\nvocgit status --json    # Machine-readable content sync status (for tooling)\n```\n\n### Workspace Root (`--root`)\n\nAssignment and part paths in `vocareum.yaml` resolve against the **workspace\nroot**. By default this is the current directory, and that only works when the\nconfig file sits directly inside it (the normal case — repo root, GitHub\nAction, VS Code extension).\n\nIf you run vocgit from somewhere else, or keep the config in a subdirectory,\nyou must say where the workspace root is — guessing it can corrupt sync state:\n\n```bash\nvocgit push --config ../course-repo/vocareum.yaml --root ../course-repo\nvocgit status --config configs/vocareum.yaml --root .   # nested config, cwd-relative paths\n```\n\nWithout `--root` in those situations the command fails with an explanation\nrather than hashing the wrong directories. vocgit also refuses to read, upload,\nor delete anything outside the workspace root, including via symlinks.\n\n### Push Options\n\n```bash\nvocgit push --dry-run           # Preview changes\nvocgit push --assignment lab1   # Push specific assignment\nvocgit push --force-all         # Re-upload everything\nvocgit push --sync-deletes      # Delete files not in Git (experimental)\nvocgit push --non-interactive   # Skip confirmation prompt\nvocgit push --verbose           # Detailed logging\n```\n\n### Pull Command\n\nThe `pull` command helps you manage assignment sync issues:\n\n1. **Orphaned assignments** - exist in Vocareum but not in your local config\n2. **Stale assignments** - exist in your config but were deleted from Vocareum\n3. **Settings drift** - settings in Vocareum differ from your local config\n4. **Content drift** - files in Vocareum differ from your local files (**opt-in via `--content`**)\n\nThis is useful when:\n- You've created assignments directly in the Vocareum UI\n- You're onboarding an existing course to Git-based management\n- Assignments were created or deleted by another team member\n- Settings were changed in Vocareum UI and you want to sync them locally\n- Files were edited directly in Vocareum and you want to pull those changes\n\n```bash\nvocgit pull                # Interactive mode (no content drift check)\nvocgit pull --verbose      # Show detailed output\nvocgit pull --non-interactive  # Skip all issues\n```\n\n**Content drift detection is opt-in.** By default, `vocgit pull` (and `vocgit pull --batch`) does not download remote files to diff them — direct file edits in the Vocareum UI are NOT reconciled unless you ask for them. Add `--content` to enable the check. You can scope it with `--assignment <name|id>` (repeatable) and `--part <part_id>` (a part's `part_id`, not its directory name; requires exactly one `--assignment`):\n\n```bash\nvocgit pull --content                                  # check all assignments for content drift\nvocgit pull --batch --content                          # batch sync including content drift\nvocgit pull --content --assignment lab1                # scope to lab1 only\nvocgit pull --content --assignment lab1 --part <part_id>  # scope to one part by its part_id\n```\n\n`--skip-content` is a separate flag that controls orphan-import behavior only — it tells vocgit to skip downloading files for newly imported orphan assignments (useful to retry after a failed pull). It has no effect on content drift detection.\n\nRemote content downloads fail closed if a pull would exceed built-in safety\nlimits: 5,000 files, 100 MiB for any single file, or 500 MiB total for one\n`downloadContent` pass. These limits protect local machines and CI runners from\nunexpectedly large or malformed remote file listings.\n\n**For orphaned assignments** (in Vocareum, not in config):\n- **Import**: Download content and add to your local repository\n- **Exclude**: Hide from future scans (add to `excluded_assignments`)\n- **Skip**: Do nothing\n\n**For stale assignments** (in config, deleted from Vocareum):\n- **Reset ID**: Clear assignment_id to allow re-creation from template\n- **Remove**: Delete the assignment from config entirely\n- **Exclude**: Keep in config but skip during sync\n- **Skip**: Do nothing\n\n**For settings drift** (local settings differ from Vocareum):\n- **Pull**: Update local config with settings from Vocareum\n- **Keep**: Keep local settings (will overwrite Vocareum on next push; if the drift included rubrics, `push` also reconciles those — see [Rubrics](#rubrics))\n- **Skip**: Do nothing for now\n\nSet `publish_options.sync_settings: false` to skip course, assignment, and part settings sync while still syncing files. Assignments and parts can override this with their own `sync_settings` value; part settings take precedence over assignment settings, which take precedence over the global publish option. Disabled settings remain in `vocareum.yaml` but are ignored for drift detection and push updates.\n\n**For content drift** (files in Vocareum differ from local — requires `--content`):\n- **Pull**: Download remote files (overwrites local files)\n- **Keep**: Keep local files (will overwrite Vocareum on next push)\n- **Skip**: Do nothing for now\n\nExample workflow (with `--content` to include content drift):\n\n```\n$ vocgit pull --content\n\nℹ Scanning for assignment sync issues...\nℹ Found 1 orphaned assignment(s) in Vocareum.\n\n[1/1] Lab 3: Advanced Topics (ID: 555666)\n? What would you like to do? Import to local repository\n? Local directory name: lab3-advanced\n  Part 1/2: downloaded 5 files\n  Part 2/2: downloaded 3 files\n✓ Imported \"Lab 3: Advanced Topics\" to lab3-advanced/\n\nℹ Found 1 stale assignment(s) in config (deleted from Vocareum).\n\n[1/1] Old Lab (ID: 777888, path: old-lab)\n? This assignment was deleted from Vocareum. What would you like to do?\n  Reset ID (allow re-creation from template)\n✓ Reset ID for \"Old Lab\" - will be re-created on next push\n\nℹ Found 1 assignment(s) with settings drift.\n\n[1/1] Lab 1: Introduction (ID: 11111)\n  Part \"Part 1\" settings changed:\n    - session_length: \"60\" → \"120\"\n    - cloud_labs: false → true\n? What would you like to do? Pull settings from Vocareum (update local config)\n✓ Will update local settings for \"Lab 1: Introduction\"\n\nℹ Found 1 assignment(s) with content changes on Vocareum.\n\n[1/1] Lab 2: Data Analysis (ID: 22222)\n  Content changes:\n    ~ docs/README.md (modified)\n    + scripts/new_test.py (new on remote)\n? What would you like to do? Pull remote files (overwrite local)\n✓ Pulled content changes for \"Lab 2: Data Analysis\"\n\nSummary:\n  Imported:        1\n  Settings pulled: 1\n  Content pulled:  1\n  Excluded:        0\n  Removed:         0\n  Reset:           1\n  Skipped:         0\n\nℹ Updated vocareum.yaml\n```\n\n### Throttling the Vocareum API\n\nvocgit schedules all Vocareum API calls through a built-in request throttle to avoid hitting rate limits, especially when pulling or pushing many assignments. The throttle is configurable via a `vocareum.throttle` block in `vocareum.yaml`:\n\n```yaml\nvocareum:\n  org_id: \"...\"\n  course_id: \"...\"\n  throttle:\n    max_concurrency: 1\n    min_interval_ms: 300\n    jitter: true\n```\n\n| Field | Default | Range | Description |\n|-------|---------|-------|-------------|\n| `max_concurrency` | `1` | 1–5 | Maximum number of concurrent Vocareum API requests |\n| `min_interval_ms` | `300` | 0–60000 | Minimum milliseconds between request starts |\n| `jitter` | `true` | — | Add random jitter to the start spacing to avoid thundering herd |\n\nRequests are FIFO-scheduled: each request waits until both the concurrency slot and the minimum interval are satisfied before starting. Jitter applies to the start spacing only — it does not affect retry backoff.\n\n**Environment variable overrides** (take precedence over `vocareum.yaml`):\n\n| Variable | Overrides |\n|----------|-----------|\n| `VOCAREUM_MAX_CONCURRENCY` | `vocareum.throttle.max_concurrency` |\n| `VOCAREUM_MIN_REQUEST_INTERVAL_MS` | `vocareum.throttle.min_interval_ms` |\n| `VOCAREUM_THROTTLE_JITTER` | `vocareum.throttle.jitter` (`\"true\"` / `\"false\"`) |\n\n**CI note:** if you run vocgit from multiple GitHub Actions runners against the same course concurrently, use a `concurrency:` group to serialize them rather than raising `max_concurrency`:\n\n```yaml\nconcurrency:\n  group: vocareum-publish-${{ github.repository }}\n  cancel-in-progress: false\n```\n\n## GitHub Action\n\nThe Action is a **composite** action: it installs the published `vocgit` CLI (pinned to the action's version) and runs `vocgit push`. It supports both v2 token auth and v3 OAuth.\n\n**v2 token auth:**\n\n```yaml\nname: Push to Vocareum\non:\n  push:\n    branches: [main]\n    paths: ['lab*/**', 'vocareum.yaml']\n\njobs:\n  push-to-vocareum:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v5\n\n      - name: Push to Vocareum\n        uses: ddlin/vocareum-publisher@v1\n        with:\n          config-file: vocareum.yaml\n          api-key: ${{ secrets.VOCAREUM_API_KEY }}\n          non-interactive: true\n```\n\n**v3 OAuth:**\n\n```yaml\n      - name: Push to Vocareum (v3 OAuth)\n        uses: ddlin/vocareum-publisher@v1\n        with:\n          auth: oauth\n          client-id: ${{ secrets.VOCAREUM_OAUTH_CLIENT_ID }}\n          client-secret: ${{ secrets.VOCAREUM_OAUTH_CLIENT_SECRET }}\n          non-interactive: true\n```\n\nSupported action inputs (`action.yml`): `config-file`, `root` (workspace root, default `.`), `api-key`, `auth`, `client-id`, `client-secret`, `dry-run`, `non-interactive`, `assignment`, `part`, `force-all`, `sync-deletes`, `auto-commit` (ignored in CI), `verbose`. Output: `success`. Requires Node.js (GitHub-hosted runners include it). `api-key` is optional — omit it when using `auth: oauth`.\n\n## Directory Structure\n\n```\ncourse-repo/\n├── vocareum.yaml         # Configuration\n├── lab1-intro/\n│   └── part1/\n│       ├── startercode/  # Student-visible starter code\n│       ├── scripts/      # Grading scripts\n│       ├── lib/          # Grading libraries (hidden)\n│       ├── asnlib/       # Assignment libraries\n│       ├── docs/         # Documentation\n│       ├── data/         # Datasets\n│       └── private/      # Private files\n└── lab2-analysis/\n    └── ...\n```\n\n### Supported Directory Types\n\n| Directory | Description | Synced |\n|-----------|-------------|--------|\n| `startercode` | Student-visible starter files | ✓ |\n| `scripts` | Grading and setup scripts | ✓ |\n| `lib` | Grading libraries (hidden from students) | ✓ |\n| `asnlib` | Assignment libraries | ✓ |\n| `docs` | Documentation files | ✓ |\n| `data` | Datasets and resources | ✓ |\n| `private` | Private course files | ✓ |\n| `course` | Course-level shared files | ✗ |\n\n> **Note:** The `course` directory is NOT synced. It contains course-wide shared files (symlinks) that are shared across all assignments. Syncing these would cause infinite update loops. Manage course-level files directly in the Vocareum UI.\n\nConfigure which directories to sync per part:\n\n```yaml\nparts:\n  - part_id: \"123\"\n    path: \"part1\"\n    directories: [\"startercode\", \"scripts\", \"lib\"]  # Only sync these\n```\n\n## Important Notes\n\n### All IDs Are Strings\n\nVocareum API returns all IDs as strings. Always use string types:\n\n```yaml\n# Correct\nassignment_id: \"12345\"\n\n# Wrong\nassignment_id: 12345\n```\n\n### Local Creation, CI/CD Updates\n\n- **Create assignments locally** using `vocgit new`\n- **Commit IDs** to Git before CI/CD runs\n- **CI/CD only updates** existing assignments\n\n### Template Selection\n\nTemplates can exist in any course within your organization. When you have multiple templates configured, `vocgit new` will prompt you to select which template to use:\n\n```\n$ vocgit new lab3\nMultiple templates available.\n? Select template for this assignment:\n❯ Standard Lab (99999)\n  Cloud Lab (course:11111, id:88888)\n  Timed Exam (77777)\n```\n\nTemplates in the same course as your main `course_id` show just the ID. Templates in different courses show both the course and assignment ID for clarity.\n\nThe selected template ID is stored per-assignment in `vocareum.yaml`:\n\n```yaml\nassignments:\n  - name: \"Lab 3\"\n    path: \"lab3\"\n    template_assignment_id: \"88888\"  # Selected: Cloud Lab\n```\n\n### Never Auto-Commit in CI/CD\n\nThe `auto_commit` option should only be used locally. In CI/CD it is force-disabled by the CLI.\n\n### Push Confirmation Behavior\n\n- Local CLI prompts for confirmation before executing push.\n- `--non-interactive` skips prompts.\n- CI/GitHub Actions automatically run non-interactive.\n\n### API Contract Notes\n\n- Authentication header: `Authorization: Token <token>`\n- Base API path: `https://api.vocareum.com/api/v2/`\n- Assignment copy: `POST /api/v2/courses/{courseId}/assignments` with body:\n  - `{ \"method\": \"copy\", \"source\": \"<templateAssignmentId>\", \"name\": \"<newName>\" }`\n  - Polls transaction endpoint for up to 60 seconds until complete\n- Content updates: part `PUT` with `content[].zipcontent` (base64 zip)\n  - Uses `reset: 1` to clear directory before upload (ensures exact Git state)\n  - All files in directory uploaded together as a single ZIP\n- Part updates may return `transactionid`; CLI polls `GET /api/v2/transaction/{id}`\n- Failed push runs are stored in `publish_history` with `status: failed` and `failed[]` entries\n\n### ID Discovery\n\nWhen an assignment or part ID is missing from config but exists in Vocareum:\n- Assignment IDs are discovered by name lookup (prevents duplicate creation)\n- Part IDs are discovered by seqnum mapping\n- Discovered IDs are automatically saved to `vocareum.yaml`\n\n## API Credentials\n\nTo use vocgit, you need a Vocareum Personal Access Token with the appropriate permissions.\n\n### Generating a Token\n\n1. Log in to [Vocareum Labs](https://labs.vocareum.com)\n2. Go to **Profile > Settings > Personal Access Tokens**\n3. Click **Generate New Token**\n4. Enter a description (e.g., \"git-api\")\n5. Set **Token scope** to **Global**\n6. Select the required permissions (see below)\n7. Click **Generate** and copy the token immediately (it won't be shown again)\n\n### Required Permissions\n\nSelect the following permissions when creating your token:\n\n| Category | Permissions | Notes |\n|----------|-------------|-------|\n| **courses** | GET: List courses | |\n| **assignments** | GET: List assignments for a course | |\n| | POST: Create or copy an assignment for a course | |\n| | PUT: Update an assignment for a course | |\n| **parts** | GET: List parts for an assignment | |\n| | PUT: Update a part's data content | |\n| **files** | GET: Get the URL of a content file | |\n| **rubrics** | GET: List rubrics for a part | Required for `push` to diff local rubrics against remote (on by default — see [Rubrics](#rubrics)); without it, `push` fails the run rather than silently skipping points. Recommended for `pull`, which records grading rubrics when present but degrades to a warning without it |\n| | POST, PUT: Create/update rubric criteria for a part | Required for `push` to sync rubrics (on by default — see [Rubrics](#rubrics)); without it, `push` fails the run rather than silently skipping points |\n| | DELETE | Not used — vocgit never deletes a rubric criterion |\n\nAll other permissions are optional.\n\n![Token permissions - part 1](docs/images/token-permissions-1.png)\n![Token permissions - part 2](docs/images/token-permissions-2.png)\n\n### Storing Your Token\n\n**For local CLI use:**\n```bash\nexport VOCAREUM_API_KEY=\"your-token-here\"\n```\n\nOr add to your shell profile (`~/.bashrc`, `~/.zshrc`).\n\n**For GitHub Actions:**\n1. Go to your repository's **Settings > Secrets and variables > Actions**\n2. Click **New repository secret**\n3. Name: `VOCAREUM_API_KEY`\n4. Value: Your token\n\n### Authentication: v2 Token vs v3 OAuth\n\nvocgit supports two authentication modes:\n\n| Mode | Flag / Env | Credential env vars | API base |\n|------|-----------|---------------------|----------|\n| `token` (default) | `--auth token` / `VOCAREUM_AUTH_MODE=token` | `VOCAREUM_API_KEY` or `VOCAREUM_API_TOKEN` | `https://api.vocareum.com/api/v2` |\n| `oauth` (opt-in) | `--auth oauth` / `VOCAREUM_AUTH_MODE=oauth` | `VOCAREUM_OAUTH_CLIENT_ID` + `VOCAREUM_OAUTH_CLIENT_SECRET` | `https://labs.vocareum.com/api/v3` |\n\n**v2 token (default)** — Set `VOCAREUM_API_KEY` (or the alias `VOCAREUM_API_TOKEN`) to your Personal Access Token. Requests carry `Authorization: Token <token>` against `https://api.vocareum.com/api/v2`. No additional configuration needed.\n\n**v3 OAuth (opt-in)** — Set `VOCAREUM_OAUTH_CLIENT_ID` and `VOCAREUM_OAUTH_CLIENT_SECRET` and select the mode via `--auth oauth` or `VOCAREUM_AUTH_MODE=oauth`. vocgit performs an OAuth client-credentials exchange at `https://labs.vocareum.com/api/v3/oauth/token`, caches the resulting access token for the lifetime of the process, and retries automatically on a single 401 response. Requests carry `Authorization: Bearer <access_token>` against `https://labs.vocareum.com/api/v3`.\n\nOptional URL overrides for v3 OAuth:\n\n| Variable | Default |\n|----------|---------|\n| `VOCAREUM_API_V3_BASE_URL` | `https://labs.vocareum.com/api/v3` |\n| `VOCAREUM_OAUTH_TOKEN_URL` | `https://labs.vocareum.com/api/v3/oauth/token` |\n\n#### Security guidance\n\nPrefer environment variables or a secrets manager over CLI flags:\n\n- `--client-id` / `--client-secret` CLI flags exist but are **discouraged** — they appear in shell history and process listings.\n- **Never** put OAuth credentials in `vocareum.yaml`; the file is committed to Git.\n\n#### Usage examples\n\n```bash\n# Opt in per-invocation\nvocgit push --auth oauth\n\n# Opt in for the whole shell session\nexport VOCAREUM_AUTH_MODE=oauth\nvocgit pull\nvocgit push\n```\n\n#### CI / GitHub Actions example\n\nStore credentials as repository secrets (`VOCAREUM_OAUTH_CLIENT_ID`, `VOCAREUM_OAUTH_CLIENT_SECRET`) and pass them as environment variables in your workflow step:\n\n```yaml\n- name: Push to Vocareum (v3 OAuth)\n  env:\n    VOCAREUM_AUTH_MODE: oauth\n    VOCAREUM_OAUTH_CLIENT_ID: ${{ secrets.VOCAREUM_OAUTH_CLIENT_ID }}\n    VOCAREUM_OAUTH_CLIENT_SECRET: ${{ secrets.VOCAREUM_OAUTH_CLIENT_SECRET }}\n  run: vocgit push --non-interactive\n```\n\n## Environment Variables\n\n| Variable | Description |\n|----------|-------------|\n| `VOCAREUM_API_KEY` | v2 Personal Access Token (default auth mode) |\n| `VOCAREUM_API_TOKEN` | Alias for `VOCAREUM_API_KEY` |\n| `VOCAREUM_AUTH_MODE` | Auth mode: `token` (default) or `oauth` |\n| `VOCAREUM_OAUTH_CLIENT_ID` | v3 OAuth client ID (required when `VOCAREUM_AUTH_MODE=oauth`) |\n| `VOCAREUM_OAUTH_CLIENT_SECRET` | v3 OAuth client secret (required when `VOCAREUM_AUTH_MODE=oauth`) |\n| `VOCAREUM_API_V3_BASE_URL` | Override the v3 API base URL (default: `https://labs.vocareum.com/api/v3`) |\n| `VOCAREUM_OAUTH_TOKEN_URL` | Override the v3 token endpoint URL (default: `https://labs.vocareum.com/api/v3/oauth/token`) |\n| `VOCAREUM_MAX_CONCURRENCY` | Override `vocareum.throttle.max_concurrency` (1–5) |\n| `VOCAREUM_MIN_REQUEST_INTERVAL_MS` | Override `vocareum.throttle.min_interval_ms` (0–60000 ms) |\n| `VOCAREUM_THROTTLE_JITTER` | Override `vocareum.throttle.jitter` (`true` / `false`) |\n| `VOCAREUM_MAX_UPLOAD_CHUNK_BYTES` | Upload chunk size in bytes (default: 33554432, range: 1024–67108864) |\n| `VOCAREUM_LOG_LEVEL` | Log level: ERROR, WARN, INFO, DEBUG, TRACE |\n\n## License\n\nMIT License - see [LICENSE](LICENSE) for details.\n\n## Links\n\n- [Documentation](docs/)\n- [Examples](examples/)\n- [Vocareum API](https://documenter.getpostman.com/view/6736336/S11Exg4b)\n- [Issues](https://github.com/ddlin/vocareum-publisher/issues)\n","readmeFilename":"README.md"}