Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
88 commits
Select commit Hold shift + click to select a range
ee69eaf
adjusted update from google api to use async generator
bradley-erickson Oct 25, 2024
0bac912
fixed small bug in yield statements
bradley-erickson Oct 25, 2024
5127ea7
fixed possible create_task bug (#192)
bradley-erickson Oct 30, 2024
5ad48ab
Bump rollup from 2.79.1 to 2.79.2 in /modules/lo_dash_react_component…
dependabot[bot] Nov 4, 2024
45d1c38
Bump cookie and express in /modules/lo_dash_react_components (#183)
dependabot[bot] Nov 4, 2024
fdf00ea
Bump elliptic from 6.5.7 to 6.6.0 in /modules/lo_dash_react_component…
dependabot[bot] Nov 4, 2024
0105345
added communication protocol readme to documentation
bradley-erickson Nov 4, 2024
22bf450
updated npm packages for lo_event
pbrost Nov 6, 2024
4ff4f3a
Abstracted current gpt responders to their own module (#178)
bradley-erickson Nov 7, 2024
cc3a4b7
small installation fixes
bradley-erickson Nov 7, 2024
78723f9
Update to redux-thunk and compile error fix
pbrost Nov 8, 2024
e6a922c
import thunk statement change
pbrost Nov 8, 2024
d413030
Make sure b.storage defaults to thunk if not sync or local
pbrost Nov 8, 2024
ad9d485
code compiling for deployment of toy-sba (#198)
bradley-erickson Nov 14, 2024
83cdafb
LO Event improvements
bradley-erickson Nov 19, 2024
7ea2abb
updated lodrc package.json and webpack config to build properly
bradley-erickson Nov 19, 2024
5e4eaca
fixed gpt dashboard flashing
bradley-erickson Nov 21, 2024
e767cae
fixed auth bug when visiting a page after session expired
bradley-erickson Nov 26, 2024
2e07dd6
Update reconstruct_doc.py
PDDeane Nov 27, 2024
ccb36fd
Update reconstruct_doc.py
PDDeane Nov 27, 2024
3eeea21
Update reconstruct_doc.py
PDDeane Nov 27, 2024
aabd807
Added additional actions for `rplc` and `rvrt`
bradley-erickson Dec 4, 2024
5020beb
extension fixes to extract document history (#204)
bradley-erickson Dec 13, 2024
b79648d
Module verioning updates and some testing next steps
bradley-erickson Dec 17, 2024
257bae3
added dashboard to demo LOConnection and helper utilities (#180)
bradley-erickson Dec 17, 2024
0ba3c08
cleaned up installation
bradley-erickson Dec 20, 2024
375103a
updated requirements (#208)
bradley-erickson Jan 2, 2025
f6cc2b2
Bump nanoid from 3.3.7 to 3.3.8 in /modules/lo_dash_react_components …
dependabot[bot] Jan 23, 2025
e6d405f
Bump path-to-regexp and express in /modules/lo_dash_react_components …
dependabot[bot] Jan 23, 2025
783c904
Save state in LO Event (#209)
bradley-erickson Feb 25, 2025
e86f39f
updated classroom text highlighter component
bradley-erickson Feb 26, 2025
5544fa8
Merge branch 'master' of github.com:ETS-Next-Gen/writing_observer
bradley-erickson Feb 26, 2025
1b7b3ac
Homepage improvements (#215)
bradley-erickson Apr 1, 2025
760c5e1
added new options to llm dashboard - students per row, height, indivi…
bradley-erickson Apr 1, 2025
4470b70
Bump @babel/helpers in /modules/lo_dash_react_components (#217)
dependabot[bot] Apr 1, 2025
9eea22f
Bump @babel/runtime in /modules/lo_dash_react_components (#218)
dependabot[bot] Apr 1, 2025
7e28238
languagetool startup and highlight dashboard improvements
bradley-erickson Apr 3, 2025
c336d5d
fixed module names
bradley-erickson Apr 3, 2025
3bdcc7c
small js bug fixes for dashboards
bradley-erickson Apr 3, 2025
bee90d1
add process metrics to dashboards
bradley-erickson May 6, 2025
e4e4adf
LTI auth + Canvas/Schoology integration
bradley-erickson Jun 11, 2025
28cb3ec
Update rosters.py
bradley-erickson Jul 10, 2025
a6724ed
Workshop updates (#230)
bradley-erickson Jul 16, 2025
f61cb8b
Various improvements to serving as an LTI
bradley-erickson Aug 10, 2025
4d8e2b4
added nginx conf
bradley-erickson Aug 15, 2025
381ec66
restructured documentation (#236)
bradley-erickson Sep 19, 2025
fb5631b
Updated extension to only connect when relevant tabs are present (#235)
bradley-erickson Sep 22, 2025
eb453bf
added some tutorials
bradley-erickson Sep 23, 2025
dfa95f9
updated extension documentation
bradley-erickson Sep 23, 2025
a3fa17c
removed unused extension files
bradley-erickson Sep 23, 2025
bad6fdb
added comm protocol concept doc and updated event doc
bradley-erickson Sep 25, 2025
1c72d9e
more descriptive table of contents plus initial communication protoco…
bradley-erickson Sep 25, 2025
d604798
updated documentation for modules
bradley-erickson Sep 30, 2025
8b205d0
updated system settings documentation
bradley-erickson Oct 1, 2025
f12616b
added documentation for serving as lti
bradley-erickson Oct 1, 2025
7706b5a
updated dashboard documentation
bradley-erickson Oct 13, 2025
ec3193c
Small communication protocol fixes
bradley-erickson Oct 13, 2025
c3469ce
added missing timestamp info
bradley-erickson Oct 14, 2025
faff12b
added basic service worker config to writing extension
bradley-erickson Oct 15, 2025
1073452
added more context to documentation and added multiple roster source …
bradley-erickson Oct 20, 2025
87861f3
Change Popover trigger from 'click' to 'focus'
bradley-erickson Oct 23, 2025
3ff5ed7
added kvs documentation and referenced based on tutorial feedback
bradley-erickson Oct 28, 2025
c84a348
Added communication protocol endpoing logging ability
bradley-erickson Nov 3, 2025
b8ce707
fixed static json endpoint for modules
bradley-erickson Nov 19, 2025
fa3a15f
added note to student id mapping about where to run the command from
bradley-erickson Nov 19, 2025
c1eabcb
Ability to serve LO Blocks via LO while signing in through Canvas (#246)
bradley-erickson Dec 16, 2025
65cc64d
Bump http-proxy-middleware in /modules/lo_dash_react_components (#222)
dependabot[bot] Dec 16, 2025
c8383aa
Bump webpack-dev-server in /modules/lo_dash_react_components (#225)
dependabot[bot] Dec 16, 2025
08cc2b2
Bump on-headers and compression in /modules/lo_dash_react_components …
dependabot[bot] Dec 16, 2025
18f04ee
Bump form-data from 3.0.2 to 3.0.4 in /modules/lo_dash_react_componen…
dependabot[bot] Dec 16, 2025
07ead87
Bump js-yaml from 3.14.1 to 3.14.2 in /modules/lo_dash_react_componen…
dependabot[bot] Dec 16, 2025
1003121
Bump node-forge from 1.3.1 to 1.3.2 in /modules/lo_dash_react_compone…
dependabot[bot] Dec 16, 2025
0a37769
various small comments that I missed in a previous commit
bradley-erickson Jan 5, 2026
b80005f
documented roster and courselist format
bradley-erickson Jan 6, 2026
0984e08
updated and documented offline reducer replay
bradley-erickson Jan 6, 2026
17387e3
abstracted time on task reducers to common area to allow for more mod…
bradley-erickson Jan 14, 2026
d2a08f2
updated keys node in communication protocol to support more scoped it…
bradley-erickson Jan 15, 2026
ff07047
added basic integration logger with pmss setting (#255)
bradley-erickson Jan 20, 2026
7e55cfc
added ability to pass in pmss rulesets via command line arguments (#258)
bradley-erickson Jan 22, 2026
3866327
updated blacklist code to check for domain and determine action by se…
bradley-erickson Jan 26, 2026
b1e0dd6
Fixing comm protocol so roster is called multiple times for single da…
bradley-erickson Feb 2, 2026
deeac6f
Bump lodash from 4.17.21 to 4.17.23 in /modules/lo_dash_react_compone…
dependabot[bot] Feb 2, 2026
049e0ec
Added tab ids to extension, updated reconstruction to include tabs, a…
bradley-erickson Feb 2, 2026
5f75e49
Added ability to scope to a single value in execution dag
bradley-erickson Feb 3, 2026
ed89669
fix: arglab package new URL (#269)
OmarIthawi Feb 18, 2026
13cb495
updated links to repo and rawgit to jsdeliver (#268)
bradley-erickson Feb 19, 2026
c20cfe1
dashboard updates (#267)
bradley-erickson Feb 22, 2026
40d17a5
individual student writing portfolio dashboard (#271)
bradley-erickson Mar 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 20 additions & 29 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,40 +5,31 @@ on: [push]
jobs:
lint-python:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.9", "3.10"]
steps:
- uses: actions/checkout@v3
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v3
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install pycodestyle
- name: Analysing the code with pycodestyle
run: |
pycodestyle --ignore=E501,W503 $(git ls-files 'learning_observer/*.py' 'modules/*.py')
- name: Checkout code
uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.11'

- name: Install Make
run: sudo apt-get install make

- name: Lint files
run: make linting-python
lint-node:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Set up Node.js
uses: actions/setup-node@v2
uses: actions/checkout@v3
- name: Set up Node
uses: actions/setup-node@v4
with:
node-version: '16.x'
- name: Install dependencies
run: |
npm install

- name: List unused CSS
run: npm run find-unused-css
node-version: '22.x'

- name: Lint CSS
run: npm run lint:css
- name: Install Make
run: sudo apt-get install make

- name: Lint JS
run: npm run lint:js
- name: Lint files
run: make linting-node
14 changes: 0 additions & 14 deletions .github/workflows/pytest.yml

This file was deleted.

51 changes: 51 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
name: Test packages

on: [push]

jobs:
test-packages:
runs-on: ubuntu-latest
strategy:
matrix:
package: ['learning_observer/', 'modules/writing_observer/']
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.11'

- name: Install Make
run: sudo apt-get install make

- name: Get list of changed files
id: changes
run: |
git fetch origin master
git diff --name-only origin/master HEAD > changed_files.txt

- name: Check if package has changes
id: package_check
run: |
if grep -qE "^${{ matrix.package }}" changed_files.txt; then
echo "run_tests=true" >> $GITHUB_ENV
else
echo "run_tests=false" >> $GITHUB_ENV
fi

- name: Skip tests if no changes
if: env.run_tests == 'false'
run: echo "Skipping tests for ${{ matrix.package }} as there are no changes."

- name: Install the base Learning Observer
if: env.run_tests == 'true'
run: make install

- name: Install the package with pip
if: env.run_tests == 'true'
run: pip install -e ${{ matrix.package }}

- name: Run tests
if: env.run_tests == 'true'
run: make test PKG=${{ matrix.package }}
27 changes: 0 additions & 27 deletions .github/workflows/versioning.yml

This file was deleted.

5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -37,4 +37,7 @@ LanguageTool-5.4
package-lock.json
learning_observer/learning_observer/static_data/google/
learning_observer/learning_observer/static_data/admins.yaml
.ipynb_checkpoints/
.ipynb_checkpoints/
.eggs/
.next/
modules/wo_portfolio_diff/wo_portfolio_diff/portfolio_diff/*
95 changes: 57 additions & 38 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,16 +1,40 @@
PACKAGES ?= wo,awe
# TODO rename these packages to something else
PACKAGES ?= wo

help:
@echo "Available commands:"
@echo ""
@echo " run Run the learning_observer Python application."
@echo " install-pre-commit-hook Install the pre-commit git hook."
@echo " install Install the learning_observer package in development mode."
@echo " install-dev Install dev dependencies (requires additional setup)."
@echo " install-packages Install specific packages: [${PACKAGES}]."
@echo " test Run tests for the specified package (PKG=<package>)."
@echo " linting-setup Setup linting tools and dependencies."
@echo " linting-python Lint Python files using pycodestyle and pylint."
@echo " linting-node Lint Node files (JS, CSS, and unused CSS detection)."
@echo " linting Perform all linting tasks (Python and Node)."
@echo " build-wo-chrome-extension Build the writing-process extension."
@echo " build-python-distribution Build a distribution for the specified package (PKG=<package>)."
@echo ""
@echo "Note: All commands are executed in the current shell environment."
@echo " Ensure your virtual environment is activated if desired, as installs and actions"
@echo " will occur in the environment where the 'make' command is run."
@echo ""
@echo "Use 'make <command>' to execute a command. For example: make run"

run:
# If you haven't done so yet, run: make install
# we need to make sure we are on the virtual env when we do this
cd learning_observer && python learning_observer

venv:
# This is unnecessary since LO installs requirements on install.
# pip install --no-cache-dir -r requirements.txt
# Install commands
install-pre-commit-hook:
# Adding pre-commit.sh to Git hooks
cp scripts/hooks/pre-commit.sh .git/hooks/pre-commit
chmod +x .git/hooks/pre-commit

# install commands
install: venv
install: install-pre-commit-hook
# The following only works with specified packages
# we need to install learning_observer in dev mode to
# more easily pass in specific files we need, such as creds
Expand All @@ -25,52 +49,28 @@ install: venv
@LODRC_CURRENT=$$(curl -s https://raw.githubusercontent.com/ETS-Next-Gen/lo_assets/main/lo_dash_react_components/lo_dash_react_components-current.tar.gz); \
pip install https://raw.githubusercontent.com/ETS-Next-Gen/lo_assets/main/lo_dash_react_components/$${LODRC_CURRENT}

install-dev: venv
install-dev:
# TODO create a dev requirements file
pip install --no-cache-dir -e learning_observer/[${PACKAGES}]
. ${HOME}/.nvm/nvm.sh && nvm use && pip install -v -e modules/lo_dash_react_components/

install-packages: venv
install-packages:
pip install -e learning_observer/[${PACKAGES}]

# Just a little bit of dependency hell...

# The AWE Components are built using a specific version of
# `spacy`. This requires an out-of-date `typing-extensions`
# package. There are few other dependecies that require a
# newer version. As far as I can tell, upgrading this package
# does not effect the functionality we receive from the AWE
# components.
# TODO remove this extra step after AWE Component's `spacy`
# is no longer version locked.
# This is no longer an issue, but we will leave until all
# dependecies can be resolved in the appropriate locations.
# pip install -U typing-extensions

# On Python3.11 with tensorflow, we get some odd errors
# regarding compatibility with `protobuf`. Some installation
# files are missing from the protobuf binary on pip.
# Using the `--no-binary` option includes all files.
pip uninstall -y protobuf
pip install --no-binary=protobuf protobuf==4.25

# testing commands
# Testing commands
test:
# this is where we run doctests
pytest modules/wo_highlight_dashboard
@if [ -z "$(PKG)" ]; then echo "No module specified, please try again with \"make test PKG=path/to/module\""; exit 1; fi
./test.sh $(PKG)

# Linting commands
linting-setup:
# Setting up linting related packages
pip install pycodestyle pylint
npm install

linting-python:
# Linting Python modules
pip install pycodestyle pylint
pycodestyle --ignore=E501,W503 $$(git ls-files 'learning_observer/*.py' 'modules/*.py')
pylint -d W0613,W0511,C0301,R0913,too-few-public-methods $$(git ls-files 'learning_observer/*.py' 'modules/*.py')

linting-node:
npm install
# TODO each of these have lots of errors and block
# the next item from running
# Starting to lint Node modules
Expand All @@ -84,8 +84,27 @@ linting-node:
linting: linting-setup linting-python linting-node
# Finished linting

build-writing-ext:
# Build commands
build-wo-chrome-extension:
# Installing LO Event
cd modules/lo_event && npm install & npm link lo_event
# Building extension
cd extension/writing-process && npm install && npm run build

build-python-distribution:
# Building distribution for package
pip install build
# Switching to package directory
cd $(PKG) && python -m build

# TODO we may want to have a separate command for uploading to testpypi
upload-python-package-to-pypi: build-python-distribution
pip install twine
# TODO we currently only upload to testpypi
# TODO we need to include `TWINE_USERNAME=__token__`
# and `TWINE_PASSWORD={ourTwineToken}` to authenticate
#
# TODO We have not fully tested the following commands.
# Try out the following steps and fix any bugs so the
# Makefile can do it automatically.
# cd $(PKG) && twine upload -r testpypi dist/*
16 changes: 12 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ learning analytics dashboard to help instructors be able to manage
student learning processes, and in particular, student writing
processes.

![linting](https://github.com/ETS-Next-Gen/writing_observer/actions/workflows/pycodestyle.yml/badge.svg)
![linting](https://github.com/ArgLab/writing_observer/actions/workflows/pycodestyle.yml/badge.svg)

## Learning Observer

Expand All @@ -17,6 +17,14 @@ per-student writing data, and aggegators to make dashboards. We've
tested this in math and writing, but our focus is on writing process
data.

At a high level, Learning Observer functions as an application platform.
The primary `learning_observer` module bootstraps the system: it loads
configuration, connects to storage and messaging back ends, and brokers
communication with data sources. Other modules plug into that
infrastructure to define the specific reducers, dashboards, and other
items that users interact with, letting teams experiment with new
features without having to reimplement the platform core.

It's not finished, but it's moving along quickly.

## Writing Observer
Expand Down Expand Up @@ -54,9 +62,9 @@ that the core approach and APIs are correct.

## Getting Started

We have a short guide to [getting started](docs/workshop.md). Getting
the base system working is pretty easy. The guide is pretty
comprehensive (including how to develop your first module).
We have a short guide to [installing the system](docs/tutorials/install.md).
Getting the base system working is pretty easy. To create a new module
for the system to use, check out our [cookiecutter module guide](docs/tutorials/cookiecutter-module.md).

### System requirements

Expand Down
1 change: 1 addition & 0 deletions VERSION
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
0.1.0+2026.02.27T21.25.37.849Z.3207a114.berickson.20260220.dami.portfolio.pr
1 change: 1 addition & 0 deletions autodocs/.gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
_build/
generated/
apidocs/
module_readmes/
1 change: 1 addition & 0 deletions autodocs/api.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,6 @@ API
===

.. toctree::
:maxdepth: 4

apidocs/index
Loading