freecodego 0.1.6-alpha.2.3 → 0.1.7-alpha.2.1

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.
@@ -0,0 +1,5 @@
1
+ // Generated by scripts/build-freecodego-bundle.mjs — do not edit.
2
+ // The Loader entry `freecodego-harness-plugin` loads this module and takes its
3
+ // default export as the plugin, so the class is re-exported from the bundle
4
+ // rather than bundled a second time.
5
+ export { FreeCodeGoHarnessPlugin as default } from './bootstrap.js'
package/dist/schedule.js CHANGED
@@ -14522,6 +14522,24 @@ config(en_default());
14522
14522
  import { SessionLogOffset } from "@deepseek-ai/dsh-session";
14523
14523
  import { createUserMessage } from "@deepseek-ai/dsh-llm";
14524
14524
  import { defineTool } from "@deepseek-ai/dsh-tools";
14525
+ var SchedulePersistenceError = class extends Error {
14526
+ /**
14527
+ * Construct a contained persistence failure.
14528
+ * @param cause - Rejection returned by the shared barrier, when present.
14529
+ */
14530
+ constructor(cause) {
14531
+ super("Schedule persistence did not complete.", cause === void 0 ? void 0 : { cause });
14532
+ this.name = "SchedulePersistenceError";
14533
+ }
14534
+ };
14535
+ async function flushSchedulePersistence(ctx, session) {
14536
+ try {
14537
+ if (!await ctx.sessions.flush(session)) throw new SchedulePersistenceError();
14538
+ } catch (error51) {
14539
+ if (error51 instanceof SchedulePersistenceError) throw error51;
14540
+ throw new SchedulePersistenceError(error51);
14541
+ }
14542
+ }
14525
14543
  var SCHEDULE_CHANGE_VERSION = 1;
14526
14544
  var MIN_EVERY_INTERVAL_SECONDS = 300;
14527
14545
  var MIN_FOUR_DIGIT_YEAR_MS = Date.parse("0001-01-01T00:00:00.000Z");
@@ -15073,24 +15091,6 @@ var scheduleProjectionDefinition = {
15073
15091
  },
15074
15092
  stateVersion: 2
15075
15093
  };
15076
- var SchedulePersistenceError = class extends Error {
15077
- /**
15078
- * Construct a contained persistence failure.
15079
- * @param cause - Rejection returned by the shared barrier, when present.
15080
- */
15081
- constructor(cause) {
15082
- super("Schedule persistence did not complete.", cause === void 0 ? void 0 : { cause });
15083
- this.name = "SchedulePersistenceError";
15084
- }
15085
- };
15086
- async function flushSchedulePersistence(ctx, session) {
15087
- try {
15088
- if (!await ctx.sessions.flush(session)) throw new SchedulePersistenceError();
15089
- } catch (error51) {
15090
- if (error51 instanceof SchedulePersistenceError) throw error51;
15091
- throw new SchedulePersistenceError(error51);
15092
- }
15093
- }
15094
15094
  var tails = /* @__PURE__ */ new WeakMap();
15095
15095
  async function runScheduleTransaction(agent, operation) {
15096
15096
  const run = (tails.get(agent) ?? Promise.resolve()).then(operation);
@@ -15159,6 +15159,15 @@ var ScheduleRuntime = class {
15159
15159
  start() {
15160
15160
  this.requestDrive();
15161
15161
  }
15162
+ /**
15163
+ * Active records of the exact runtime suffix, folded from the live log the
15164
+ * way every drive folds it: the owner answers for what its timers can fire.
15165
+ * @returns the active records in create order, or nothing while this runtime is stopping, faulted, or reading a corrupt stream.
15166
+ */
15167
+ activeRecords() {
15168
+ if (this.stopping || this.faulted) return void 0;
15169
+ return this.readFolded()?.active;
15170
+ }
15162
15171
  /** Recompute the live projection after a committed mutation or idle transition. */
15163
15172
  requestDrive() {
15164
15173
  if (this.stopping || this.faulted) return;
@@ -15299,10 +15308,7 @@ var ScheduleRuntime = class {
15299
15308
  type: "text",
15300
15309
  text: decision.kind === "one-shot" ? renderReminderFraming(decision.record) : renderEveryReminderBatchFraming(decision.reminders)
15301
15310
  }],
15302
- source: {
15303
- kind: "plugin",
15304
- plugin: "schedule"
15305
- }
15311
+ source: { kind: "schedule" }
15306
15312
  });
15307
15313
  this.agent.followup(message);
15308
15314
  } catch (error51) {
@@ -15790,6 +15796,49 @@ function apply(ctx) {
15790
15796
  });
15791
15797
  const runtimes = /* @__PURE__ */ new Map();
15792
15798
  let stopping = false;
15799
+ const activeReminders = (sessionId) => {
15800
+ const agent = ctx.agents.get(sessionId);
15801
+ const active = agent === void 0 ? void 0 : runtimes.get(agent)?.runtime.activeRecords();
15802
+ return agent === void 0 || active === void 0 ? void 0 : {
15803
+ agent,
15804
+ active
15805
+ };
15806
+ };
15807
+ ctx.effect(() => {
15808
+ const stopActivity = ctx.on("workspace/session-activity", async ({ sessionId }, next) => {
15809
+ const reminders = activeReminders(sessionId);
15810
+ const rest = await next();
15811
+ if (reminders === void 0 || reminders.active.length === 0) return rest;
15812
+ return [{
15813
+ kind: "schedule",
15814
+ items: reminders.active.map((record2) => ({
15815
+ id: record2.id,
15816
+ label: record2.prompt
15817
+ }))
15818
+ }, ...rest];
15819
+ });
15820
+ const stopStop = ctx.on("workspace/session-stop", async ({ sessionId }) => {
15821
+ const owned = activeReminders(sessionId);
15822
+ if (owned === void 0) return;
15823
+ const { agent } = owned;
15824
+ await runScheduleTransaction(agent, async () => {
15825
+ await flushSchedulePersistence(ctx, agent.session);
15826
+ const active = activeReminders(sessionId)?.active ?? [];
15827
+ if (active.length === 0) return;
15828
+ for (const record2 of active) agent.session.append("schedule/change", {
15829
+ version: 1,
15830
+ operation: "delete",
15831
+ id: record2.id
15832
+ });
15833
+ runtimes.get(agent)?.runtime.requestDrive();
15834
+ await flushSchedulePersistence(ctx, agent.session);
15835
+ });
15836
+ });
15837
+ return () => {
15838
+ stopStop();
15839
+ stopActivity();
15840
+ };
15841
+ }, "schedule.archiveAdmission()");
15793
15842
  ctx.effect(() => {
15794
15843
  const stopCreated = ctx.on("agent/created", ({ agent }) => {
15795
15844
  if (stopping || runtimes.has(agent) || !ctx.agents.roots().includes(agent)) return;
@@ -15808,18 +15857,21 @@ function apply(ctx) {
15808
15857
  try {
15809
15858
  await runtime.dispose();
15810
15859
  } finally {
15811
- if (runtimes.get(agent) === cleanup) runtimes.delete(agent);
15860
+ if (runtimes.get(agent)?.cleanup === cleanup) runtimes.delete(agent);
15812
15861
  }
15813
15862
  };
15814
15863
  }, "schedule.runtime()");
15815
- runtimes.set(agent, cleanup);
15864
+ runtimes.set(agent, {
15865
+ runtime,
15866
+ cleanup
15867
+ });
15816
15868
  });
15817
15869
  return async () => {
15818
15870
  stopping = true;
15819
15871
  stopCreated();
15820
- const cleanups = [...runtimes.values()];
15872
+ const owned = [...runtimes.values()];
15821
15873
  runtimes.clear();
15822
- await Promise.allSettled(cleanups.map((cleanup) => Promise.resolve(cleanup())));
15874
+ await Promise.allSettled(owned.map(({ cleanup }) => Promise.resolve(cleanup())));
15823
15875
  };
15824
15876
  }, "schedule.lifecycle()");
15825
15877
  }
@@ -14878,7 +14878,7 @@ var TeamRoster = class {
14878
14878
  id: root.id,
14879
14879
  name: "lead",
14880
14880
  role: "lead",
14881
- status: root.status,
14881
+ status: availability(root),
14882
14882
  ...root.options.model === void 0 ? {} : { model: root.options.model },
14883
14883
  diagnostics: []
14884
14884
  }];
@@ -14889,7 +14889,7 @@ var TeamRoster = class {
14889
14889
  id: member.id,
14890
14890
  name: member.name,
14891
14891
  role: "teammate",
14892
- status: member.phase === "failed" ? "failed" : member.phase === "provisioning" ? "provisioning" : live?.status ?? "inactive",
14892
+ status: member.phase === "failed" ? "failed" : member.phase === "provisioning" ? "provisioning" : availability(live),
14893
14893
  description: member.description,
14894
14894
  provider: member.provider,
14895
14895
  context: member.context,
@@ -14946,7 +14946,7 @@ var TeamRoster = class {
14946
14946
  if (target.id === membership.root.id) throw new TeamError("the Team Lead cannot interrupt itself", "TEAM_INVALID_TARGET");
14947
14947
  const live = this.ctx.agents.get(target.id);
14948
14948
  if (live === void 0) return { previousStatus: "inactive" };
14949
- const previousStatus = live.status;
14949
+ const previousStatus = availability(live);
14950
14950
  this.ctx.subagents.interrupt(target.id, {
14951
14951
  kind: "ancestor",
14952
14952
  agent: caller
@@ -15128,7 +15128,7 @@ var TeamRoster = class {
15128
15128
  id: member.id,
15129
15129
  name: member.name,
15130
15130
  role: "teammate",
15131
- status: live?.status ?? "inactive",
15131
+ status: availability(live),
15132
15132
  description: member.description,
15133
15133
  provider: member.provider,
15134
15134
  context: member.context,
@@ -15160,6 +15160,9 @@ var TeamRoster = class {
15160
15160
  return foldSubagentDescriptor(agent.session.snapshotEvents(agent.session.inheritedEventCount)) !== void 0;
15161
15161
  }
15162
15162
  };
15163
+ function availability(agent) {
15164
+ return agent?.status === "running" ? "running" : "inactive";
15165
+ }
15163
15166
  var TeamMailbox = class {
15164
15167
  ctx;
15165
15168
  journal;
@@ -15500,13 +15503,11 @@ var contentBlockSchema = external_exports.lazy(() => external_exports.union([
15500
15503
  name: external_exports.string(),
15501
15504
  arguments: external_exports.string()
15502
15505
  }).strict(),
15503
- external_exports.object({
15504
- type: external_exports.literal("tool-result"),
15505
- toolCallId: external_exports.string().min(1),
15506
- content: external_exports.array(contentBlockSchema),
15507
- isError: external_exports.boolean().optional()
15508
- }).strict(),
15509
- external_exports.object({ type: external_exports.string().min(1) }).loose().refine((block) => !coreContentBlockTypes.has(block.type), { message: "known content block types must match their declared fields" })
15506
+ external_exports.custom((value) => {
15507
+ if (typeof value !== "object" || value === null || Array.isArray(value)) return false;
15508
+ const type = value.type;
15509
+ return typeof type === "string" && type.length > 0 && !coreContentBlockTypes.has(type);
15510
+ })
15510
15511
  ]));
15511
15512
  var teamMemberSnapshotSchema = external_exports.object({
15512
15513
  id: sessionIdSchema,
@@ -15691,7 +15692,7 @@ function applyCurrentTeamEvent(state, event) {
15691
15692
  }
15692
15693
  var teamProjectionDefinition = {
15693
15694
  key: "agentTeam",
15694
- stateVersion: 3,
15695
+ stateVersion: 4,
15695
15696
  stateSchema: teamProjectionEntrySchema,
15696
15697
  init: (header) => emptyTeamState(header.id),
15697
15698
  apply: (state, event) => {
@@ -16005,14 +16006,10 @@ var TeamService = (() => {
16005
16006
  let _classSuper = TypertRemoteService;
16006
16007
  let _instanceExtraInitializers = [];
16007
16008
  let _remoteView_decorators;
16008
- let _remoteCreateTask_decorators;
16009
- let _remoteUpdateTask_decorators;
16010
16009
  return class TeamService extends _classSuper {
16011
16010
  static {
16012
16011
  const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
16013
16012
  _remoteView_decorators = [Remote("view")];
16014
- _remoteCreateTask_decorators = [Remote("createTask")];
16015
- _remoteUpdateTask_decorators = [Remote("updateTask")];
16016
16013
  __esDecorate(this, null, _remoteView_decorators, {
16017
16014
  kind: "method",
16018
16015
  name: "remoteView",
@@ -16024,28 +16021,6 @@ var TeamService = (() => {
16024
16021
  },
16025
16022
  metadata: _metadata
16026
16023
  }, null, _instanceExtraInitializers);
16027
- __esDecorate(this, null, _remoteCreateTask_decorators, {
16028
- kind: "method",
16029
- name: "remoteCreateTask",
16030
- static: false,
16031
- private: false,
16032
- access: {
16033
- has: (obj) => "remoteCreateTask" in obj,
16034
- get: (obj) => obj.remoteCreateTask
16035
- },
16036
- metadata: _metadata
16037
- }, null, _instanceExtraInitializers);
16038
- __esDecorate(this, null, _remoteUpdateTask_decorators, {
16039
- kind: "method",
16040
- name: "remoteUpdateTask",
16041
- static: false,
16042
- private: false,
16043
- access: {
16044
- has: (obj) => "remoteUpdateTask" in obj,
16045
- get: (obj) => obj.remoteUpdateTask
16046
- },
16047
- metadata: _metadata
16048
- }, null, _instanceExtraInitializers);
16049
16024
  if (_metadata) Object.defineProperty(this, Symbol.metadata, {
16050
16025
  enumerable: true,
16051
16026
  configurable: true,
@@ -16222,42 +16197,6 @@ var TeamService = (() => {
16222
16197
  tasks: this.listTasks(agent)
16223
16198
  };
16224
16199
  }
16225
- /**
16226
- * Create one shared task through the generated Remote API.
16227
- * @param agent - exact live Team member creating the task.
16228
- * @param request - task text, blockers, and advisory write scopes.
16229
- * @returns the revision-one task or a typed Team rejection.
16230
- */
16231
- remoteCreateTask(agent, request) {
16232
- return this.taskMutationResult(this.createTask(agent, request));
16233
- }
16234
- /**
16235
- * Apply one task mutation and preserve Team rejections as business results.
16236
- * @param agent - exact live Team member authorizing the mutation.
16237
- * @param request - task identity, expected revision, action, and action fields.
16238
- * @returns the committed task or a typed Team rejection.
16239
- */
16240
- remoteUpdateTask(agent, request) {
16241
- return this.taskMutationResult(this.updateTask(agent, request));
16242
- }
16243
- /** Preserve Team task rejections while allowing unexpected failures to reject the Remote call. */
16244
- async taskMutationResult(operation) {
16245
- try {
16246
- return {
16247
- ok: true,
16248
- value: await operation
16249
- };
16250
- } catch (error51) {
16251
- if (!(error51 instanceof TeamError)) throw error51;
16252
- return {
16253
- ok: false,
16254
- error: {
16255
- code: error51.code === "TEAM_TASK_STALE_REVISION" ? "team-task-conflict" : "team-rejected",
16256
- message: error51.message
16257
- }
16258
- };
16259
- }
16260
- }
16261
16200
  /** Queue one contained recovery pass after publication has unwound. */
16262
16201
  scheduleRecovery(agent) {
16263
16202
  queueMicrotask(() => {
@@ -16309,18 +16248,14 @@ The Team Lead and all teammates share the same working directory and filesystem.
16309
16248
 
16310
16249
  Prefer read/edit/write for file changes. If a file operation returns FS_STALE_VERSION, read the current file, rebase your intended change onto the new content, and retry. Bash, formatters, code generators, and scripts are not fully protected by the filesystem version guard; coordinate them explicitly and have the Lead review the final diff and run tests.
16311
16250
 
16312
- send_message steers a running target at its nearest step boundary, starts an idle target, and cold-resumes an inactive teammate. A delivered peer item starts with its stable message id and sender name. A successful send is already durable even when its result says queued; do not resend it. Shared-task workflow is list, get, claim with the current revision, perform the work, then complete. Task readiness never starts an owner. Before wait_agent, use list_agents and make sure another required member is running or provisioning; use send_message first when the required member is inactive. wait_agent observes only changes after that call starts, never wakes a member, and returns noProgress immediately when no other member can produce a change. Re-list after wakeup or timeout. The Lead must wait for required teammates before giving the final answer.`;
16251
+ Use the target returned by spawn_teammate or list_agents for send_message and interrupt_agent, or as owner when assigning or filtering shared tasks. send_message steers a running target at its nearest step boundary and starts or resumes an inactive target. inactive means no turn is executing; it does not describe task completion, success, failure, or waiting for other agents. provisioning means member creation is in progress; failed means member creation failed. A delivered peer item starts with its stable message id and sender name. A successful send is already durable even when its result says queued; do not resend it. Shared-task workflow is list, get, claim with the current revision, perform the work, then complete. Task readiness never starts an owner. Before wait_agent, use list_agents and make sure another required member is running or provisioning; use send_message first when the required member is inactive. wait_agent observes only changes after that call starts, never wakes a member, and returns noProgress immediately when no other member can produce a change. Re-list after wakeup or timeout. The Lead must wait for required teammates before giving the final answer.`;
16313
16252
  var ACTIVE_WAIT_STATUSES = /* @__PURE__ */ new Set(["running", "provisioning"]);
16314
16253
  var NO_ACTIVE_PEER_MESSAGE = "No other Team member is running or provisioning. wait_agent cannot make progress or wake inactive teammates. Re-list with list_agents and team_task_list, then use send_message to wake each required inactive teammate before waiting again.";
16315
16254
  var MEMBER_VIEW_SCHEMA = {
16316
16255
  type: "object",
16317
16256
  additionalProperties: false,
16318
16257
  properties: {
16319
- id: {
16320
- type: "string",
16321
- required: true
16322
- },
16323
- name: {
16258
+ target: {
16324
16259
  type: "string",
16325
16260
  required: true
16326
16261
  },
@@ -16334,7 +16269,6 @@ var MEMBER_VIEW_SCHEMA = {
16334
16269
  required: true,
16335
16270
  enum: [
16336
16271
  "running",
16337
- "idle",
16338
16272
  "inactive",
16339
16273
  "provisioning",
16340
16274
  "failed"
@@ -16354,6 +16288,13 @@ var MEMBER_VIEW_SCHEMA = {
16354
16288
  }
16355
16289
  }
16356
16290
  };
16291
+ function modelMember(member) {
16292
+ const { id: _id, name: name2, ...details } = member;
16293
+ return {
16294
+ target: name2,
16295
+ ...details
16296
+ };
16297
+ }
16357
16298
  var TASK_VIEW_SCHEMA = {
16358
16299
  type: "object",
16359
16300
  additionalProperties: false,
@@ -16464,11 +16405,7 @@ var INTERRUPT_VALUE_SCHEMA = {
16464
16405
  properties: { previousStatus: {
16465
16406
  type: "string",
16466
16407
  required: true,
16467
- enum: [
16468
- "running",
16469
- "idle",
16470
- "inactive"
16471
- ]
16408
+ enum: ["running", "inactive"]
16472
16409
  } }
16473
16410
  };
16474
16411
  var TASK_LIST_VALUE_SCHEMA = {
@@ -16537,13 +16474,17 @@ function install(agent, ctx, config2) {
16537
16474
  async execute(args, exec) {
16538
16475
  const agent2 = callingAgent(exec.agent, "spawn_teammate");
16539
16476
  const context = args.context ?? "fresh";
16540
- return await ctx.agentTeams.spawnTeammate(agent2, {
16477
+ return { member: modelMember((await ctx.agentTeams.spawnTeammate(agent2, {
16541
16478
  name: args.name,
16542
16479
  description: args.description,
16543
16480
  prompt: [{
16544
16481
  type: "text",
16545
16482
  text: `<system-reminder>
16546
16483
  You are teammate "${args.name.trim()}".
16484
+ Your Team Lead is named "lead".
16485
+ Use list_agents({}) to find your teammates and their names.
16486
+ To message your Team Lead, use send_message({ target: "lead", message: "..." }).
16487
+ To message another teammate, use send_message({ target: "<teammate name>", message: "..." }).
16547
16488
  </system-reminder>
16548
16489
 
16549
16490
  `
@@ -16554,17 +16495,17 @@ You are teammate "${args.name.trim()}".
16554
16495
  context,
16555
16496
  provider: context === "fork" ? config2.forkProvider : config2.freshProvider,
16556
16497
  signal: exec.signal
16557
- });
16498
+ })).member) };
16558
16499
  }
16559
16500
  })));
16560
16501
  register(scoped.tools.register(defineTool({
16561
16502
  name: "send_message",
16562
- description: "Send one durable message to another Team member. A running target receives it at the nearest step boundary; an idle target starts a turn; an inactive teammate cold-resumes.",
16503
+ description: "Send one durable message to another Team member. A running target receives it at the nearest step boundary; an inactive target starts or resumes a turn.",
16563
16504
  parameters: {
16564
16505
  target: {
16565
16506
  type: "string",
16566
16507
  required: true,
16567
- description: "Team member name, or lead."
16508
+ description: "Member target returned by spawn_teammate or list_agents, including lead."
16568
16509
  },
16569
16510
  message: {
16570
16511
  type: "string",
@@ -16586,11 +16527,11 @@ You are teammate "${args.name.trim()}".
16586
16527
  })));
16587
16528
  register(scoped.tools.register(defineTool({
16588
16529
  name: "list_agents",
16589
- description: "List the Lead and every durable teammate with current runtime status.",
16530
+ description: "List the Lead and every durable teammate with an addressable target and current availability. inactive means no turn is executing, not a task result. provisioning and failed describe member creation.",
16590
16531
  parameters: {},
16591
16532
  output: jsonOutput(MEMBER_LIST_VALUE_SCHEMA),
16592
- async execute(_args, exec) {
16593
- return Promise.resolve(ctx.agentTeams.listMembers(callingAgent(exec.agent, "list_agents")));
16533
+ execute(_args, exec) {
16534
+ return Promise.resolve(ctx.agentTeams.listMembers(callingAgent(exec.agent, "list_agents")).map(modelMember));
16594
16535
  }
16595
16536
  })));
16596
16537
  register(scoped.tools.register(defineTool({
@@ -16621,10 +16562,10 @@ You are teammate "${args.name.trim()}".
16621
16562
  parameters: { target: {
16622
16563
  type: "string",
16623
16564
  required: true,
16624
- description: "Teammate name."
16565
+ description: "Teammate target returned by spawn_teammate or list_agents."
16625
16566
  } },
16626
16567
  output: jsonOutput(INTERRUPT_VALUE_SCHEMA),
16627
- async execute(args, exec) {
16568
+ execute(args, exec) {
16628
16569
  return Promise.resolve(ctx.agentTeams.interrupt(callingAgent(exec.agent, "interrupt_agent"), args.target));
16629
16570
  }
16630
16571
  })));
@@ -16678,7 +16619,7 @@ You are teammate "${args.name.trim()}".
16678
16619
  },
16679
16620
  owner: {
16680
16621
  type: "string",
16681
- description: "Optional member-name filter; use unowned for tasks without an owner."
16622
+ description: "Optional member target from spawn_teammate or list_agents, matching ownerName; use unowned for tasks without an owner."
16682
16623
  },
16683
16624
  ready: {
16684
16625
  type: "boolean",
@@ -16769,7 +16710,7 @@ You are teammate "${args.name.trim()}".
16769
16710
  },
16770
16711
  owner: {
16771
16712
  type: "string",
16772
- description: "Member name for Lead-only reassign; omit to unassign."
16713
+ description: "Member target from spawn_teammate or list_agents for Lead-only reassign; omit to unassign."
16773
16714
  }
16774
16715
  },
16775
16716
  output: jsonOutput(TASK_VIEW_SCHEMA),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "freecodego",
3
- "version": "0.1.6-alpha.2.3",
3
+ "version": "0.1.7-alpha.2.1",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -18,13 +18,14 @@
18
18
  ],
19
19
  "engines": {
20
20
  "node": "^22.19.0 || >=24.0.0",
21
- "dsh": ">=0.1.6-alpha.2"
21
+ "dsh": ">=0.1.7-alpha.2"
22
22
  },
23
23
  "type": "module",
24
24
  "main": "./dist/bootstrap.js",
25
25
  "exports": {
26
26
  ".": "./dist/bootstrap.js",
27
27
  "./client": "./dist/client.cjs",
28
+ "./harness-plugin": "./dist/harness-plugin.js",
28
29
  "./session-events": "./dist/session-events.js",
29
30
  "./agent-team": "./dist/agent-team.js",
30
31
  "./tool-agent-team": "./dist/tool-agent-team.js",
@@ -35,11 +36,11 @@
35
36
  },
36
37
  "dsh": {
37
38
  "bundle": {
38
- "patch": "./cordis.patch.yml"
39
- },
40
- "bootstrap": {
41
- "module": "./dist/bootstrap.js",
42
- "export": "bootstrapFreeCodeGoHarness"
39
+ "patch": [
40
+ "./cordis.patch.yml",
41
+ "./presets/freecodego.patch.yml",
42
+ "./presets/augmentcode.patch.yml"
43
+ ]
43
44
  },
44
45
  "client": {
45
46
  "inject": [
@@ -54,12 +55,13 @@
54
55
  }
55
56
  },
56
57
  "freecodego": {
57
- "harnessBaseline": "0.1.6-alpha.2"
58
+ "harnessBaseline": "0.1.7-alpha.2"
58
59
  },
59
60
  "license": "AGPL-3.0-only",
60
61
  "files": [
61
62
  "dist/bootstrap.js",
62
63
  "dist/client.cjs",
64
+ "dist/harness-plugin.js",
63
65
  "dist/session-events.js",
64
66
  "dist/agent-team.js",
65
67
  "dist/tool-agent-team.js",
@@ -68,6 +70,7 @@
68
70
  "dist/workers/*.js",
69
71
  "dist/assets/**/*",
70
72
  "cordis.patch.yml",
73
+ "presets/*.patch.yml",
71
74
  "README.md",
72
75
  "LICENSE"
73
76
  ],
@@ -80,43 +83,73 @@
80
83
  "zod": "^4.4.3"
81
84
  },
82
85
  "devDependencies": {
83
- "@deepseek-ai/dsh-freecodego-agent-engine-router": "^0.1.6-alpha.2",
84
- "@deepseek-ai/dsh-freecodego-harness-plugin": "^0.1.6-alpha.2"
86
+ "@deepseek-ai/dsh-freecodego-agent-engine-router": "^0.1.7-alpha.2",
87
+ "@deepseek-ai/dsh-freecodego-harness-plugin": "^0.1.7-alpha.2"
85
88
  },
86
89
  "peerDependencies": {
87
- "@deepseek-ai/cordis": "*",
88
- "@deepseek-ai/cordis-plugin-loader": "*",
89
- "@deepseek-ai/dsh-agent": "*",
90
- "@deepseek-ai/dsh-agent-loop": "*",
91
- "@deepseek-ai/dsh-api-remotes": "*",
92
- "@deepseek-ai/dsh-atomic-write": "*",
93
- "@deepseek-ai/dsh-attachment": "*",
94
- "@deepseek-ai/dsh-brand": "*",
95
- "@deepseek-ai/dsh-client-locale": "*",
96
- "@deepseek-ai/dsh-client-ui-conversation": "*",
97
- "@deepseek-ai/dsh-client-ui-primitives": "*",
98
- "@deepseek-ai/dsh-client-ui-renderer": "*",
99
- "@deepseek-ai/dsh-client-ui-session": "*",
100
- "@deepseek-ai/dsh-client-ui-settings": "*",
101
- "@deepseek-ai/dsh-credentials": "*",
102
- "@deepseek-ai/dsh-home-paths": "*",
103
- "@deepseek-ai/dsh-llm": "*",
104
- "@deepseek-ai/dsh-llm-deepseek": "*",
105
- "@deepseek-ai/dsh-mcp-client": "*",
106
- "@deepseek-ai/dsh-permission-presets": "*",
107
- "@deepseek-ai/dsh-sandbox-policy": "*",
108
- "@deepseek-ai/dsh-scope": "*",
109
- "@deepseek-ai/dsh-session": "*",
110
- "@deepseek-ai/dsh-settings": "*",
111
- "@deepseek-ai/dsh-skill-filesystem": "*",
112
- "@deepseek-ai/dsh-subagent": "*",
113
- "@deepseek-ai/dsh-token-meter": "*",
114
- "@deepseek-ai/dsh-tools": "*",
115
- "@deepseek-ai/dsh-typert-protocol": "*",
116
- "@deepseek-ai/dsh-user-approval": "*",
117
- "@deepseek-ai/dsh-user-questions": "*",
118
- "@deepseek-ai/dsh-util-values": "*",
119
- "@deepseek-ai/schemastery": "*",
90
+ "@deepseek-ai/cordis": ">=0.1.7-alpha.2",
91
+ "@deepseek-ai/cordis-plugin-loader": ">=0.1.7-alpha.2",
92
+ "@deepseek-ai/cosmokit": ">=0.1.7-alpha.2",
93
+ "@deepseek-ai/dsh-agent": ">=0.1.7-alpha.2",
94
+ "@deepseek-ai/dsh-agent-instructions": ">=0.1.7-alpha.2",
95
+ "@deepseek-ai/dsh-agent-loop": ">=0.1.7-alpha.2",
96
+ "@deepseek-ai/dsh-agent-preset": ">=0.1.7-alpha.2",
97
+ "@deepseek-ai/dsh-agent-preset-registry": ">=0.1.7-alpha.2",
98
+ "@deepseek-ai/dsh-api-remotes": ">=0.1.7-alpha.2",
99
+ "@deepseek-ai/dsh-atomic-write": ">=0.1.7-alpha.2",
100
+ "@deepseek-ai/dsh-attachment": ">=0.1.7-alpha.2",
101
+ "@deepseek-ai/dsh-brand": ">=0.1.7-alpha.2",
102
+ "@deepseek-ai/dsh-client-locale": ">=0.1.7-alpha.2",
103
+ "@deepseek-ai/dsh-client-ui-conversation": ">=0.1.7-alpha.2",
104
+ "@deepseek-ai/dsh-client-ui-primitives": ">=0.1.7-alpha.2",
105
+ "@deepseek-ai/dsh-client-ui-renderer": ">=0.1.7-alpha.2",
106
+ "@deepseek-ai/dsh-client-ui-session": ">=0.1.7-alpha.2",
107
+ "@deepseek-ai/dsh-client-ui-settings": ">=0.1.7-alpha.2",
108
+ "@deepseek-ai/dsh-command-compact": ">=0.1.7-alpha.2",
109
+ "@deepseek-ai/dsh-command-goal": ">=0.1.7-alpha.2",
110
+ "@deepseek-ai/dsh-compaction-basic": ">=0.1.7-alpha.2",
111
+ "@deepseek-ai/dsh-compaction-tool-result-pruner": ">=0.1.7-alpha.2",
112
+ "@deepseek-ai/dsh-credentials": ">=0.1.7-alpha.2",
113
+ "@deepseek-ai/dsh-home-paths": ">=0.1.7-alpha.2",
114
+ "@deepseek-ai/dsh-llm": ">=0.1.7-alpha.2",
115
+ "@deepseek-ai/dsh-llm-deepseek": ">=0.1.7-alpha.2",
116
+ "@deepseek-ai/dsh-lsp": ">=0.1.7-alpha.2",
117
+ "@deepseek-ai/dsh-lsp-stdio": ">=0.1.7-alpha.2",
118
+ "@deepseek-ai/dsh-mcp-client": ">=0.1.7-alpha.2",
119
+ "@deepseek-ai/dsh-permission-presets": ">=0.1.7-alpha.2",
120
+ "@deepseek-ai/dsh-persona": ">=0.1.7-alpha.2",
121
+ "@deepseek-ai/dsh-plan-mode": ">=0.1.7-alpha.2",
122
+ "@deepseek-ai/dsh-plugin-manager": ">=0.1.7-alpha.2",
123
+ "@deepseek-ai/dsh-sandbox-policy": ">=0.1.7-alpha.2",
124
+ "@deepseek-ai/dsh-scope": ">=0.1.7-alpha.2",
125
+ "@deepseek-ai/dsh-session": ">=0.1.7-alpha.2",
126
+ "@deepseek-ai/dsh-settings": ">=0.1.7-alpha.2",
127
+ "@deepseek-ai/dsh-skill-filesystem": ">=0.1.7-alpha.2",
128
+ "@deepseek-ai/dsh-subagent": ">=0.1.7-alpha.2",
129
+ "@deepseek-ai/dsh-token-meter": ">=0.1.7-alpha.2",
130
+ "@deepseek-ai/dsh-tool-ask-user": ">=0.1.7-alpha.2",
131
+ "@deepseek-ai/dsh-tool-bash": ">=0.1.7-alpha.2",
132
+ "@deepseek-ai/dsh-tool-fs": ">=0.1.7-alpha.2",
133
+ "@deepseek-ai/dsh-tool-fs-search": ">=0.1.7-alpha.2",
134
+ "@deepseek-ai/dsh-tool-goal": ">=0.1.7-alpha.2",
135
+ "@deepseek-ai/dsh-tool-jobs": ">=0.1.7-alpha.2",
136
+ "@deepseek-ai/dsh-tool-lsp": ">=0.1.7-alpha.2",
137
+ "@deepseek-ai/dsh-tool-present": ">=0.1.7-alpha.2",
138
+ "@deepseek-ai/dsh-tool-pwsh": ">=0.1.7-alpha.2",
139
+ "@deepseek-ai/dsh-tool-ralph": ">=0.1.7-alpha.2",
140
+ "@deepseek-ai/dsh-tool-skill": ">=0.1.7-alpha.2",
141
+ "@deepseek-ai/dsh-tool-subagent": ">=0.1.7-alpha.2",
142
+ "@deepseek-ai/dsh-tool-subagent-control": ">=0.1.7-alpha.2",
143
+ "@deepseek-ai/dsh-tool-todo": ">=0.1.7-alpha.2",
144
+ "@deepseek-ai/dsh-tool-web": ">=0.1.7-alpha.2",
145
+ "@deepseek-ai/dsh-tool-workflow": ">=0.1.7-alpha.2",
146
+ "@deepseek-ai/dsh-tools": ">=0.1.7-alpha.2",
147
+ "@deepseek-ai/dsh-typert-protocol": ">=0.1.7-alpha.2",
148
+ "@deepseek-ai/dsh-user-approval": ">=0.1.7-alpha.2",
149
+ "@deepseek-ai/dsh-user-questions": ">=0.1.7-alpha.2",
150
+ "@deepseek-ai/dsh-util-values": ">=0.1.7-alpha.2",
151
+ "@deepseek-ai/dsh-workflow-ptc": ">=0.1.7-alpha.2",
152
+ "@deepseek-ai/schemastery": ">=0.1.7-alpha.2",
120
153
  "react": "*"
121
154
  },
122
155
  "scripts": {}