aligndev 0.20.0 → 0.20.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.
package/package.json
CHANGED
|
@@ -60,10 +60,9 @@ A value the user did not supply and the lookup did not resolve stays missing. St
|
|
|
60
60
|
- `target`: the **raw `chat_id`** from inbound metadata
|
|
61
61
|
- `messageId`: the user's triggering message id from inbound metadata, so the thread anchors on it
|
|
62
62
|
- `threadName`: the name above
|
|
63
|
-
- `message`: the starter from Step 3
|
|
64
63
|
- `channel`: `<channel>`
|
|
65
64
|
|
|
66
|
-
The tool returns the thread's `chat_id` — that is the THREAD_ID.
|
|
65
|
+
The tool returns the thread's `chat_id` — that is the THREAD_ID. Post the Step 3 starter into the thread: call `message` with `action: "thread-reply"`, `threadId` set to the bare THREAD_ID, `message` set to the starter, and `channel` set to the current surface. Pass no `target`.
|
|
67
66
|
|
|
68
67
|
**Slack** — Slack threads have no name. Call `message` with `action: "send"`, `target` set to the raw current `chat_id`, `threadId` set to the triggering message timestamp, `message` set to the Step 3 starter, and `channel` set to the current surface. The bare root timestamp is the THREAD_ID. Slack has no `thread-create`, `thread-reply`, or rename action.
|
|
69
68
|
|
|
@@ -105,6 +104,6 @@ Whichever case applies, the `{ask}` never says that this channel session handles
|
|
|
105
104
|
|
|
106
105
|
For project creation or repository onboarding, a proposed PROJECT with no PROJECT_PATH is complete enough for handoff. The lifecycle procedure establishes its path.
|
|
107
106
|
|
|
108
|
-
|
|
107
|
+
Once the starter's delivery is confirmed, call `thread_handoff` with `action: "start"` and the bare THREAD_ID. A tool result `Skipped due to queued user message.` means OpenClaw skipped the call because a new message was steered into this turn; call `start` again for the same thread. On `queued` or `alreadyStarted`, end the turn on exactly `NO_REPLY`: the starter is this turn's reply, and the thread shows under the user's message. Do no project work and send no second starter. On a partial or ambiguous delivery, do not call `start`. If delivery or handoff fails, end the turn on the concise actionable error. Retry against the original confirmed thread; never create a replacement merely because activation failed. Missing plugin/tool access is a deployment failure, not a reason to ask for a mechanical follow-up.
|
|
109
108
|
|
|
110
109
|
In a DM or group DM, `start` is unsupported. Explain that project work must be requested from a supported channel; do not promise automatic thread activation there.
|
|
@@ -36,7 +36,7 @@ A channel session answers ordinary conversation directly. Project investigation,
|
|
|
36
36
|
|
|
37
37
|
Your plain text streams to your bound route: in a thread it is the reply, in a channel it is the root reply. Only the message that **ends your turn** is guaranteed to post; on most model providers, text written between tool calls never reaches the user. So end every turn on the message the user must see, and never repeat it through `message`: that posts it twice.
|
|
38
38
|
|
|
39
|
-
The `message` tool serves the starter (Discord `thread-create`, Slack `send` with the triggering timestamp as `threadId`), history reads, Discord renames, cross-surface posts, and attachments.
|
|
39
|
+
The `message` tool serves the starter (Discord `thread-create` then `thread-reply`, Slack `send` with the triggering timestamp as `threadId`), history reads, Discord renames, cross-surface posts, and attachments. The starter is the channel turn's reply: after `thread_handoff start`, that turn ends on exactly `NO_REPLY`.
|
|
40
40
|
{{/openclaw}}
|
|
41
41
|
|
|
42
42
|
## Reply style
|
|
@@ -79,7 +79,7 @@ When the user reports the merge, or you observe it while checking the PR:
|
|
|
79
79
|
|
|
80
80
|
The preparation targets the project's companion directory. It writes nothing in the repository and creates no branch, commit or pull request.
|
|
81
81
|
|
|
82
|
-
1.
|
|
82
|
+
1. Run `{{ALIGNFIRST}} companion add` from PROJECT_PATH. It registers the project in the companion registry unless an entry already covers it, and creates the companion directory.
|
|
83
83
|
2. Unless the user already said, ask whether `.plans` must be shared through a work-files repository, and for its URL if so. Wait for the answer.
|
|
84
84
|
3. When the user chose the work-files repository, clone it under `{{PROJECTS_ROOT}}` when no clone exists there.
|
|
85
85
|
4. Run `{{ALIGNDEV}} guide code`. From PROJECT_PATH, delegate the preparation to the agent without a protocol: use the `alignfirst-setup-guide` skill and follow its procedure "Set up a project through its companion" for an assistant, with the work-files clone path when there is one.
|
|
@@ -4,7 +4,7 @@ A projects directory groups projects and optional nested projects directories. I
|
|
|
4
4
|
|
|
5
5
|
A project is a git main worktree, direct child of a projects directory. Its linked worktrees are listed as its workspaces. Other child directories, those that are not git repositories, appear under `others`.
|
|
6
6
|
|
|
7
|
-
A project's AlignFirst files may live in its companion directory, declared in `~/.alignfirst/companions.json`. `{{ALIGNDEV}} project status <path>` gives each location.
|
|
7
|
+
A project's AlignFirst files may live in its companion directory, declared in the companion registry `~/.alignfirst/companions/registry.json`. `{{ALIGNDEV}} project status <path>` gives each location.
|
|
8
8
|
|
|
9
9
|
## Commands
|
|
10
10
|
|