@ai0x0/codex-ts 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 (130) hide show
  1. package/LICENSE +201 -0
  2. package/dist/core/src/codex_thread.d.ts +80 -0
  3. package/dist/core/src/codex_thread.d.ts.map +1 -0
  4. package/dist/core/src/codex_thread.js +167 -0
  5. package/dist/core/src/codex_thread.js.map +1 -0
  6. package/dist/core/src/index.d.ts +5 -0
  7. package/dist/core/src/index.d.ts.map +1 -0
  8. package/dist/core/src/index.js +4 -0
  9. package/dist/core/src/index.js.map +1 -0
  10. package/dist/core/src/session/turn.d.ts +34 -0
  11. package/dist/core/src/session/turn.d.ts.map +1 -0
  12. package/dist/core/src/session/turn.js +178 -0
  13. package/dist/core/src/session/turn.js.map +1 -0
  14. package/dist/core/src/tools/handlers/plan_spec.d.ts +14 -0
  15. package/dist/core/src/tools/handlers/plan_spec.d.ts.map +1 -0
  16. package/dist/core/src/tools/handlers/plan_spec.js +50 -0
  17. package/dist/core/src/tools/handlers/plan_spec.js.map +1 -0
  18. package/dist/core/src/tools/handlers/request_user_input.d.ts +17 -0
  19. package/dist/core/src/tools/handlers/request_user_input.d.ts.map +1 -0
  20. package/dist/core/src/tools/handlers/request_user_input.js +17 -0
  21. package/dist/core/src/tools/handlers/request_user_input.js.map +1 -0
  22. package/dist/core/src/tools/handlers/request_user_input_spec.d.ts +25 -0
  23. package/dist/core/src/tools/handlers/request_user_input_spec.d.ts.map +1 -0
  24. package/dist/core/src/tools/handlers/request_user_input_spec.js +51 -0
  25. package/dist/core/src/tools/handlers/request_user_input_spec.js.map +1 -0
  26. package/dist/core/src/tools/router.d.ts +30 -0
  27. package/dist/core/src/tools/router.d.ts.map +1 -0
  28. package/dist/core/src/tools/router.js +82 -0
  29. package/dist/core/src/tools/router.js.map +1 -0
  30. package/dist/core/tests/common/lib.d.ts +26 -0
  31. package/dist/core/tests/common/lib.d.ts.map +1 -0
  32. package/dist/core/tests/common/lib.js +97 -0
  33. package/dist/core/tests/common/lib.js.map +1 -0
  34. package/dist/core/tests/suite/goal.test.d.ts +6 -0
  35. package/dist/core/tests/suite/goal.test.d.ts.map +1 -0
  36. package/dist/core/tests/suite/goal.test.js +87 -0
  37. package/dist/core/tests/suite/goal.test.js.map +1 -0
  38. package/dist/core/tests/suite/plan.test.d.ts +5 -0
  39. package/dist/core/tests/suite/plan.test.d.ts.map +1 -0
  40. package/dist/core/tests/suite/plan.test.js +89 -0
  41. package/dist/core/tests/suite/plan.test.js.map +1 -0
  42. package/dist/core/tests/suite/request_user_input.test.d.ts +5 -0
  43. package/dist/core/tests/suite/request_user_input.test.d.ts.map +1 -0
  44. package/dist/core/tests/suite/request_user_input.test.js +151 -0
  45. package/dist/core/tests/suite/request_user_input.test.js.map +1 -0
  46. package/dist/core/tests/suite/resume.test.d.ts +8 -0
  47. package/dist/core/tests/suite/resume.test.d.ts.map +1 -0
  48. package/dist/core/tests/suite/resume.test.js +70 -0
  49. package/dist/core/tests/suite/resume.test.js.map +1 -0
  50. package/dist/ext/goal/src/index.d.ts +3 -0
  51. package/dist/ext/goal/src/index.d.ts.map +1 -0
  52. package/dist/ext/goal/src/index.js +3 -0
  53. package/dist/ext/goal/src/index.js.map +1 -0
  54. package/dist/ext/goal/src/spec.d.ts +13 -0
  55. package/dist/ext/goal/src/spec.d.ts.map +1 -0
  56. package/dist/ext/goal/src/spec.js +61 -0
  57. package/dist/ext/goal/src/spec.js.map +1 -0
  58. package/dist/ext/goal/src/tool.d.ts +34 -0
  59. package/dist/ext/goal/src/tool.d.ts.map +1 -0
  60. package/dist/ext/goal/src/tool.js +104 -0
  61. package/dist/ext/goal/src/tool.js.map +1 -0
  62. package/dist/protocol/src/index.d.ts +5 -0
  63. package/dist/protocol/src/index.d.ts.map +1 -0
  64. package/dist/protocol/src/index.js +2 -0
  65. package/dist/protocol/src/index.js.map +1 -0
  66. package/dist/protocol/src/plan_tool.d.ts +16 -0
  67. package/dist/protocol/src/plan_tool.d.ts.map +1 -0
  68. package/dist/protocol/src/plan_tool.js +5 -0
  69. package/dist/protocol/src/plan_tool.js.map +1 -0
  70. package/dist/protocol/src/protocol.d.ts +87 -0
  71. package/dist/protocol/src/protocol.d.ts.map +1 -0
  72. package/dist/protocol/src/protocol.js +8 -0
  73. package/dist/protocol/src/protocol.js.map +1 -0
  74. package/dist/protocol/src/request_user_input.d.ts +31 -0
  75. package/dist/protocol/src/request_user_input.d.ts.map +1 -0
  76. package/dist/protocol/src/request_user_input.js +3 -0
  77. package/dist/protocol/src/request_user_input.js.map +1 -0
  78. package/dist/protocol/src/user_input.d.ts +9 -0
  79. package/dist/protocol/src/user_input.d.ts.map +1 -0
  80. package/dist/protocol/src/user_input.js +3 -0
  81. package/dist/protocol/src/user_input.js.map +1 -0
  82. package/dist/state/src/index.d.ts +3 -0
  83. package/dist/state/src/index.d.ts.map +1 -0
  84. package/dist/state/src/index.js +2 -0
  85. package/dist/state/src/index.js.map +1 -0
  86. package/dist/state/src/runtime/goals.d.ts +48 -0
  87. package/dist/state/src/runtime/goals.d.ts.map +1 -0
  88. package/dist/state/src/runtime/goals.js +93 -0
  89. package/dist/state/src/runtime/goals.js.map +1 -0
  90. package/dist/thread-store/src/in_memory.d.ts +20 -0
  91. package/dist/thread-store/src/in_memory.d.ts.map +1 -0
  92. package/dist/thread-store/src/in_memory.js +70 -0
  93. package/dist/thread-store/src/in_memory.js.map +1 -0
  94. package/dist/thread-store/src/index.d.ts +8 -0
  95. package/dist/thread-store/src/index.d.ts.map +1 -0
  96. package/dist/thread-store/src/index.js +5 -0
  97. package/dist/thread-store/src/index.js.map +1 -0
  98. package/dist/thread-store/src/io_backend.d.ts +30 -0
  99. package/dist/thread-store/src/io_backend.d.ts.map +1 -0
  100. package/dist/thread-store/src/io_backend.js +31 -0
  101. package/dist/thread-store/src/io_backend.js.map +1 -0
  102. package/dist/thread-store/src/live_thread.d.ts +21 -0
  103. package/dist/thread-store/src/live_thread.d.ts.map +1 -0
  104. package/dist/thread-store/src/live_thread.js +42 -0
  105. package/dist/thread-store/src/live_thread.js.map +1 -0
  106. package/dist/thread-store/src/local_thread_store.d.ts +25 -0
  107. package/dist/thread-store/src/local_thread_store.d.ts.map +1 -0
  108. package/dist/thread-store/src/local_thread_store.js +96 -0
  109. package/dist/thread-store/src/local_thread_store.js.map +1 -0
  110. package/dist/thread-store/src/store.d.ts +22 -0
  111. package/dist/thread-store/src/store.d.ts.map +1 -0
  112. package/dist/thread-store/src/store.js +8 -0
  113. package/dist/thread-store/src/store.js.map +1 -0
  114. package/dist/thread-store/src/types.d.ts +72 -0
  115. package/dist/thread-store/src/types.d.ts.map +1 -0
  116. package/dist/thread-store/src/types.js +6 -0
  117. package/dist/thread-store/src/types.js.map +1 -0
  118. package/dist/tools/src/index.d.ts +5 -0
  119. package/dist/tools/src/index.d.ts.map +1 -0
  120. package/dist/tools/src/index.js +3 -0
  121. package/dist/tools/src/index.js.map +1 -0
  122. package/dist/tools/src/json_schema.d.ts +16 -0
  123. package/dist/tools/src/json_schema.d.ts.map +1 -0
  124. package/dist/tools/src/json_schema.js +26 -0
  125. package/dist/tools/src/json_schema.js.map +1 -0
  126. package/dist/tools/src/tool_spec.d.ts +21 -0
  127. package/dist/tools/src/tool_spec.d.ts.map +1 -0
  128. package/dist/tools/src/tool_spec.js +17 -0
  129. package/dist/tools/src/tool_spec.js.map +1 -0
  130. package/package.json +48 -0
@@ -0,0 +1,61 @@
1
+ /**
2
+ * mirrors codex-rs/ext/goal/src/spec.rs
3
+ *
4
+ * Tool schemas for create_goal, get_goal, update_goal.
5
+ */
6
+ import * as S from "../../../tools/src/json_schema.js";
7
+ export const GET_GOAL_TOOL_NAME = "get_goal";
8
+ export const CREATE_GOAL_TOOL_NAME = "create_goal";
9
+ export const UPDATE_GOAL_TOOL_NAME = "update_goal";
10
+ export function createGetGoalTool() {
11
+ return {
12
+ type: "function",
13
+ tool: {
14
+ name: GET_GOAL_TOOL_NAME,
15
+ description: "Get the current goal for this thread, including status, budgets, token and elapsed-time usage, and remaining token budget.",
16
+ parameters: S.object({}, [], false),
17
+ strict: false,
18
+ },
19
+ };
20
+ }
21
+ export function createCreateGoalTool() {
22
+ return {
23
+ type: "function",
24
+ tool: {
25
+ name: CREATE_GOAL_TOOL_NAME,
26
+ description: [
27
+ "Create a goal only when explicitly requested by the user or system/developer instructions; do not infer goals from ordinary tasks.",
28
+ `Set token_budget only when an explicit token budget is requested. Fails if a goal exists; use ${UPDATE_GOAL_TOOL_NAME} only for status.`,
29
+ ].join("\n"),
30
+ parameters: S.object({
31
+ objective: S.string("Required. The concrete objective to start pursuing. " +
32
+ "This starts a new active goal only when no goal is currently defined; " +
33
+ "if a goal already exists, this tool fails."),
34
+ token_budget: S.integer("Optional positive token budget for the new active goal."),
35
+ }, ["objective"], false),
36
+ strict: false,
37
+ },
38
+ };
39
+ }
40
+ export function createUpdateGoalTool() {
41
+ return {
42
+ type: "function",
43
+ tool: {
44
+ name: UPDATE_GOAL_TOOL_NAME,
45
+ description: [
46
+ "Update the existing goal.",
47
+ "Use this tool only to mark the goal achieved or blocked.",
48
+ "Set status to `complete` only when the objective has actually been achieved and no required work remains.",
49
+ "Set status to `blocked` only when the goal cannot currently proceed until something external changes.",
50
+ "Do not mark a goal complete merely because its budget is nearly exhausted or because you are stopping work.",
51
+ ].join("\n"),
52
+ parameters: S.object({
53
+ status: S.stringEnum(["complete", "blocked"], "Required. Set to complete only when the objective is achieved and no required work remains. " +
54
+ "Set to blocked only when the goal cannot currently proceed without a user decision, " +
55
+ "missing dependency, or external unblock."),
56
+ }, ["status"], false),
57
+ strict: false,
58
+ },
59
+ };
60
+ }
61
+ //# sourceMappingURL=spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec.js","sourceRoot":"","sources":["../../../../ext/goal/src/spec.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,CAAC,MAAM,mCAAmC,CAAC;AAEvD,MAAM,CAAC,MAAM,kBAAkB,GAAG,UAAU,CAAC;AAC7C,MAAM,CAAC,MAAM,qBAAqB,GAAG,aAAa,CAAC;AACnD,MAAM,CAAC,MAAM,qBAAqB,GAAG,aAAa,CAAC;AAEnD,MAAM,UAAU,iBAAiB;IAC/B,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE;YACJ,IAAI,EAAE,kBAAkB;YACxB,WAAW,EACT,4HAA4H;YAC9H,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC;YACnC,MAAM,EAAE,KAAK;SACd;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE;YACJ,IAAI,EAAE,qBAAqB;YAC3B,WAAW,EAAE;gBACX,oIAAoI;gBACpI,iGAAiG,qBAAqB,mBAAmB;aAC1I,CAAC,IAAI,CAAC,IAAI,CAAC;YACZ,UAAU,EAAE,CAAC,CAAC,MAAM,CAClB;gBACE,SAAS,EAAE,CAAC,CAAC,MAAM,CACjB,sDAAsD;oBACpD,wEAAwE;oBACxE,4CAA4C,CAC/C;gBACD,YAAY,EAAE,CAAC,CAAC,OAAO,CACrB,yDAAyD,CAC1D;aACF,EACD,CAAC,WAAW,CAAC,EACb,KAAK,CACN;YACD,MAAM,EAAE,KAAK;SACd;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE;YACJ,IAAI,EAAE,qBAAqB;YAC3B,WAAW,EAAE;gBACX,2BAA2B;gBAC3B,0DAA0D;gBAC1D,2GAA2G;gBAC3G,uGAAuG;gBACvG,6GAA6G;aAC9G,CAAC,IAAI,CAAC,IAAI,CAAC;YACZ,UAAU,EAAE,CAAC,CAAC,MAAM,CAClB;gBACE,MAAM,EAAE,CAAC,CAAC,UAAU,CAClB,CAAC,UAAU,EAAE,SAAS,CAAC,EACvB,8FAA8F;oBAC5F,sFAAsF;oBACtF,0CAA0C,CAC7C;aACF,EACD,CAAC,QAAQ,CAAC,EACV,KAAK,CACN;YACD,MAAM,EAAE,KAAK;SACd;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * mirrors codex-rs/ext/goal/src/tool.rs
3
+ *
4
+ * GoalToolExecutor — handles create_goal, get_goal, update_goal.
5
+ *
6
+ * Accepts an optional GoalStore for durable persistence (SQLite, IndexedDB…).
7
+ * Falls back to in-memory state when no store is supplied.
8
+ */
9
+ import type { ThreadGoal, ThreadGoalUpdatedEvent } from "../../../protocol/src/protocol.js";
10
+ import type { GoalStore } from "../../../state/src/runtime/goals.js";
11
+ export declare class GoalToolExecutor {
12
+ /** In-memory snapshot — always current, written through to store when present */
13
+ private snapshot;
14
+ private readonly threadId;
15
+ private readonly store?;
16
+ constructor(threadId: string, store?: GoalStore);
17
+ create(objective: string, token_budget?: number): Promise<{
18
+ output: string;
19
+ event: ThreadGoalUpdatedEvent | null;
20
+ }>;
21
+ get(): Promise<{
22
+ output: string;
23
+ event: null;
24
+ }>;
25
+ update(status: "complete" | "blocked"): Promise<{
26
+ output: string;
27
+ event: ThreadGoalUpdatedEvent | null;
28
+ }>;
29
+ recordTokens(count: number, elapsedSeconds?: number): Promise<void>;
30
+ currentSnapshot(): ThreadGoal | null;
31
+ private formatResponse;
32
+ private goalUpdatedEvent;
33
+ }
34
+ //# sourceMappingURL=tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../../../ext/goal/src/tool.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,UAAU,EAEV,sBAAsB,EACvB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAQrE,qBAAa,gBAAgB;IAC3B,iFAAiF;IACjF,OAAO,CAAC,QAAQ,CAA2B;IAC3C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAwB;gBAEnC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS;IAOzC,MAAM,CACV,SAAS,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,sBAAsB,GAAG,IAAI,CAAA;KAAE,CAAC;IAoC9D,GAAG,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,IAAI,CAAA;KAAE,CAAC;IAS/C,MAAM,CACV,MAAM,EAAE,UAAU,GAAG,SAAS,GAC7B,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,sBAAsB,GAAG,IAAI,CAAA;KAAE,CAAC;IAsB9D,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,SAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBpE,eAAe,IAAI,UAAU,GAAG,IAAI;IAMpC,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,gBAAgB;CAGzB"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * mirrors codex-rs/ext/goal/src/tool.rs
3
+ *
4
+ * GoalToolExecutor — handles create_goal, get_goal, update_goal.
5
+ *
6
+ * Accepts an optional GoalStore for durable persistence (SQLite, IndexedDB…).
7
+ * Falls back to in-memory state when no store is supplied.
8
+ */
9
+ export class GoalToolExecutor {
10
+ /** In-memory snapshot — always current, written through to store when present */
11
+ snapshot = null;
12
+ threadId;
13
+ store;
14
+ constructor(threadId, store) {
15
+ this.threadId = threadId;
16
+ this.store = store;
17
+ }
18
+ // ─── create_goal ────────────────────────────────────────────────────────────
19
+ async create(objective, token_budget) {
20
+ if (this.snapshot !== null) {
21
+ return {
22
+ output: JSON.stringify({ error: "A goal already exists. Use update_goal to change its status." }),
23
+ event: null,
24
+ };
25
+ }
26
+ if (!objective) {
27
+ return { output: JSON.stringify({ error: "objective is required." }), event: null };
28
+ }
29
+ if (token_budget !== undefined && (token_budget <= 0 || !Number.isInteger(token_budget))) {
30
+ return { output: JSON.stringify({ error: "token_budget must be a positive integer." }), event: null };
31
+ }
32
+ const goal = {
33
+ objective,
34
+ status: "Active",
35
+ ...(token_budget !== undefined ? { token_budget } : {}),
36
+ tokens_used: 0,
37
+ time_used_seconds: 0,
38
+ };
39
+ if (this.store) {
40
+ await this.store.replaceThreadGoal(this.threadId, objective, "Active", token_budget);
41
+ }
42
+ this.snapshot = goal;
43
+ return { output: this.formatResponse(), event: this.goalUpdatedEvent() };
44
+ }
45
+ // ─── get_goal ───────────────────────────────────────────────────────────────
46
+ async get() {
47
+ if (this.store) {
48
+ this.snapshot = await this.store.getThreadGoal(this.threadId);
49
+ }
50
+ return { output: this.formatResponse(), event: null };
51
+ }
52
+ // ─── update_goal ────────────────────────────────────────────────────────────
53
+ async update(status) {
54
+ if (this.snapshot === null) {
55
+ return { output: JSON.stringify({ error: "No active goal exists." }), event: null };
56
+ }
57
+ if (status !== "complete" && status !== "blocked") {
58
+ return {
59
+ output: JSON.stringify({ error: `Invalid status "${String(status)}". Must be "complete" or "blocked".` }),
60
+ event: null,
61
+ };
62
+ }
63
+ const goalStatus = status === "complete" ? "Complete" : "Blocked";
64
+ if (this.store) {
65
+ await this.store.updateThreadGoal(this.threadId, { status: goalStatus });
66
+ }
67
+ this.snapshot = { ...this.snapshot, status: goalStatus };
68
+ return { output: this.formatResponse(), event: this.goalUpdatedEvent() };
69
+ }
70
+ // ─── Token accounting ───────────────────────────────────────────────────────
71
+ async recordTokens(count, elapsedSeconds = 0) {
72
+ if (this.snapshot === null)
73
+ return;
74
+ if (this.store) {
75
+ const outcome = await this.store.accountTokens(this.threadId, count, elapsedSeconds);
76
+ if (outcome.kind === "Updated") {
77
+ this.snapshot = outcome.goal;
78
+ return;
79
+ }
80
+ }
81
+ this.snapshot = {
82
+ ...this.snapshot,
83
+ tokens_used: this.snapshot.tokens_used + count,
84
+ time_used_seconds: this.snapshot.time_used_seconds + elapsedSeconds,
85
+ };
86
+ }
87
+ currentSnapshot() {
88
+ return this.snapshot ? { ...this.snapshot } : null;
89
+ }
90
+ // ─── Private helpers ─────────────────────────────────────────────────────────
91
+ formatResponse() {
92
+ if (this.snapshot === null) {
93
+ return JSON.stringify({ goal: null, remaining_tokens: null });
94
+ }
95
+ const remaining_tokens = this.snapshot.token_budget !== undefined
96
+ ? this.snapshot.token_budget - this.snapshot.tokens_used
97
+ : null;
98
+ return JSON.stringify({ goal: this.snapshot, remaining_tokens });
99
+ }
100
+ goalUpdatedEvent() {
101
+ return this.snapshot ? { goal: { ...this.snapshot } } : null;
102
+ }
103
+ }
104
+ //# sourceMappingURL=tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool.js","sourceRoot":"","sources":["../../../../ext/goal/src/tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export type { UserInput } from "./user_input.js";
2
+ export type { RequestUserInputQuestionOption, RequestUserInputQuestion, RequestUserInputArgs, RequestUserInputAnswer, RequestUserInputResponse, RequestUserInputEvent, } from "./request_user_input.js";
3
+ export type { StepStatus, PlanItemArg, UpdatePlanArgs } from "./plan_tool.js";
4
+ export type { ThreadGoalStatus, ThreadGoal, TurnStartedEvent, TurnCompleteEvent, AgentMessageEvent, AgentMessageContentDeltaEvent, ThreadGoalUpdatedEvent, ErrorEvent, EventMsg, Event, Op, } from "./protocol.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../protocol/src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,YAAY,EACV,8BAA8B,EAC9B,wBAAwB,EACxB,oBAAoB,EACpB,sBAAsB,EACtB,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC9E,YAAY,EACV,gBAAgB,EAChB,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,6BAA6B,EAC7B,sBAAsB,EACtB,UAAU,EACV,QAAQ,EACR,KAAK,EACL,EAAE,GACH,MAAM,eAAe,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../protocol/src/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * mirrors codex-rs/protocol/src/plan_tool.rs
3
+ */
4
+ /** mirrors StepStatus enum */
5
+ export type StepStatus = "pending" | "in_progress" | "completed";
6
+ /** mirrors PlanItemArg struct */
7
+ export interface PlanItemArg {
8
+ step: string;
9
+ status: StepStatus;
10
+ }
11
+ /** mirrors UpdatePlanArgs struct */
12
+ export interface UpdatePlanArgs {
13
+ explanation?: string | undefined;
14
+ plan: PlanItemArg[];
15
+ }
16
+ //# sourceMappingURL=plan_tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan_tool.d.ts","sourceRoot":"","sources":["../../../protocol/src/plan_tool.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,8BAA8B;AAC9B,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,aAAa,GAAG,WAAW,CAAC;AAEjE,iCAAiC;AACjC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,CAAC;CACpB;AAED,oCAAoC;AACpC,MAAM,WAAW,cAAc;IAC7B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,IAAI,EAAE,WAAW,EAAE,CAAC;CACrB"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * mirrors codex-rs/protocol/src/plan_tool.rs
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=plan_tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan_tool.js","sourceRoot":"","sources":["../../../protocol/src/plan_tool.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * mirrors codex-rs/protocol/src/protocol.rs
3
+ *
4
+ * Subset: Op + EventMsg variants needed for goal, request_user_input,
5
+ * and conversation (turn lifecycle + streaming text).
6
+ */
7
+ import type { UserInput } from "./user_input.js";
8
+ import type { RequestUserInputEvent, RequestUserInputResponse } from "./request_user_input.js";
9
+ import type { UpdatePlanArgs } from "./plan_tool.js";
10
+ export type ThreadGoalStatus = "Active" | "Paused" | "Blocked" | "UsageLimited" | "BudgetLimited" | "Complete";
11
+ export interface ThreadGoal {
12
+ objective: string;
13
+ status: ThreadGoalStatus;
14
+ token_budget?: number | undefined;
15
+ tokens_used: number;
16
+ time_used_seconds: number;
17
+ }
18
+ export interface TurnStartedEvent {
19
+ turn_id: string;
20
+ }
21
+ export interface TurnCompleteEvent {
22
+ turn_id: string;
23
+ last_agent_message?: string | undefined;
24
+ }
25
+ /** Full assistant text for a completed message */
26
+ export interface AgentMessageEvent {
27
+ message: string;
28
+ }
29
+ /** Streaming text chunk — mirrors AgentMessageContentDeltaEvent */
30
+ export interface AgentMessageContentDeltaEvent {
31
+ turn_id: string;
32
+ item_id: string;
33
+ delta: string;
34
+ }
35
+ export interface ThreadGoalUpdatedEvent {
36
+ turn_id?: string | undefined;
37
+ goal: ThreadGoal;
38
+ }
39
+ export interface ErrorEvent {
40
+ message: string;
41
+ }
42
+ export type EventMsg = {
43
+ type: "TurnStarted";
44
+ event: TurnStartedEvent;
45
+ } | {
46
+ type: "TurnComplete";
47
+ event: TurnCompleteEvent;
48
+ } | {
49
+ type: "AgentMessage";
50
+ event: AgentMessageEvent;
51
+ } | {
52
+ type: "AgentMessageContentDelta";
53
+ event: AgentMessageContentDeltaEvent;
54
+ } | {
55
+ type: "RequestUserInput";
56
+ event: RequestUserInputEvent;
57
+ } | {
58
+ type: "ThreadGoalUpdated";
59
+ event: ThreadGoalUpdatedEvent;
60
+ } | {
61
+ type: "PlanUpdate";
62
+ event: UpdatePlanArgs;
63
+ } | {
64
+ type: "Error";
65
+ event: ErrorEvent;
66
+ };
67
+ /** Wraps EventMsg with the submission_id that originated it — mirrors codex-rs Event */
68
+ export interface Event {
69
+ /** submission_id returned by CodexThread.submit() */
70
+ id: string;
71
+ msg: EventMsg;
72
+ }
73
+ export type Op = {
74
+ type: "UserInput";
75
+ items: UserInput[];
76
+ } | {
77
+ type: "UserInputAnswer";
78
+ /** RequestUserInputEvent.turn_id — identifies which turn to unblock */
79
+ id: string;
80
+ response: RequestUserInputResponse;
81
+ } | {
82
+ type: "Interrupt";
83
+ };
84
+ export type { RequestUserInputEvent, RequestUserInputResponse };
85
+ export type { UpdatePlanArgs } from "./plan_tool.js";
86
+ export type { StepStatus, PlanItemArg } from "./plan_tool.js";
87
+ //# sourceMappingURL=protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../../protocol/src/protocol.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EACV,qBAAqB,EACrB,wBAAwB,EACzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAIrD,MAAM,MAAM,gBAAgB,GACxB,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,cAAc,GACd,eAAe,GACf,UAAU,CAAC;AAEf,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,gBAAgB,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAID,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACzC;AAED,kDAAkD;AAClD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,mEAAmE;AACnE,MAAM,WAAW,6BAA6B;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;CACjB;AAID,MAAM,MAAM,QAAQ,GAChB;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,gBAAgB,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,iBAAiB,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,iBAAiB,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,0BAA0B,CAAC;IAAC,KAAK,EAAE,6BAA6B,CAAA;CAAE,GAC1E;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,KAAK,EAAE,qBAAqB,CAAA;CAAE,GAC1D;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,KAAK,EAAE,sBAAsB,CAAA;CAAE,GAC5D;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,KAAK,EAAE,cAAc,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,CAAC;AAEzC,wFAAwF;AACxF,MAAM,WAAW,KAAK;IACpB,qDAAqD;IACrD,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,QAAQ,CAAC;CACf;AAID,MAAM,MAAM,EAAE,GACV;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,SAAS,EAAE,CAAA;CAAE,GACzC;IACE,IAAI,EAAE,iBAAiB,CAAC;IACxB,uEAAuE;IACvE,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,wBAAwB,CAAC;CACpC,GACD;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,CAAC;AAE1B,YAAY,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,CAAC;AAChE,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * mirrors codex-rs/protocol/src/protocol.rs
3
+ *
4
+ * Subset: Op + EventMsg variants needed for goal, request_user_input,
5
+ * and conversation (turn lifecycle + streaming text).
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../protocol/src/protocol.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,31 @@
1
+ /** mirrors codex-rs/protocol/src/request_user_input.rs */
2
+ export interface RequestUserInputQuestionOption {
3
+ label: string;
4
+ description: string;
5
+ }
6
+ export interface RequestUserInputQuestion {
7
+ id: string;
8
+ header: string;
9
+ question: string;
10
+ /** Injected by normalize_request_user_input_args in spec.rs */
11
+ isOther: boolean;
12
+ isSecret: boolean;
13
+ options?: RequestUserInputQuestionOption[] | undefined;
14
+ }
15
+ export interface RequestUserInputArgs {
16
+ questions: RequestUserInputQuestion[];
17
+ }
18
+ /** Per-question answers: key = question id */
19
+ export interface RequestUserInputAnswer {
20
+ answers: string[];
21
+ }
22
+ export interface RequestUserInputResponse {
23
+ answers: Record<string, RequestUserInputAnswer>;
24
+ }
25
+ /** Emitted by the agent when it calls request_user_input */
26
+ export interface RequestUserInputEvent {
27
+ call_id: string;
28
+ turn_id: string;
29
+ questions: RequestUserInputQuestion[];
30
+ }
31
+ //# sourceMappingURL=request_user_input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request_user_input.d.ts","sourceRoot":"","sources":["../../../protocol/src/request_user_input.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAE1D,MAAM,WAAW,8BAA8B;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,wBAAwB;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,+DAA+D;IAC/D,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,8BAA8B,EAAE,GAAG,SAAS,CAAC;CACxD;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,wBAAwB,EAAE,CAAC;CACvC;AAED,8CAA8C;AAC9C,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;CACjD;AAED,4DAA4D;AAC5D,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,wBAAwB,EAAE,CAAC;CACvC"}
@@ -0,0 +1,3 @@
1
+ /** mirrors codex-rs/protocol/src/request_user_input.rs */
2
+ export {};
3
+ //# sourceMappingURL=request_user_input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request_user_input.js","sourceRoot":"","sources":["../../../protocol/src/request_user_input.ts"],"names":[],"mappings":"AAAA,0DAA0D"}
@@ -0,0 +1,9 @@
1
+ /** mirrors codex-rs/protocol/src/user_input.rs */
2
+ export type UserInput = {
3
+ type: "text";
4
+ text: string;
5
+ } | {
6
+ type: "image";
7
+ image_url: string;
8
+ };
9
+ //# sourceMappingURL=user_input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user_input.d.ts","sourceRoot":"","sources":["../../../protocol/src/user_input.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAElD,MAAM,MAAM,SAAS,GACjB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** mirrors codex-rs/protocol/src/user_input.rs */
2
+ export {};
3
+ //# sourceMappingURL=user_input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user_input.js","sourceRoot":"","sources":["../../../protocol/src/user_input.ts"],"names":[],"mappings":"AAAA,kDAAkD"}
@@ -0,0 +1,3 @@
1
+ export type { GoalBackend, GoalUpdate, GoalAccountingOutcome } from "./runtime/goals.js";
2
+ export { GoalStore, InMemoryGoalBackend } from "./runtime/goals.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../state/src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AACzF,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { GoalStore, InMemoryGoalBackend } from "./runtime/goals.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../state/src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * mirrors codex-rs/state/src/runtime/goals.rs
3
+ *
4
+ * GoalBackend — injectable storage primitive for goal state.
5
+ *
6
+ * Implement this to persist goals to SQLite, IndexedDB, OPFS, etc.
7
+ * The built-in InMemoryGoalBackend works in all environments without I/O.
8
+ *
9
+ * GoalStore wraps a GoalBackend and adds accounting (token budget tracking).
10
+ */
11
+ import type { ThreadGoal, ThreadGoalStatus } from "../../../protocol/src/protocol.js";
12
+ export interface GoalBackend {
13
+ getThreadGoal(threadId: string): Promise<ThreadGoal | null>;
14
+ saveThreadGoal(threadId: string, goal: ThreadGoal): Promise<void>;
15
+ deleteThreadGoal(threadId: string): Promise<void>;
16
+ }
17
+ export declare class InMemoryGoalBackend implements GoalBackend {
18
+ private readonly store;
19
+ getThreadGoal(threadId: string): Promise<ThreadGoal | null>;
20
+ saveThreadGoal(threadId: string, goal: ThreadGoal): Promise<void>;
21
+ deleteThreadGoal(threadId: string): Promise<void>;
22
+ }
23
+ export interface GoalUpdate {
24
+ status?: ThreadGoalStatus | undefined;
25
+ token_budget?: number | null | undefined;
26
+ }
27
+ export type GoalAccountingOutcome = {
28
+ kind: "Unchanged";
29
+ goal: ThreadGoal | null;
30
+ } | {
31
+ kind: "Updated";
32
+ goal: ThreadGoal;
33
+ };
34
+ export declare class GoalStore {
35
+ private readonly backend;
36
+ constructor(backend?: GoalBackend);
37
+ getThreadGoal(threadId: string): Promise<ThreadGoal | null>;
38
+ /** Create or replace a thread goal */
39
+ replaceThreadGoal(threadId: string, objective: string, status: ThreadGoalStatus, token_budget?: number): Promise<ThreadGoal>;
40
+ /** Apply a partial update to an existing goal */
41
+ updateThreadGoal(threadId: string, update: GoalUpdate): Promise<GoalAccountingOutcome>;
42
+ /**
43
+ * Record token and time usage against the active goal budget.
44
+ * Mirrors the accounting path in GoalStore::account_tokens().
45
+ */
46
+ accountTokens(threadId: string, tokens: number, elapsedSeconds: number): Promise<GoalAccountingOutcome>;
47
+ }
48
+ //# sourceMappingURL=goals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"goals.d.ts","sourceRoot":"","sources":["../../../../state/src/runtime/goals.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAItF,MAAM,WAAW,WAAW;IAC1B,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IAC5D,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnD;AAID,qBAAa,mBAAoB,YAAW,WAAW;IACrD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiC;IAEjD,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAI3D,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjE,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGxD;AAID,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;IACtC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CAC1C;AAID,MAAM,MAAM,qBAAqB,GAC7B;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC;AAI1C,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAc;gBAE1B,OAAO,GAAE,WAAuC;IAItD,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAIjE,sCAAsC;IAChC,iBAAiB,CACrB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,gBAAgB,EACxB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,UAAU,CAAC;IAYtB,iDAAiD;IAC3C,gBAAgB,CACpB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC,qBAAqB,CAAC;IAkBjC;;;OAGG;IACG,aAAa,CACjB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,qBAAqB,CAAC;CA6BlC"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * mirrors codex-rs/state/src/runtime/goals.rs
3
+ *
4
+ * GoalBackend — injectable storage primitive for goal state.
5
+ *
6
+ * Implement this to persist goals to SQLite, IndexedDB, OPFS, etc.
7
+ * The built-in InMemoryGoalBackend works in all environments without I/O.
8
+ *
9
+ * GoalStore wraps a GoalBackend and adds accounting (token budget tracking).
10
+ */
11
+ // ─── InMemoryGoalBackend ───────────────────────────────────────────────────────
12
+ export class InMemoryGoalBackend {
13
+ store = new Map();
14
+ async getThreadGoal(threadId) {
15
+ return this.store.get(threadId) ?? null;
16
+ }
17
+ async saveThreadGoal(threadId, goal) {
18
+ this.store.set(threadId, { ...goal });
19
+ }
20
+ async deleteThreadGoal(threadId) {
21
+ this.store.delete(threadId);
22
+ }
23
+ }
24
+ // ─── GoalStore ────────────────────────────────────────────────────────────────
25
+ export class GoalStore {
26
+ backend;
27
+ constructor(backend = new InMemoryGoalBackend()) {
28
+ this.backend = backend;
29
+ }
30
+ async getThreadGoal(threadId) {
31
+ return this.backend.getThreadGoal(threadId);
32
+ }
33
+ /** Create or replace a thread goal */
34
+ async replaceThreadGoal(threadId, objective, status, token_budget) {
35
+ const goal = {
36
+ objective,
37
+ status,
38
+ ...(token_budget !== undefined ? { token_budget } : {}),
39
+ tokens_used: 0,
40
+ time_used_seconds: 0,
41
+ };
42
+ await this.backend.saveThreadGoal(threadId, goal);
43
+ return goal;
44
+ }
45
+ /** Apply a partial update to an existing goal */
46
+ async updateThreadGoal(threadId, update) {
47
+ const existing = await this.backend.getThreadGoal(threadId);
48
+ if (existing === null) {
49
+ return { kind: "Unchanged", goal: null };
50
+ }
51
+ const updated = {
52
+ ...existing,
53
+ ...(update.status !== undefined ? { status: update.status } : {}),
54
+ ...(update.token_budget !== undefined
55
+ ? update.token_budget === null
56
+ ? {}
57
+ : { token_budget: update.token_budget }
58
+ : {}),
59
+ };
60
+ await this.backend.saveThreadGoal(threadId, updated);
61
+ return { kind: "Updated", goal: updated };
62
+ }
63
+ /**
64
+ * Record token and time usage against the active goal budget.
65
+ * Mirrors the accounting path in GoalStore::account_tokens().
66
+ */
67
+ async accountTokens(threadId, tokens, elapsedSeconds) {
68
+ const existing = await this.backend.getThreadGoal(threadId);
69
+ if (existing === null || existing.status !== "Active") {
70
+ return { kind: "Unchanged", goal: existing };
71
+ }
72
+ const tokens_used = existing.tokens_used + tokens;
73
+ const time_used_seconds = existing.time_used_seconds + elapsedSeconds;
74
+ let status = existing.status;
75
+ // Budget exhaustion → UsageLimited
76
+ if (existing.token_budget !== undefined &&
77
+ tokens_used >= existing.token_budget) {
78
+ status = "UsageLimited";
79
+ }
80
+ const updated = {
81
+ ...existing,
82
+ tokens_used,
83
+ time_used_seconds,
84
+ status,
85
+ };
86
+ await this.backend.saveThreadGoal(threadId, updated);
87
+ const changed = status !== existing.status || tokens_used !== existing.tokens_used;
88
+ return changed
89
+ ? { kind: "Updated", goal: updated }
90
+ : { kind: "Unchanged", goal: updated };
91
+ }
92
+ }
93
+ //# sourceMappingURL=goals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"goals.js","sourceRoot":"","sources":["../../../../state/src/runtime/goals.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * mirrors codex-rs/thread-store/src/in_memory.rs
3
+ *
4
+ * InMemoryThreadStore — reference implementation that works in both
5
+ * browser and Node.js without any I/O. Suitable for tests and ephemeral use.
6
+ *
7
+ * For durable storage supply a custom IoBackend to LocalThreadStore instead.
8
+ */
9
+ import type { ThreadStore } from "./store.js";
10
+ import type { AppendThreadItemsParams, CreateThreadParams, LoadThreadHistoryParams, ReadThreadParams, StoredThread, StoredThreadHistory, UpdateThreadMetadataParams } from "./types.js";
11
+ export declare class InMemoryThreadStore implements ThreadStore {
12
+ private readonly threads;
13
+ createThread(params: CreateThreadParams): Promise<void>;
14
+ appendItems(params: AppendThreadItemsParams): Promise<void>;
15
+ loadHistory(params: LoadThreadHistoryParams): Promise<StoredThreadHistory>;
16
+ readThread(params: ReadThreadParams): Promise<StoredThread | null>;
17
+ updateThreadMetadata(params: UpdateThreadMetadataParams): Promise<void>;
18
+ listThreadIds(): Promise<string[]>;
19
+ }
20
+ //# sourceMappingURL=in_memory.d.ts.map