@rse/ase 0.9.15 → 0.9.17

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/dst/ase-mcp.js CHANGED
@@ -56,13 +56,8 @@ export default class MCPCommand {
56
56
  }
57
57
  /* bridge stdio to a Streamable HTTP MCP endpoint on the local service */
58
58
  async runBridge() {
59
- /* tentatively load the service identity context; the actual service
60
- start/probe happens below through ensureService() and, on failure,
61
- is funnelled into the same reconnect machinery used at runtime so
62
- that a transient startup failure is recoverable instead of fatal */
63
- const ctx0 = this.loadContext();
64
- let projectId = ctx0.projectId;
65
- let port = ctx0.port ?? 0;
59
+ /* ensure the service is running */
60
+ let { projectId, port } = await this.ensureService();
66
61
  /* create MCP STDIO server (lives for the entire bridge lifetime) */
67
62
  const server = new StdioServerTransport();
68
63
  /* track active client and bridge-level closed state */
@@ -159,17 +154,10 @@ export default class MCPCommand {
159
154
  /* start server and initial client */
160
155
  await server.start();
161
156
  try {
162
- /* ensure the service is running, then connect; both the
163
- service start/probe and the connect are covered here so that
164
- an initial failure recovers via the reconnect machinery
165
- (now in place) instead of crashing the bridge outright */
166
- const ctx = await this.ensureService();
167
- projectId = ctx.projectId;
168
- port = ctx.port;
169
157
  await connectClient();
170
158
  }
171
159
  catch (err) {
172
- /* initial service start or connect failed — recover instead of crashing */
160
+ /* service vanished between probe and connect — recover instead of crashing */
173
161
  triggerReconnect(`initial connect failed: ${this.asError(err).message}`);
174
162
  }
175
163
  /* periodically probe the service; trigger reconnect if it is gone */
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "homepage": "http://github.com/rse/ase",
7
7
  "repository": { "url": "git+https://github.com/rse/ase.git", "type": "git" },
8
8
  "bugs": { "url": "http://github.com/rse/ase/issues" },
9
- "version": "0.9.15",
9
+ "version": "0.9.17",
10
10
  "license": "GPL-3.0-only",
11
11
  "author": {
12
12
  "name": "Dr. Ralf S. Engelschall",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ase",
3
- "version": "0.9.15",
3
+ "version": "0.9.17",
4
4
  "description": "Agentic Software Engineering (ASE)",
5
5
  "keywords": [ "agentic", "software", "engineering" ],
6
6
  "homepage": "https://ase.tools",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ase",
3
- "version": "0.9.15",
3
+ "version": "0.9.17",
4
4
  "description": "Agentic Software Engineering (ASE)",
5
5
  "keywords": [ "agentic", "software", "engineering" ],
6
6
  "homepage": "https://ase.tools",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ase",
3
- "version": "0.9.15",
3
+ "version": "0.9.17",
4
4
  "description": "Agentic Software Engineering (ASE)",
5
5
  "keywords": [ "agentic", "software", "engineering" ],
6
6
  "homepage": "https://ase.tools",
@@ -6,7 +6,7 @@
6
6
  "homepage": "http://github.com/rse/ase",
7
7
  "repository": { "url": "git+https://github.com/rse/ase.git", "type": "git" },
8
8
  "bugs": { "url": "http://github.com/rse/ase/issues" },
9
- "version": "0.9.15",
9
+ "version": "0.9.17",
10
10
  "license": "GPL-3.0-only",
11
11
  "author": {
12
12
  "name": "Dr. Ralf S. Engelschall",
@@ -0,0 +1,189 @@
1
+ ---
2
+ name: ase-meta-update
3
+ argument-hint: "[--help|-h] <target>[,...] [<source>[,...]]"
4
+ description: >
5
+ Update one set of artifact kinds (the target) to reflect the current
6
+ state of another set of artifact kinds (the source). Use when the
7
+ user wants to "update", "reconcile", or "sync" artifacts like SPEC,
8
+ ARCH, CODE, DOCS, TASK, INFR, or OTHR against each other.
9
+ user-invocable: true
10
+ disable-model-invocation: false
11
+ effort: xhigh
12
+ allowed-tools:
13
+ - "Read"
14
+ - "Write"
15
+ - "Edit"
16
+ ---
17
+
18
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-control.md
19
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-skill.md
20
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-getopt.md
21
+
22
+ <skill name="ase-meta-update">
23
+ Update Artifacts from Artifacts
24
+ </skill>
25
+
26
+ <expand name="getopt" arg1="ase-meta-update">
27
+ $ARGUMENTS
28
+ </expand>
29
+
30
+ <objective>
31
+ *Update* the *target* artifact kinds to *reflect* the *current
32
+ state* of the *source* artifact kinds, by reading the source
33
+ artifacts and adjusting the target artifacts accordingly:
34
+ <request><getopt-arguments/></request>.
35
+ </objective>
36
+
37
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-format-meta.md
38
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-format-spec.md
39
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-format-arch.md
40
+ @${CLAUDE_SKILL_DIR}/../../meta/ase-format-task.md
41
+
42
+ Procedure
43
+ ---------
44
+
45
+ You *MUST* follow the following numbered items *strictly* *sequentially*!
46
+ You *MUST* not skip any numbered item during processing!
47
+
48
+ You *MUST* *NOT* output anything in this entire procedure, *except* when
49
+ explicitly requested by this procedure via outputs based on a <template/>!
50
+
51
+ <flow>
52
+
53
+ 1. <step id="STEP 1: Determine Target and Source">
54
+
55
+ 1. The recognized artifact kinds are the seven tokens `TASK`,
56
+ `SPEC`, `ARCH`, `CODE`, `DOCS`, `INFR`, and `OTHR`. Parse
57
+ <getopt-arguments/> as one or two whitespace-separated fields:
58
+ the *first* field is the comma-separated <target/> kind list, the
59
+ optional *second* field is the comma-separated <source/> kind list.
60
+ Upper-case and trim every parsed kind token.
61
+
62
+ 2. <if condition="<target/> is empty">
63
+
64
+ Only output the following <template/> and then immediately *STOP*
65
+ processing the entire current skill:
66
+
67
+ <template>
68
+ ⧉ **ASE**: ☻ skill: **ase-meta-update**, ▶ ERROR: missing target argument
69
+ </template>
70
+
71
+ </if>
72
+
73
+ 3. If any token in <target/> or <source/> is *not* one of the seven
74
+ recognized kinds, only output the following <template/> (with
75
+ <kind/> set to the first offending token) and then immediately
76
+ *STOP* processing the entire current skill:
77
+
78
+ <template>
79
+ ⧉ **ASE**: ☻ skill: **ase-meta-update**, ▶ ERROR: unknown artifact kind: **<kind/>**
80
+ </template>
81
+
82
+ 4. <if condition="<source/> is empty">
83
+
84
+ Set <source/> to the seven recognized kinds
85
+ `TASK,SPEC,ARCH,CODE,DOCS,INFR,OTHR` *minus* all kinds present
86
+ in <target/> (preserving that fixed order). Do not output
87
+ anything.
88
+
89
+ </if>
90
+
91
+ 5. Remove from <source/> any kind that is also present in <target/>
92
+ (a kind is never its own source). If <source/> is then empty,
93
+ only output the following <template/> and then immediately *STOP*
94
+ processing the entire current skill:
95
+
96
+ <template>
97
+ ⧉ **ASE**: ☻ skill: **ase-meta-update**, ▶ ERROR: empty source -- nothing to update from
98
+ </template>
99
+
100
+ 6. Report the resolved target and source with the following <template/>:
101
+
102
+ <template>
103
+ <ase-tpl-bullet-normal/> **TARGET**: <target/>
104
+ <ase-tpl-bullet-normal/> **SOURCE**: <source/>
105
+ </template>
106
+
107
+ </step>
108
+
109
+ 2. <step id="STEP 2: Resolve Artifact Files">
110
+
111
+ 1. For all kinds in the union of <target/> and <source/>,
112
+ call the `ase_artifact_list(kind: [ ... ])` tool of the `ase`
113
+ MCP server *once*, passing the lower-cased `kind` tokens, and
114
+ read the returned `artifacts` array of `{ kind, files }` objects
115
+ to obtain the project-relative file list per kind.
116
+
117
+ 2. Do not output anything in this STEP 2.
118
+
119
+ </step>
120
+
121
+ 3. <step id="STEP 3: Internalize Artifact Formats">
122
+
123
+ 1. Internalize and honor the artifact-format conventions imported above:
124
+
125
+ - the artifact-set/artifact/aspect meta information of `ase-format-meta.md`,
126
+ - the `SPEC` format of `ase-format-spec.md`,
127
+ - the `ARCH` format of `ase-format-arch.md`,
128
+ - the `TASK` format of `ase-format-task.md`.
129
+
130
+ Whenever a target artifact belongs to one of these formatted
131
+ kinds, the update *MUST* keep it conformant to the
132
+ corresponding format (headings, structure, identifiers, and the
133
+ `<timestamp-modified/>` rule). The kinds `CODE`, `DOCS`, `INFR`,
134
+ and `OTHR` have no dedicated format contract and are treated as
135
+ free-form.
136
+
137
+ 2. Do not output anything in this STEP 3.
138
+
139
+ </step>
140
+
141
+ 4. <step id="STEP 4: Read Source Artifacts">
142
+
143
+ 1. Read all <source/> artifact files resolved in STEP 2 and build a
144
+ precise understanding of the *current state* they represent.
145
+
146
+ 2. Do not output anything in this STEP 4.
147
+
148
+ </step>
149
+
150
+ 5. <step id="STEP 5: Update Target Artifacts">
151
+
152
+ 1. *Update* the <target/> artifact files so that they faithfully
153
+ *reflect the current state* of the <source/> artifacts. Apply the
154
+ update *directly* to the target files via `Write`/`Edit`, keeping
155
+ changes as *surgical* as possible: change only what the source
156
+ state actually requires, and do *not* rewrite unrelated parts of a
157
+ target artifact.
158
+
159
+ For each formatted target kind, honor its format contract
160
+ internalized in STEP 3 and, whenever a target artifact is
161
+ changed, update its `<timestamp-modified/>` line via a call to
162
+ the `ase_timestamp(format: "yyyy-LL-dd HH:mm")` tool of the
163
+ `ase` MCP server.
164
+
165
+ 2. Report the performed update with the following <template/>, listing
166
+ one bullet line per changed target file (with <file/> its
167
+ project-relative path and <note/> an ultra-brief description of
168
+ what was reconciled):
169
+
170
+ <template>
171
+ <ase-tpl-bullet-signal/> **UPDATED ARTIFACTS**:
172
+
173
+ - `<file/>`: <note/>
174
+ </template>
175
+
176
+ <if condition="no target artifact required any change">
177
+
178
+ Instead, only output the following <template/>:
179
+
180
+ <template>
181
+ <ase-tpl-bullet-normal/> **UPDATED ARTIFACTS**: none -- target already reflects source state.
182
+ </template>
183
+
184
+ </if>
185
+
186
+ </step>
187
+
188
+ </flow>
189
+
@@ -0,0 +1,66 @@
1
+
2
+ ## NAME
3
+
4
+ `ase-meta-update` - Update Artifacts from Artifacts
5
+
6
+ ## SYNOPSIS
7
+
8
+ `ase-meta-update`
9
+ [`--help`|`-h`]
10
+ *target*[,...]
11
+ [*source*[,...]]
12
+
13
+ ## DESCRIPTION
14
+
15
+ The `ase-meta-update` skill updates one set of artifact kinds (the
16
+ *target*) to *reflect* the *current state* of another set of artifact
17
+ kinds (the *source*). It reads the source artifacts and then adjusts the
18
+ target artifacts *directly* and *surgically* to match the source state.
19
+
20
+ Both *target* and *source* are comma-separated lists over the seven
21
+ recognized artifact kinds `SPEC` (Specification), `ARCH` (Architecture),
22
+ `CODE` (Source Code), `DOCS` (Documentation), `TASK` (Task Plans), `INFR`
23
+ (Infrastructure), and `OTHR` (catch-all). When *source* is omitted, it
24
+ defaults to all seven kinds *minus* the kinds listed in *target*. A kind
25
+ present in *target* is never used as its own source.
26
+
27
+ The file lists for the kinds `SPEC`, `ARCH`, `CODE`, `DOCS`, `INFR`, and
28
+ `OTHR` are resolved via the `ase_artifact_list` MCP tool; the `TASK` kind
29
+ is resolved generically from the `.ase/task/*/plan.md` task plans. While
30
+ updating, the skill honors the artifact-format conventions of
31
+ `ase-format-meta.md`, `ase-format-spec.md`, `ase-format-arch.md`, and
32
+ `ase-format-task.md`; the kinds `CODE`, `DOCS`, `INFR`, and `OTHR` are
33
+ treated as free-form.
34
+
35
+ ## ARGUMENTS
36
+
37
+ *target*[,...]:
38
+ The comma-separated list of artifact kinds to update.
39
+
40
+ *source*[,...]:
41
+ The comma-separated list of artifact kinds to update *from*. When
42
+ omitted, it defaults to all recognized kinds except those in *target*.
43
+
44
+ ## EXAMPLES
45
+
46
+ Update the specification to reflect the current source code:
47
+
48
+ ```text
49
+ ❯ /ase-meta-update SPEC CODE
50
+ ```
51
+
52
+ Update specification and architecture from everything else:
53
+
54
+ ```text
55
+ ❯ /ase-meta-update SPEC,ARCH
56
+ ```
57
+
58
+ Update the documentation from the code and the architecture:
59
+
60
+ ```text
61
+ ❯ /ase-meta-update DOCS CODE,ARCH
62
+ ```
63
+
64
+ ## SEE ALSO
65
+
66
+ [`ase-meta-changelog`](../ase-meta-changelog/help.md), [`ase-arch-analyze`](../ase-arch-analyze/help.md), [`ase-arch-discover`](../ase-arch-discover/help.md).