@@ -8,11 +8,14 @@ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
88
99# shellcheck source=lib/profile-io.sh
1010source " ${SCRIPT_DIR} /lib/profile-io.sh"
11+ # shellcheck source=lib/log-helpers.sh
12+ source " ${SCRIPT_DIR} /lib/log-helpers.sh"
1113
1214CHANGES_LOG=" ${PROFILE_DIR} /session-changes.jsonl"
1315SESSION_STATE=" ${PROFILE_DIR} /session-state.json"
1416RATE_LIMIT_INTERVAL=30
1517SESSION_CAP=12
18+ CHANGES_LOG_MAX_LINES=1000
1619
1720LIB_DIR=" ${SCRIPT_DIR} /lib"
1821if [ -f " ${LIB_DIR} /error-handling.sh" ]; then
@@ -78,40 +81,51 @@ case "$EXTENSION" in
7881 * ) TECH=" other" ;;
7982esac
8083
84+ TRACKED_CONCEPT=" $TECH "
85+ case " $TECH " in
86+ javascript) TRACKED_CONCEPT=" js-basics" ;;
87+ react) TRACKED_CONCEPT=" react-components" ;;
88+ sql) TRACKED_CONCEPT=" sql-basics" ;;
89+ shell) TRACKED_CONCEPT=" terminal-navigation" ;;
90+ other) TRACKED_CONCEPT=" " ;;
91+ esac
92+
8193SAFE_FILE_PATH=$( printf ' %s' " $FILE_PATH " | sed ' s/\\/\\\\/g; s/"/\\"/g' )
8294SAFE_TOOL_NAME=$( printf ' %s' " $TOOL_NAME " | sed ' s/\\/\\\\/g; s/"/\\"/g' )
83- if ! printf ' {"timestamp":"%s","tool":"%s","file":"%s","extension":"%s","tech":"%s"}\n' \
84- " $TIMESTAMP " " $SAFE_TOOL_NAME " " $SAFE_FILE_PATH " " $EXTENSION " " $TECH " >> " $CHANGES_LOG " 2>&1
95+ SAFE_TRACKED_CONCEPT=$( printf ' %s' " $TRACKED_CONCEPT " | sed ' s/\\/\\\\/g; s/"/\\"/g' )
96+ if ! printf ' {"timestamp":"%s","tool":"%s","file":"%s","extension":"%s","tech":"%s","concept":"%s"}\n' \
97+ " $TIMESTAMP " " $SAFE_TOOL_NAME " " $SAFE_FILE_PATH " " $EXTENSION " " $TECH " " $SAFE_TRACKED_CONCEPT " >> " $CHANGES_LOG " 2>&1
8598then
8699 log_error " $SCRIPT_NAME " " Failed to write to changes log: $CHANGES_LOG "
87100fi
101+ trim_log_file " $CHANGES_LOG " " $CHANGES_LOG_MAX_LINES "
88102
89103IS_FIRST_EVER=" false"
90- if [ -f " $PROFILE_FILE " ] && [ " $TECH " != " other " ]; then
91- ALREADY_IN_SESSION=$( jq --arg tech " $TECH " ' .session_concepts | index($tech )' " $PROFILE_FILE " 2>&1 )
104+ if [ -f " $PROFILE_FILE " ] && [ -n " $TRACKED_CONCEPT " ]; then
105+ ALREADY_IN_SESSION=$( jq --arg concept " $TRACKED_CONCEPT " ' .session_concepts | index($concept )' " $PROFILE_FILE " 2>&1 )
92106 if [ $? -ne 0 ]; then
93- log_error " $SCRIPT_NAME " " jq failed checking session_concepts for $TECH : $ALREADY_IN_SESSION "
107+ log_error " $SCRIPT_NAME " " jq failed checking session_concepts for $TRACKED_CONCEPT : $ALREADY_IN_SESSION "
94108 ALREADY_IN_SESSION=" 0"
95109 fi
96110
97- ALREADY_IN_LIFETIME=$( jq --arg tech " $TECH " ' .concepts_seen | index($tech )' " $PROFILE_FILE " 2>&1 )
111+ ALREADY_IN_LIFETIME=$( jq --arg concept " $TRACKED_CONCEPT " ' .concepts_seen | index($concept )' " $PROFILE_FILE " 2>&1 )
98112 if [ $? -ne 0 ]; then
99- log_error " $SCRIPT_NAME " " jq failed checking concepts_seen for $TECH : $ALREADY_IN_LIFETIME "
113+ log_error " $SCRIPT_NAME " " jq failed checking concepts_seen for $TRACKED_CONCEPT : $ALREADY_IN_LIFETIME "
100114 ALREADY_IN_LIFETIME=" 0"
101115 fi
102116
103117 if [ " $ALREADY_IN_LIFETIME " = " null" ]; then
104118 IS_FIRST_EVER=" true"
105- if ! update_profile --arg tech " $TECH " '
106- .session_concepts += (if (.session_concepts | index($tech )) == null then [$tech ] else [] end) |
107- .concepts_seen += (if (.concepts_seen | index($tech )) == null then [$tech ] else [] end)
119+ if ! update_profile --arg concept " $TRACKED_CONCEPT " '
120+ .session_concepts += (if (.session_concepts | index($concept )) == null then [$concept ] else [] end) |
121+ .concepts_seen += (if (.concepts_seen | index($concept )) == null then [$concept ] else [] end)
108122 ' ; then
109- log_error " $SCRIPT_NAME " " Failed updating profile for first-time technology : $TECH "
123+ log_error " $SCRIPT_NAME " " Failed updating profile for first-time concept : $TRACKED_CONCEPT "
110124 IS_FIRST_EVER=" false"
111125 fi
112126 elif [ " $ALREADY_IN_SESSION " = " null" ]; then
113- if ! update_profile --arg tech " $TECH " ' .session_concepts += [$tech ]' ; then
114- log_error " $SCRIPT_NAME " " Failed updating session_concepts for technology : $TECH "
127+ if ! update_profile --arg concept " $TRACKED_CONCEPT " ' .session_concepts += [$concept ]' ; then
128+ log_error " $SCRIPT_NAME " " Failed updating session_concepts for concept : $TRACKED_CONCEPT "
115129 fi
116130 fi
117131fi
@@ -182,8 +196,9 @@ LESSON_ID="${TIMESTAMP}-$(printf '%05d' $$)"
182196LESSON_FILE=" ${PENDING_DIR} /${LESSON_ID} .json"
183197SAFE_FILE_PATH_LESSON=$( printf ' %s' " $FILE_PATH " | sed ' s/\\/\\\\/g; s/"/\\"/g' )
184198SAFE_TOOL_NAME_LESSON=$( printf ' %s' " $TOOL_NAME " | sed ' s/\\/\\\\/g; s/"/\\"/g' )
185- if ! printf ' {"timestamp":"%s","type":"%s","tech":"%s","file":"%s","tool":"%s","belt":"%s","firstEncounter":%s}\n' \
186- " $TIMESTAMP " " $LESSON_TYPE " " $TECH " " $SAFE_FILE_PATH_LESSON " " $SAFE_TOOL_NAME_LESSON " " $BELT " " $IS_FIRST_EVER " > " $LESSON_FILE "
199+ SAFE_TRACKED_CONCEPT_LESSON=$( printf ' %s' " $TRACKED_CONCEPT " | sed ' s/\\/\\\\/g; s/"/\\"/g' )
200+ if ! printf ' {"timestamp":"%s","type":"%s","tech":"%s","concept":"%s","file":"%s","tool":"%s","belt":"%s","firstEncounter":%s}\n' \
201+ " $TIMESTAMP " " $LESSON_TYPE " " $TECH " " $SAFE_TRACKED_CONCEPT_LESSON " " $SAFE_FILE_PATH_LESSON " " $SAFE_TOOL_NAME_LESSON " " $BELT " " $IS_FIRST_EVER " > " $LESSON_FILE "
187202then
188203 log_error " $SCRIPT_NAME " " Failed to write pending lesson: $LESSON_FILE "
189204fi
0 commit comments