Sign In

campus-cli

Package Overview
Dependencies
Maintainers
1
Versions
14
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

campus-cli - npm Package Compare versions

Comparing version
1.0.1
to
1.0.2
+26
-0
CHANGELOG.md

@@ -7,2 +7,28 @@ # Changelog

## [1.0.2] — 2026-07-15
### Fixed
- `campus assignments list <courseId>` ahora muestra notas que Blackboard devuelve en `grade.score`, no solo en `grade.displayGrade.score`.
- `campus assignments list <courseId> --pending` ya no trata tareas calificadas como pendientes cuando la nota viene en `grade.score`.
- Cuando un curso no tiene pendientes, el CLI ahora muestra `No pending assignments found in this course.` en vez de dejar una salida vacía.
---
## [1.0.1] — 2026-07-15
### Added
- `campus assignments list` ahora acepta `courseId` opcional. Sin `courseId`, recorre todos los cursos disponibles del estudiante.
- `campus assignments list --pending` ahora funciona como vista global de pendientes, ideal después de `campus courses list`.
- Suite mínima de tests con `node:test` vía `tsx`, cubriendo el uso opcional de `courseId` y el filtro de pendientes.
### Fixed
- `campus assignments list --pending` ya no falla con `missing required argument 'courseId'`.
- `--pending --json` ahora filtra correctamente las tareas pendientes tanto en modo global como en modo de un solo curso.
- El paquete npm ya no incluye `.codex/` ni `AGENTS.md` en el tarball publicado.
### Changed
- README reestructurado para facilitar adopción: badges de npm, requisitos, comparación CLI/MCP, configuración mínima MCP, privacidad, troubleshooting y contribución.
---
## [1.0.0] — 2026-07-13 — renombrado a `campus-cli`

@@ -9,0 +35,0 @@

+1
-1
{
"name": "campus-cli",
"version": "1.0.1",
"version": "1.0.2",
"description": "CLI/MCP no oficial para el campus universitario (Blackboard, Canvas, Moodle...) — acceso desde la terminal y MCP para IA",

@@ -5,0 +5,0 @@ "main": "run.js",

@@ -45,5 +45,9 @@ import { Command } from 'commander';

export function isPendingAssignment(grade: any) {
return grade?.displayGrade?.score == null && grade?.status !== 'NeedsGrading';
return grade?.displayGrade?.score == null && grade?.score == null && grade?.status !== 'NeedsGrading';
}
function getGradeScore(grade: any) {
return grade?.displayGrade?.score ?? grade?.score ?? null;
}
function formatAssignment(col: any, grade: any, opts: { pending?: boolean; courseName?: string }) {

@@ -58,4 +62,4 @@ const possible = col.score?.possible ?? '?';

let gradeStr = chalk.gray('sin entregar');
if (grade?.displayGrade?.score != null) {
const score = grade.displayGrade.score;
const score = getGradeScore(grade);
if (score != null) {
const pct = possible !== '?' ? Math.round((score / Number(possible)) * 100) : null;

@@ -207,6 +211,11 @@ const color = pct == null ? chalk.white : pct >= 60 ? chalk.green : chalk.red;

console.log('');
let printed = 0;
columns.forEach((col) => {
const grade = gradeMap.get(col.id) ?? null;
formatAssignment(col, grade, { pending: opts.pending });
if (formatAssignment(col, grade, { pending: opts.pending })) printed++;
});
if (printed === 0 && opts.pending) {
console.log(chalk.yellow('No pending assignments found in this course.'));
}
} catch (err: any) {

@@ -213,0 +222,0 @@ spinner.fail(err.message);

@@ -21,3 +21,4 @@ import assert from 'node:assert/strict';

assert.equal(isPendingAssignment({ displayGrade: { score: 15 } }), false);
assert.equal(isPendingAssignment({ score: 15 }), false);
assert.equal(isPendingAssignment({ status: 'NeedsGrading' }), false);
});