@vibe-hero/server 0.1.0

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.
Files changed (150) hide show
  1. package/LICENSE +190 -0
  2. package/README.md +151 -0
  3. package/dist/catalog/bundled/claude-code/.gitkeep +0 -0
  4. package/dist/catalog/bundled/claude-code/context-management.yaml +302 -0
  5. package/dist/catalog/bundled/claude-code/planning.yaml +313 -0
  6. package/dist/catalog/bundled/claude-code/subagents.yaml +357 -0
  7. package/dist/catalog/bundled/general/.gitkeep +0 -0
  8. package/dist/catalog/bundled/general/_placeholder.yaml +39 -0
  9. package/dist/catalog/bundled/general/task-decomposition.yaml +390 -0
  10. package/dist/catalog/bundled/index.d.ts +39 -0
  11. package/dist/catalog/bundled/index.d.ts.map +1 -0
  12. package/dist/catalog/bundled/index.js +41 -0
  13. package/dist/catalog/bundled/index.js.map +1 -0
  14. package/dist/catalog/fetcher.d.ts +201 -0
  15. package/dist/catalog/fetcher.d.ts.map +1 -0
  16. package/dist/catalog/fetcher.js +452 -0
  17. package/dist/catalog/fetcher.js.map +1 -0
  18. package/dist/catalog/loader.d.ts +165 -0
  19. package/dist/catalog/loader.d.ts.map +1 -0
  20. package/dist/catalog/loader.js +241 -0
  21. package/dist/catalog/loader.js.map +1 -0
  22. package/dist/catalog/resolve.d.ts +85 -0
  23. package/dist/catalog/resolve.d.ts.map +1 -0
  24. package/dist/catalog/resolve.js +103 -0
  25. package/dist/catalog/resolve.js.map +1 -0
  26. package/dist/cli/getOffer.d.ts +38 -0
  27. package/dist/cli/getOffer.d.ts.map +1 -0
  28. package/dist/cli/getOffer.js +150 -0
  29. package/dist/cli/getOffer.js.map +1 -0
  30. package/dist/cli/index.d.ts +46 -0
  31. package/dist/cli/index.d.ts.map +1 -0
  32. package/dist/cli/index.js +88 -0
  33. package/dist/cli/index.js.map +1 -0
  34. package/dist/config.d.ts +34 -0
  35. package/dist/config.d.ts.map +1 -0
  36. package/dist/config.js +63 -0
  37. package/dist/config.js.map +1 -0
  38. package/dist/engine/elo.d.ts +76 -0
  39. package/dist/engine/elo.d.ts.map +1 -0
  40. package/dist/engine/elo.js +79 -0
  41. package/dist/engine/elo.js.map +1 -0
  42. package/dist/engine/graduation.d.ts +108 -0
  43. package/dist/engine/graduation.d.ts.map +1 -0
  44. package/dist/engine/graduation.js +161 -0
  45. package/dist/engine/graduation.js.map +1 -0
  46. package/dist/engine/lapse.d.ts +80 -0
  47. package/dist/engine/lapse.d.ts.map +1 -0
  48. package/dist/engine/lapse.js +125 -0
  49. package/dist/engine/lapse.js.map +1 -0
  50. package/dist/engine/selection.d.ts +84 -0
  51. package/dist/engine/selection.d.ts.map +1 -0
  52. package/dist/engine/selection.js +119 -0
  53. package/dist/engine/selection.js.map +1 -0
  54. package/dist/grading/deterministic.d.ts +102 -0
  55. package/dist/grading/deterministic.d.ts.map +1 -0
  56. package/dist/grading/deterministic.js +118 -0
  57. package/dist/grading/deterministic.js.map +1 -0
  58. package/dist/grading/freeform.d.ts +64 -0
  59. package/dist/grading/freeform.d.ts.map +1 -0
  60. package/dist/grading/freeform.js +85 -0
  61. package/dist/grading/freeform.js.map +1 -0
  62. package/dist/index.d.ts +52 -0
  63. package/dist/index.d.ts.map +1 -0
  64. package/dist/index.js +91 -0
  65. package/dist/index.js.map +1 -0
  66. package/dist/observation/hookEvents.d.ts +113 -0
  67. package/dist/observation/hookEvents.d.ts.map +1 -0
  68. package/dist/observation/hookEvents.js +170 -0
  69. package/dist/observation/hookEvents.js.map +1 -0
  70. package/dist/observation/offers.d.ts +215 -0
  71. package/dist/observation/offers.d.ts.map +1 -0
  72. package/dist/observation/offers.js +327 -0
  73. package/dist/observation/offers.js.map +1 -0
  74. package/dist/observation/source.d.ts +133 -0
  75. package/dist/observation/source.d.ts.map +1 -0
  76. package/dist/observation/source.js +105 -0
  77. package/dist/observation/source.js.map +1 -0
  78. package/dist/profile/migrate.d.ts +122 -0
  79. package/dist/profile/migrate.d.ts.map +1 -0
  80. package/dist/profile/migrate.js +147 -0
  81. package/dist/profile/migrate.js.map +1 -0
  82. package/dist/profile/store.d.ts +84 -0
  83. package/dist/profile/store.d.ts.map +1 -0
  84. package/dist/profile/store.js +267 -0
  85. package/dist/profile/store.js.map +1 -0
  86. package/dist/schemas/common.d.ts +95 -0
  87. package/dist/schemas/common.d.ts.map +1 -0
  88. package/dist/schemas/common.js +106 -0
  89. package/dist/schemas/common.js.map +1 -0
  90. package/dist/schemas/content.d.ts +828 -0
  91. package/dist/schemas/content.d.ts.map +1 -0
  92. package/dist/schemas/content.js +219 -0
  93. package/dist/schemas/content.js.map +1 -0
  94. package/dist/schemas/profile.d.ts +599 -0
  95. package/dist/schemas/profile.d.ts.map +1 -0
  96. package/dist/schemas/profile.js +177 -0
  97. package/dist/schemas/profile.js.map +1 -0
  98. package/dist/schemas/tools.d.ts +1581 -0
  99. package/dist/schemas/tools.d.ts.map +1 -0
  100. package/dist/schemas/tools.js +286 -0
  101. package/dist/schemas/tools.js.map +1 -0
  102. package/dist/tools/config.d.ts +51 -0
  103. package/dist/tools/config.d.ts.map +1 -0
  104. package/dist/tools/config.js +104 -0
  105. package/dist/tools/config.js.map +1 -0
  106. package/dist/tools/gate.d.ts +50 -0
  107. package/dist/tools/gate.d.ts.map +1 -0
  108. package/dist/tools/gate.js +67 -0
  109. package/dist/tools/gate.js.map +1 -0
  110. package/dist/tools/guidance.d.ts +36 -0
  111. package/dist/tools/guidance.d.ts.map +1 -0
  112. package/dist/tools/guidance.js +117 -0
  113. package/dist/tools/guidance.js.map +1 -0
  114. package/dist/tools/listTopics.d.ts +55 -0
  115. package/dist/tools/listTopics.d.ts.map +1 -0
  116. package/dist/tools/listTopics.js +78 -0
  117. package/dist/tools/listTopics.js.map +1 -0
  118. package/dist/tools/offers.d.ts +60 -0
  119. package/dist/tools/offers.d.ts.map +1 -0
  120. package/dist/tools/offers.js +152 -0
  121. package/dist/tools/offers.js.map +1 -0
  122. package/dist/tools/placeholders.d.ts +27 -0
  123. package/dist/tools/placeholders.d.ts.map +1 -0
  124. package/dist/tools/placeholders.js +49 -0
  125. package/dist/tools/placeholders.js.map +1 -0
  126. package/dist/tools/recordObservation.d.ts +52 -0
  127. package/dist/tools/recordObservation.d.ts.map +1 -0
  128. package/dist/tools/recordObservation.js +87 -0
  129. package/dist/tools/recordObservation.js.map +1 -0
  130. package/dist/tools/startQuiz.d.ts +82 -0
  131. package/dist/tools/startQuiz.d.ts.map +1 -0
  132. package/dist/tools/startQuiz.js +180 -0
  133. package/dist/tools/startQuiz.js.map +1 -0
  134. package/dist/tools/status.d.ts +59 -0
  135. package/dist/tools/status.d.ts.map +1 -0
  136. package/dist/tools/status.js +133 -0
  137. package/dist/tools/status.js.map +1 -0
  138. package/dist/tools/submitAnswer.d.ts +156 -0
  139. package/dist/tools/submitAnswer.d.ts.map +1 -0
  140. package/dist/tools/submitAnswer.js +402 -0
  141. package/dist/tools/submitAnswer.js.map +1 -0
  142. package/dist/tools/types.d.ts +82 -0
  143. package/dist/tools/types.d.ts.map +1 -0
  144. package/dist/tools/types.js +48 -0
  145. package/dist/tools/types.js.map +1 -0
  146. package/dist/tools/us2/standing.d.ts +111 -0
  147. package/dist/tools/us2/standing.d.ts.map +1 -0
  148. package/dist/tools/us2/standing.js +143 -0
  149. package/dist/tools/us2/standing.js.map +1 -0
  150. package/package.json +62 -0
@@ -0,0 +1,177 @@
1
+ /**
2
+ * @file Learner Profile schemas (read-write, per-user, local at ~/.vibe-hero/).
3
+ *
4
+ * The profile is a single Zod-validated JSON document. Privacy-critical: only
5
+ * derived grades/scores are persisted, never raw answer text (FR-018/024).
6
+ *
7
+ * Source of truth: specs/001-vibe-hero-mvp/data-model.md (§ Learner Profile).
8
+ */
9
+ import { z } from "zod";
10
+ import { AbilityKeySchema, GradeSchema, TierSchema, ToolIdSchema, } from "./common.js";
11
+ /** ISO-8601 datetime string. */
12
+ const IsoDateTimeSchema = z.string().datetime();
13
+ /**
14
+ * User configuration written by the setup skill (FR-031). Absence of `config`
15
+ * on the root profile is the first-run setup gate (FR-032).
16
+ */
17
+ export const ConfigSchema = z.object({
18
+ toolsLearning: z.array(ToolIdSchema),
19
+ offerCadence: z.enum(["off", "per_session", "per_topic"]),
20
+ proactiveOffers: z.boolean(),
21
+ quizLength: z.number().int().min(3).max(5).default(4),
22
+ createdAt: IsoDateTimeSchema,
23
+ updatedAt: IsoDateTimeSchema,
24
+ });
25
+ /**
26
+ * Elo-style ability estimate for one {@link AbilityKey}. `itemsSeen` drives the
27
+ * provisional → settled K-factor; `lastItemIds` avoids back-to-back repeats.
28
+ *
29
+ * `dwell` is the consecutive count of recent graded items that satisfied the
30
+ * promotion-crossing condition (FR-008 / SC-014). It is the dwell counter the
31
+ * pure graduation engine threads across `submit_answer` calls so a single fluke
32
+ * item cannot promote — incremented while θ stays above the promotion bar and
33
+ * reset to 0 the moment an item fails it. Defaulted to `0` so profiles written
34
+ * before this field read forward without migration (additive, forward-compat).
35
+ */
36
+ export const AbilityEstimateSchema = z.object({
37
+ value: z.number(),
38
+ itemsSeen: z.number().int().nonnegative(),
39
+ lastAssessedAt: IsoDateTimeSchema,
40
+ lastItemIds: z.array(z.string().min(1)),
41
+ dwell: z.number().int().nonnegative().default(0),
42
+ });
43
+ /**
44
+ * Per-key graduation state with hysteresis (FR-008/009). `currentTier` is 0
45
+ * until the learner first graduates.
46
+ */
47
+ export const TierGraduationSchema = z.object({
48
+ currentTier: z.union([TierSchema, z.literal(0)]),
49
+ status: z.enum(["current", "due_for_review"]),
50
+ graduatedAt: IsoDateTimeSchema,
51
+ lastChangeReason: z.enum(["graduated", "demoted", "review_due"]),
52
+ });
53
+ /** An entry in the due-for-review queue. */
54
+ export const ReviewEntrySchema = z.object({
55
+ key: AbilityKeySchema,
56
+ dueAt: IsoDateTimeSchema,
57
+ reason: z.enum(["spaced", "lapsed"]),
58
+ });
59
+ /**
60
+ * One graded item inside a {@link QuizRecord}. Persists only the derived grade
61
+ * and continuous score — NO raw answer text (privacy, FR-018/024).
62
+ */
63
+ export const AnsweredItemSchema = z.object({
64
+ itemId: z.string().min(1),
65
+ tier: TierSchema,
66
+ difficulty: z.number(),
67
+ grade: GradeSchema,
68
+ score: z.number().min(0).max(1),
69
+ gradedBy: z.enum(["engine", "host_agent"]),
70
+ answeredAt: IsoDateTimeSchema,
71
+ });
72
+ /**
73
+ * One quiz session. Only records with `completedAt` present count toward
74
+ * graduation; partial sessions are discarded.
75
+ */
76
+ export const QuizRecordSchema = z.object({
77
+ id: z.string().min(1),
78
+ key: AbilityKeySchema,
79
+ startedAt: IsoDateTimeSchema,
80
+ completedAt: IsoDateTimeSchema.optional(),
81
+ items: z.array(AnsweredItemSchema),
82
+ abilityBefore: z.number(),
83
+ abilityAfter: z.number(),
84
+ });
85
+ /**
86
+ * Per-session offer accounting (anti-fatigue, FR-020/020a). Reset per session
87
+ * id. Under `per_session`: max 1 offer; a decline sets `declinedThisSession`
88
+ * and suppresses further offers. Under `per_topic`: at most one offer per
89
+ * distinct {@link AbilityKey} per session.
90
+ *
91
+ * `candidateKeys` is the per-session pool of topics that observed activity has
92
+ * flagged as offer-worthy (accumulated by `record_observation` as signals
93
+ * arrive). `get_offer` — which receives no signals of its own — resolves the
94
+ * surfaced offer from this pool. It is distinct from `offeredTopicKeys`, which
95
+ * records topics that have ALREADY surfaced (driving the `per_topic` cadence cap
96
+ * and the cross-session backoff). Defaulted to `[]` so older persisted profiles
97
+ * read forward without migration.
98
+ */
99
+ export const OfferLedgerSchema = z.object({
100
+ // Empty string denotes "no session bound yet" (fresh / reset profile); a real
101
+ // session id is written when the first session begins.
102
+ sessionId: z.string(),
103
+ offersThisSession: z.number().int().nonnegative(),
104
+ declinedThisSession: z.boolean(),
105
+ offeredTopicKeys: z.array(AbilityKeySchema),
106
+ candidateKeys: z.array(AbilityKeySchema).default([]),
107
+ });
108
+ /**
109
+ * Cross-session backoff (FR-020b). Each decline lengthens the next-eligible
110
+ * interval; after N consecutive declines offers are globally muted via
111
+ * `mutedUntil`. An accept resets `consecutiveDeclines`.
112
+ */
113
+ export const OfferBackoffSchema = z.object({
114
+ consecutiveDeclines: z.number().int().nonnegative(),
115
+ mutedUntil: IsoDateTimeSchema.optional(),
116
+ perTopicNextEligibleAt: z.record(AbilityKeySchema, IsoDateTimeSchema),
117
+ });
118
+ /**
119
+ * Transient, privacy-safe observation event derived from a hook payload and/or
120
+ * transcript record (correlated by `tool_use_id`, FR-017). Used only to
121
+ * populate offer candidates; never stored as raw prompt/tool I/O (FR-018).
122
+ */
123
+ export const ObservationEventSchema = z.object({
124
+ tool: ToolIdSchema,
125
+ topicKeys: z.array(AbilityKeySchema),
126
+ success: z.boolean(),
127
+ timestamp: IsoDateTimeSchema,
128
+ correlationId: z.string().min(1),
129
+ });
130
+ /** Current profile document schema version (migration guard). */
131
+ export const PROFILE_SCHEMA_VERSION = 1;
132
+ /**
133
+ * The root learner profile document, persisted as a single JSON file. `config`
134
+ * absent ⇒ first-run setup gate (FR-032). `abilities`/`graduations` are keyed
135
+ * by {@link AbilityKeySchema} (`class|topic`).
136
+ */
137
+ export const ProfileSchema = z.object({
138
+ schemaVersion: z.number().int().positive(),
139
+ createdAt: IsoDateTimeSchema,
140
+ updatedAt: IsoDateTimeSchema,
141
+ config: ConfigSchema.optional(),
142
+ abilities: z.record(AbilityKeySchema, AbilityEstimateSchema),
143
+ graduations: z.record(AbilityKeySchema, TierGraduationSchema),
144
+ reviewSchedule: z.array(ReviewEntrySchema),
145
+ quizHistory: z.array(QuizRecordSchema),
146
+ offers: OfferLedgerSchema,
147
+ backoff: OfferBackoffSchema,
148
+ });
149
+ /**
150
+ * Build a valid, empty profile for first-run / corrupted-file recovery
151
+ * (FR-023). `config` is intentionally omitted so the setup gate (FR-032)
152
+ * engages until the user runs setup.
153
+ *
154
+ * @param now - ISO timestamp to stamp `createdAt`/`updatedAt` and the empty
155
+ * per-session ledger; defaults to the current time.
156
+ */
157
+ export const emptyProfile = (now = new Date().toISOString()) => ({
158
+ schemaVersion: PROFILE_SCHEMA_VERSION,
159
+ createdAt: now,
160
+ updatedAt: now,
161
+ abilities: {},
162
+ graduations: {},
163
+ reviewSchedule: [],
164
+ quizHistory: [],
165
+ offers: {
166
+ sessionId: "",
167
+ offersThisSession: 0,
168
+ declinedThisSession: false,
169
+ offeredTopicKeys: [],
170
+ candidateKeys: [],
171
+ },
172
+ backoff: {
173
+ consecutiveDeclines: 0,
174
+ perTopicNextEligibleAt: {},
175
+ },
176
+ });
177
+ //# sourceMappingURL=profile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/schemas/profile.ts"],"names":[],"mappings":"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"}