@jskit-ai/agent-docs 0.1.33 → 0.1.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -30,6 +30,19 @@ npm install
30
30
 
31
31
  After that promotion, the overwritten app `AGENTS.md` stays deliberately small. Use `jskit session` for issue-driven work; session state and prompts live under `.jskit/sessions/` in the target app.
32
32
 
33
+ Issue sessions are executable workflow state, not prose instructions. The important durable files are:
34
+
35
+ - `issue.md` and `issue_title` for the approved GitHub issue.
36
+ - `plan_details.md` for the confirmed implementation details gathered before planning.
37
+ - `plan.md` for the approved implementation plan.
38
+ - `agent_decisions.md` for concise decisions and why they were made.
39
+ - `.jskit/APP_BLUEPRINT.md` for durable app/product/architecture memory that grows across issues.
40
+ - `review_passes/`, `checks/`, `ui_checks/`, and `command_log.jsonl` for review, verification, UI check, and command receipts.
41
+
42
+ The Deep UI Check steps use the saved issue classification: server-only work can be skipped with a receipt, possible UI work can be skipped only with an explicit reason, and definite UI work must run. If the User Check fails, JSKIT starts a new cycle under `cycles/cycle_###/` and cycle-scoped receipts under `steps/cycle_###/`; do not delete older cycle receipts.
43
+
44
+ Studio and other tools should read `jskit session <session_id> --json` rather than scraping those files directly. Manual agents should follow the current `jskit session <session_id> step` output and avoid recreating the old workboard workflow.
45
+
33
46
  After creating the real app scaffolding (the base shell, not the seed wrapper), you will need to run `npm install` to install dependencies.
34
47
 
35
48
  If you already know you want a small non-workspace baseline right after the scaffold, this is the shortest reproducible path:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jskit-ai/agent-docs",
3
- "version": "0.1.33",
3
+ "version": "0.1.35",
4
4
  "description": "Distributed JSKIT agent references, prompts, guides, and generated reference maps.",
5
5
  "type": "module",
6
6
  "files": [
@@ -453,6 +453,14 @@ Local functions
453
453
  Exports
454
454
  - `createHealthCommands(ctx = {})`
455
455
 
456
+ ### `src/server/commandHandlers/helperMap.js`
457
+ Exports
458
+ - `createHelperMapCommands(ctx = {})`
459
+ Local functions
460
+ - `writeJson(stdout, payload)`
461
+ - `writeErrors(stdout, payload)`
462
+ - `writeHelperMapText(stdout, payload)`
463
+
456
464
  ### `src/server/commandHandlers/list.js`
457
465
  Exports
458
466
  - `createListCommands(ctx = {})`
@@ -765,6 +773,36 @@ Local functions
765
773
  - `printTopLevelHelp(stream = process.stderr)`
766
774
  - `printCommandHelp(stream = process.stderr, command = "")`
767
775
 
776
+ ### `src/server/helperMap.js`
777
+ Exports
778
+ - `HELPER_MAP_JSON_RELATIVE_PATH`
779
+ - `HELPER_MAP_MARKDOWN_RELATIVE_PATH`
780
+ - `buildHelperMap({ targetRoot })`
781
+ - `readHelperMap({ targetRoot })`
782
+ - `updateHelperMap({ targetRoot })`
783
+ Local functions
784
+ - `pathExists(filePath)`
785
+ - `readJsonFile(filePath)`
786
+ - `normalizePackageDependencies(packageJson = {})`
787
+ - `classifySymbol(name = "")`
788
+ - `createExportAnalysisProject()`
789
+ - `kindFromDeclaration(declaration, exportName = "")`
790
+ - `addSymbol(symbols, symbol)`
791
+ - `extractExportedSymbols(sourceFile)`
792
+ - `extractVueScriptSource(source = "", filePath = "")`
793
+ - `addCodeFileToProject(project, file)`
794
+ - `walkCodeFiles(rootPath, relativeRoot = "")`
795
+ - `collectAppExports(targetRoot)`
796
+ - `flattenPackageExports(exportsField)`
797
+ - `collectJskitPackageExports(targetRoot, packageJson = {})`
798
+ - `renderExportList(symbols = [])`
799
+ - `renderHelperMapMarkdown(map)`
800
+
801
+ ### `src/server/helperMapPaths.js`
802
+ Exports
803
+ - `HELPER_MAP_JSON_RELATIVE_PATH`
804
+ - `HELPER_MAP_MARKDOWN_RELATIVE_PATH`
805
+
768
806
  ### `src/server/index.js`
769
807
  Exports
770
808
  - `runCli`
@@ -776,6 +814,7 @@ Exports
776
814
  - `STEP_IDS`
777
815
  - `STEP_PRECONDITION_NAMES`
778
816
  - `abandonSession({ targetRoot = process.cwd(), sessionId } = {})`
817
+ - `adoptDependenciesInstalled({ targetRoot = process.cwd(), sessionId, message = "" } = {})`
779
818
  - `adoptCodexThreadId({ targetRoot = process.cwd(), sessionId, codexThreadId } = {})`
780
819
  - `buildSessionResponse`
781
820
  - `buildSessionErrorResponse`
@@ -783,6 +822,7 @@ Exports
783
822
  - `createSessionId`
784
823
  - `extractIssueTitle(value = "")`
785
824
  - `extractIssueText(value = "")`
825
+ - `extractPlanDetails(value = "")`
786
826
  - `extractPlanText(value = "")`
787
827
  - `inspectSession({ targetRoot = process.cwd(), sessionId } = {})`
788
828
  - `inspectSessionDiff({ targetRoot = process.cwd(), sessionId } = {})`
@@ -790,6 +830,7 @@ Exports
790
830
  - `isValidSessionId`
791
831
  - `listSessions({ targetRoot = process.cwd(), archive = "active" } = {})`
792
832
  - `renderTemplate`
833
+ - `recordDependenciesInstalled(paths, { message = "Installed Node dependencies in the session worktree.", preconditions = [] } = {})`
793
834
  - `resolveSessionPaths`
794
835
  - `runSessionStep({ targetRoot = process.cwd(), sessionId, options = {} } = {})`
795
836
  Local functions
@@ -798,15 +839,43 @@ Local functions
798
839
  - `existingSessionContext({ targetRoot = process.cwd(), sessionId } = {})`
799
840
  - `withExistingSession(input, handler)`
800
841
  - `extractMarkedText(value = "", marker = "")`
842
+ - `extractIssueCategory(value = "")`
843
+ - `extractUiImpact(value = "")`
844
+ - `extractAgentDecisions(value = "")`
845
+ - `normalizeIssueCategory(value = "")`
846
+ - `normalizeUiImpact(value = "")`
847
+ - `writePromptArtifact(paths, fileName, prompt)`
848
+ - `commandText(command, args = [])`
849
+ - `commandOutputSummary(output = "")`
850
+ - `appendCommandLog(paths, { args = [], command, cwd = "", kind = "command", result } = {})`
851
+ - `runLoggedCommand(paths, kind, command, args = [], options = {})`
852
+ - `readIssueMetadata(paths)`
853
+ - `writeIssueMetadata(paths, metadata = {})`
854
+ - `readGithubComments(paths)`
855
+ - `writeGithubComments(paths, comments = {})`
856
+ - `commentOnIssueOnce(paths, { bodyFile, issueUrl, purpose })`
857
+ - `appendAgentDecisions(paths, decisions = "")`
858
+ - `appendAgentDecisionsInput(paths, options = {})`
859
+ - `recordIssueInAgentDecisions(paths, issueUrl = "")`
860
+ - `issueMetadataFromUrl(issueUrl = "")`
861
+ - `nextCycleNumber(cycle = "001")`
801
862
  - `normalizeArchiveFilter(archive = "active")`
802
863
  - `emptySessionDetails(response)`
803
864
  - `removeEmptyStaleWorktreeDirectory(paths)`
804
865
  - `createWorktree(paths, _options = {}, context = {})`
866
+ - `parsePackageManager(value = "")`
867
+ - `hasWorktreeFile(worktree, fileName)`
868
+ - `dependencyInstallCommandForWorktree(worktree)`
869
+ - `installDependencies(paths, _options = {}, context = {})`
805
870
  - `renderIssuePrompt(paths, options = {})`
806
871
  - `draftIssue(paths, options = {})`
807
872
  - `titleFromIssue(issueText)`
808
873
  - `createIssue(paths, _options = {}, context = {})`
874
+ - `renderPlanDetailsPrompt(paths, _options = {}, context = {})`
875
+ - `savePlanDetails(paths, options = {}, context = {})`
809
876
  - `makePlan(paths, options = {}, context = {})`
877
+ - `renderPlanExecutionPrompt(paths, _options = {}, context = {})`
878
+ - `renderPlanFineTuningPrompt(paths, _options = {}, context = {})`
810
879
  - `worktreeStatus(worktree)`
811
880
  - `untrackedFiles(worktree)`
812
881
  - `untrackedFileDiff(worktree, filePath)`
@@ -815,32 +884,87 @@ Local functions
815
884
  - `commitWorktree(paths, { message, allowNoChanges = false } = {})`
816
885
  - `commitImplementation(paths)`
817
886
  - `changedFilesFromLastCommit(paths)`
887
+ - `changedFilesSinceBase(paths)`
888
+ - `nextReviewPassNumber(pass = "")`
889
+ - `readCurrentReviewPass(paths)`
890
+ - `writeCurrentReviewPass(paths, pass)`
891
+ - `resolveReviewPassForPrompt(paths)`
892
+ - `writeReviewPassJson(paths, pass, fileName, payload)`
893
+ - `currentHead(paths)`
818
894
  - `renderReviewPrompt(paths)`
819
- - `detectAndCommitReviewChanges(paths)`
895
+ - `acceptReviewChanges(paths, options = {})`
896
+ - `commitReviewChanges(paths)`
897
+ - `runAutomatedChecks(paths, { stepId, label })`
898
+ - `readCheckResult(paths, stepId)`
899
+ - `maybeCommitCheckRepair(paths, { label, stepId })`
900
+ - `uiCheckAcceptStepId(stepId)`
901
+ - `uiCheckCommitStepId(stepId)`
902
+ - `uiCheckSourceStepId(stepId)`
903
+ - `uiCheckLabelForStep(stepId)`
904
+ - `writeUiCheckJson(paths, fileName, payload)`
905
+ - `runDeepUiCheck(paths, { stepId, label, phase }, options = {}, context = {})`
906
+ - `acceptUiCheckChanges(paths, { stepId }, _options = {}, context = {})`
907
+ - `commitUiCheckChanges(paths, { stepId }, _options = {}, context = {})`
820
908
  - `userCheck(paths, options = {})`
909
+ - `updateBlueprint(paths, options = {}, context = {})`
821
910
  - `readPackageJson(root)`
822
911
  - `doctorCommandForWorktree(worktree)`
823
912
  - `runDoctor(paths)`
913
+ - `maybeCommitDoctorRepair(paths)`
914
+ - `commitLinesSinceBase(paths)`
915
+ - `readCheckSummaries(paths)`
916
+ - `readUiCheckSummaries(paths)`
917
+ - `readReviewPassSummaries(paths)`
918
+ - `createFinalReport(paths, _options = {}, context = {})`
824
919
  - `issueNumberFromUrl(issueUrl)`
920
+ - `parseJsonObject(value)`
921
+ - `readPrState(paths, prUrl)`
922
+ - `readCurrentBranchPrState(paths)`
923
+ - `prStateIsMerged(prState)`
924
+ - `prStateIsClosed(prState)`
925
+ - `currentTargetBranch(targetRoot)`
926
+ - `assertTargetRootCleanForBaseUpdate(paths)`
927
+ - `removeSessionWorktree(paths)`
928
+ - `writePrOutcome(paths, outcome)`
929
+ - `assertTargetRootCanUpdateBase(paths, branch)`
930
+ - `assertTargetBaseCanFastForward(paths, branch)`
931
+ - `updateLocalBaseBranch(paths, baseBranch = "")`
932
+ - `updateHelperMapBeforePr(paths)`
825
933
  - `createPr(paths)`
826
- - `mergePr(paths)`
934
+ - `closePrWithoutMerge(paths, prUrl, options = {})`
935
+ - `finalizePr(paths, options = {})`
827
936
  - `finishSession(paths)`
828
937
  - `runNamedPreconditions(paths, names = [])`
829
938
 
939
+ ### `src/server/sessionRuntime/appReadiness.js`
940
+ Exports
941
+ - `inspectReadyJskitAppRoot(rootPath)`
942
+ Local functions
943
+ - `pathExists(filePath)`
944
+ - `directoryExists(filePath)`
945
+
830
946
  ### `src/server/sessionRuntime/constants.js`
831
947
  Exports
832
948
  - `PROMPT_DIRECTORY`
833
949
  - `SESSION_ID_PATTERN`
834
950
  - `SESSION_STATUS`
951
+ - `SESSION_WORKFLOW_VERSION`
952
+ - `REVIEW_PASS_LIMIT`
953
+ - `CYCLE_STEP_IDS`
835
954
  - `STEP_DEFINITION_BY_ID`
836
955
  - `STEP_DEFINITIONS`
837
956
  - `STEP_IDS`
838
957
  - `STEP_LABEL_BY_ID`
839
958
  - `STEP_PRECONDITION_NAMES`
959
+ - `PLAN_EXECUTION_CODEX_HANDOFF`
960
+ - `PLAN_FINE_TUNING_CODEX_HANDOFF`
961
+ - `REVIEW_EXECUTION_CODEX_HANDOFF`
962
+ - `DEEP_UI_CHECK_CODEX_HANDOFF`
963
+ - `BLUEPRINT_CODEX_HANDOFF`
840
964
  - `SESSION_STATE_RELATIVE_PATH`
841
965
  Local functions
842
- - `codexHandoff(expectedOutput)`
843
- - `defineStep({ buttonLabel, codex = undefined, description, id, input = INPUT_NONE, kind = "automatic", label, nextCommandTemplate = "jskit session {{session_id}} step", preconditions = [], utilityActions = [] })`
966
+ - `codexHandoff(expectedOutput, { autoInject = false, promptActionLabel = "" } = {})`
967
+ - `defineStep({ buttonLabel, codex = undefined, description, id, input = INPUT_NONE, kind = "automatic", label, nextCommandTemplate = "jskit session {{session_id}} step", preconditions = [], utilityActions = [], displayGroupId = "", displayGroupLabel = "" })`
844
968
 
845
969
  ### `src/server/sessionRuntime/io.js`
846
970
  Exports
@@ -870,13 +994,26 @@ Local functions
870
994
  ### `src/server/sessionRuntime/preconditions.js`
871
995
  Exports
872
996
  - `applyPreconditions(paths, checks = [])`
997
+ - `assertActiveCycleExists(paths)`
998
+ - `assertActiveCycleUserCheckPassed(paths)`
999
+ - `assertBlueprintUpdateSatisfied(paths)`
1000
+ - `assertDeepUiCheckSatisfied(paths)`
1001
+ - `assertDeepUiRecheckSatisfied(paths)`
1002
+ - `assertDependenciesInstalled(paths)`
1003
+ - `assertFinalReportExists(paths)`
873
1004
  - `assertGhAuth(targetRoot)`
874
1005
  - `assertGitCurrentBranch(targetRoot)`
875
1006
  - `assertGitRepository(targetRoot)`
876
1007
  - `assertGithubOrigin(targetRoot)`
1008
+ - `assertIssueMetadataExists(paths)`
877
1009
  - `assertIssueTextExists(paths)`
878
1010
  - `assertIssueUrlExists(paths)`
1011
+ - `assertPostReviewChecksPassed(paths)`
1012
+ - `assertPreReviewChecksPassed(paths)`
1013
+ - `assertPlanDetailsExists(paths)`
1014
+ - `assertPlanTextExists(paths)`
879
1015
  - `assertPrUrlExists(paths)`
1016
+ - `assertReadyJskitApp(paths)`
880
1017
  - `assertSessionExists(paths)`
881
1018
  - `assertTargetRootWritable(targetRoot)`
882
1019
  - `assertWorktreeExists(paths)`
@@ -884,6 +1021,8 @@ Exports
884
1021
  - `hasWorktree`
885
1022
  Local functions
886
1023
  - `resolveGitCommonDirectory(targetRoot)`
1024
+ - `pathExists(filePath)`
1025
+ - `assertActiveCycleStepReceipt(paths, { code, id, message, stepId })`
887
1026
 
888
1027
  ### `src/server/sessionRuntime/promptRenderer.js`
889
1028
  Exports
@@ -894,26 +1033,53 @@ Exports
894
1033
  ### `src/server/sessionRuntime/responses.js`
895
1034
  Exports
896
1035
  - `buildSessionErrorResponse({ targetRoot = process.cwd(), sessionId = "", code, message, repairCommand = "", status = SESSION_STATUS.BLOCKED, preconditions = [], errors = undefined } = {})`
897
- - `buildSessionResponse(paths, { ok = true, errors = [], preconditions = [], prompt = undefined, status = undefined } = {})`
1036
+ - `buildSessionResponse(paths, { codex = undefined, ok = true, errors = [], preconditions = [], prompt = undefined, status = undefined } = {})`
898
1037
  - `buildStepDefinitions()`
899
1038
  - `createError({ code, message, repairCommand = "" })`
900
1039
  - `createPrecondition({ id, ok, message })`
901
1040
  - `failSession(paths, { code, message, repairCommand = "", preconditions = [], status = SESSION_STATUS.BLOCKED, prompt = "" })`
902
1041
  - `markCurrentStep(paths, stepId)`
903
1042
  - `markStatus(paths, status)`
1043
+ - `normalizeReviewPassNumber(value = "")`
1044
+ - `readActiveCycle(paths)`
904
1045
  - `readReceiptSteps(paths)`
1046
+ - `readReviewPasses(paths)`
905
1047
  - `readSessionArtifacts(paths)`
1048
+ - `reviewPassDirectoryName(pass = DEFAULT_REVIEW_PASS)`
1049
+ - `reviewPassRoot(paths, pass)`
1050
+ - `writeActiveCycle(paths, cycle)`
1051
+ - `writeCycleReceipt(paths, receiptName, message, { cycle = "" } = {})`
906
1052
  - `writeReceipt(paths, stepId, message)`
907
1053
  Local functions
908
1054
  - `normalizeStepId(stepId)`
909
1055
  - `stepIndex(stepId)`
910
1056
  - `normalizeKnownStepIds(stepIds = [])`
911
1057
  - `stepCanExposeStoredPrompt(stepId)`
912
- - `readCompletedSteps(sessionRoot)`
1058
+ - `normalizeCycleNumber(value = "")`
1059
+ - `cycleDirectoryName(cycle = DEFAULT_ACTIVE_CYCLE)`
1060
+ - `isCycleStepId(stepId = "")`
1061
+ - `readWorkflowVersion(paths)`
1062
+ - `cycleStepsRoot(paths, cycle)`
1063
+ - `cycleRoot(paths, cycle)`
1064
+ - `parseJsonFileIfExists(filePath)`
1065
+ - `readReviewPassNumbers(paths)`
1066
+ - `readReviewPassInfo(paths, pass)`
1067
+ - `readPromptForStep(paths, stepId)`
1068
+ - `readStepFileNames(stepsRoot)`
1069
+ - `readCompletedSteps(paths)`
1070
+ - `applyReviewPassCompletionOverlay(paths, completedSteps = [])`
1071
+ - `readCycleInfo(paths, cycle)`
1072
+ - `readCycles(paths, activeCycle)`
1073
+ - `readStructuredChecks(paths)`
1074
+ - `readStructuredUiChecks(paths)`
1075
+ - `readWorktreeStatus(paths, worktreeReady)`
913
1076
  - `resolveNextStep(completedSteps = [])`
914
1077
  - `cloneContractValue(value)`
915
1078
  - `publicStepDefinition(step, index)`
916
- - `buildCurrentStepAction(stepId)`
1079
+ - `stepIsRetryableWhenBlocked(stepId)`
1080
+ - `stepIsConditional(stepId)`
1081
+ - `skipReasonForStep(stepId, artifacts = {})`
1082
+ - `buildCurrentStepAction(stepId, artifacts = {})`
917
1083
  - `buildCodexHandoff(stepId)`
918
1084
  - `buildNextCommand(sessionId, stepId)`
919
1085