@asermax/pi-tentacles 1.1.0 → 1.2.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.
package/README.md CHANGED
@@ -29,10 +29,10 @@ The helper reads these where it runs, on your machine. On pi, set them in pi's s
29
29
  | `TENTACLES_API_KEY` | the API key | required |
30
30
  | `TENTACLES_HELPER` | the helper's path | the bundled helper |
31
31
  | `TENTACLES_SESSION_PROVIDER` | the model provider | `cloudflare` |
32
- | `TENTACLES_SESSION_MODEL` | the model | `glm-5.2` |
32
+ | `TENTACLES_SESSION_MODEL` | the model | `glm-5.3` |
33
33
  | `TENTACLES_SESSION_EFFORT` | the effort level | `max` |
34
34
  | `TENTACLES_WORKSPACE_IMAGE` | the workspace image | `default` |
35
- | `TENTACLES_WORKSPACE_SIZE` | the workspace container's instance type | `basic` |
35
+ | `TENTACLES_WORKSPACE_SIZE` | the workspace container's instance type | `standard-2` |
36
36
  | `TENTACLES_WORKSPACE_LIFETIME` | the workspace's inactivity time, in minutes | `15` |
37
37
 
38
38
  A setting the agent passes to `spawn` wins over its variable.
@@ -15382,7 +15382,13 @@ var SessionStatuses = {
15382
15382
  var SessionStatus = Enum(SessionStatuses);
15383
15383
  var Question = Struct({
15384
15384
  id: QuestionId,
15385
- text: String$1
15385
+ text: String$1,
15386
+ repositoryCheck: Union([
15387
+ TaggedStruct("NoRepository", {}),
15388
+ TaggedStruct("Stopped", {}),
15389
+ TaggedStruct("Clean", {}),
15390
+ TaggedStruct("CheckFailed", { output: String$1 })
15391
+ ]).pipe(toTaggedUnion("_tag"))
15386
15392
  });
15387
15393
  var SessionDetails = Struct({
15388
15394
  settings: Settings,
@@ -17323,7 +17329,13 @@ var entryText = type().pipe(tagsExhaustive({
17323
17329
  toolResult: (entry) => entry.output,
17324
17330
  subagentResult: (entry) => entry.text
17325
17331
  }));
17326
- var questionWake = (session, question) => `${agentOf(session)} asks (question ${question.id}):\n${question.text}\n\nAnswer it with the answer tool, passing session ${session.sessionId} and question ${question.id}.`;
17332
+ var repositoryCheckText = type().pipe(tagsExhaustive({
17333
+ NoRepository: () => "NoRepository",
17334
+ Stopped: () => "Stopped",
17335
+ Clean: () => "Clean",
17336
+ CheckFailed: ({ output }) => output === "" ? "CheckFailed" : `CheckFailed\n${output}`
17337
+ }));
17338
+ var questionWake = (session, question) => `${agentOf(session)} asks (question ${question.id}):\n${question.text}\n\nRepository check: ${repositoryCheckText(question.repositoryCheck)}\n\nAnswer it with the answer tool, passing session ${session.sessionId} and question ${question.id}.`;
17327
17339
  var finishWake = (session, lastEntry) => lastEntry == null ? `${agentOf(session)} finished. Read its last message with the messages tool.` : `${agentOf(session)} finished. Its last message:\n${entryText(lastEntry)}`;
17328
17340
  var failureWake = (session, failure) => `${agentOf(session)} failed: ${failure}`;
17329
17341
  // src/core/controller.ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@asermax/pi-tentacles",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "Spawn, steer, question and collect remote coding agents that run in tentacles.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -46,6 +46,15 @@ You are woken when a remote agent stops. The wake carries the agent's last messa
46
46
 
47
47
  A remote agent asks with its question tool and waits for the answer. Answer with `answer`, passing the question's id. Answer it yourself when you can; when the decision is the human's, ask them and answer once they reply. A prompt you send while a question waits does not answer the question. The agent receives the prompt after the question is answered.
48
48
 
49
+ Every question comes with a repository check, which tells you whether the remote agent's work is known to be persisted:
50
+
51
+ - `Clean`: the work is committed and pushed. The question can wait any length of time.
52
+ - `Stopped`: the agent's workspace was not running, so it had nothing pending. The question can wait any length of time.
53
+ - `CheckFailed`: tentacles could not check the workspace, so the agent's work may exist only on the container's disk and is lost when the container stops. The check comes with what the git commands printed, which shows why it failed and is empty when the workspace ran neither command.
54
+ - `NoRepository`: the session's settings name no repository, so tentacles manages none and checked nothing.
55
+
56
+ A remote agent that has uncommitted changes or unpushed commits cannot ask: its question tool refuses until it commits and pushes.
57
+
49
58
  ## Prompt
50
59
 
51
60
  `prompt` sends a follow-up or a steer. A follow-up waits for the current run to end; a steer reaches the agent at its next step. Prompting a closed session reopens it.
package/tentacles-helper CHANGED
@@ -26247,7 +26247,13 @@ var SessionStatuses = {
26247
26247
  var SessionStatus = Enum(SessionStatuses);
26248
26248
  var Question = Struct({
26249
26249
  id: QuestionId,
26250
- text: String$2
26250
+ text: String$2,
26251
+ repositoryCheck: Union([
26252
+ TaggedStruct("NoRepository", {}),
26253
+ TaggedStruct("Stopped", {}),
26254
+ TaggedStruct("Clean", {}),
26255
+ TaggedStruct("CheckFailed", { output: String$2 })
26256
+ ]).pipe(toTaggedUnion("_tag"))
26251
26257
  });
26252
26258
  var SessionDetails = Struct({
26253
26259
  settings: Settings,
@@ -30191,10 +30197,10 @@ var ConnectionConfig = all({
30191
30197
  /** The settings a spawn leaves out. */
30192
30198
  var SettingsDefaults = all({
30193
30199
  provider: String$1("TENTACLES_SESSION_PROVIDER").pipe(withDefault("cloudflare")),
30194
- model: String$1("TENTACLES_SESSION_MODEL").pipe(withDefault("glm-5.2")),
30200
+ model: String$1("TENTACLES_SESSION_MODEL").pipe(withDefault("glm-5.3")),
30195
30201
  effort: String$1("TENTACLES_SESSION_EFFORT").pipe(withDefault("max")),
30196
30202
  image: String$1("TENTACLES_WORKSPACE_IMAGE").pipe(withDefault("default")),
30197
- size: String$1("TENTACLES_WORKSPACE_SIZE").pipe(withDefault("basic")),
30203
+ size: String$1("TENTACLES_WORKSPACE_SIZE").pipe(withDefault("standard-2")),
30198
30204
  lifetime: Int("TENTACLES_WORKSPACE_LIFETIME").pipe(withDefault(15))
30199
30205
  });
30200
30206
  // src/helper/client.ts