@quolu/lattice 0.37.0 → 0.38.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/README.ja.md +15 -0
- package/README.md +16 -0
- package/bin/lattice-dashboard.mjs +2 -2
- package/package.json +1 -1
- package/sensor/dist/extraction/tree-sitter.d.ts.map +1 -1
- package/sensor/dist/extraction/tree-sitter.js +68 -16
- package/sensor/dist/extraction/tree-sitter.js.map +1 -1
- package/src/cli-help.mjs +7 -0
- package/src/seam-cost.mjs +3 -3
- package/src/todo-cli.mjs +241 -8
- package/src/todo-contracts.mjs +66 -0
- package/src/todo-gantt-html-independence.mjs +29 -3
- package/src/todo-gantt-html-style.mjs +6 -0
- package/src/todo-gantt-html.mjs +28 -6
- package/src/todo-note-store.mjs +492 -0
package/README.ja.md
CHANGED
|
@@ -43,6 +43,21 @@ planを再コンパイルします。共有面が共有でなくなるので、
|
|
|
43
43
|
|
|
44
44
|
人が手で切ったのではありません。**工程を並列化するために製品が切りました。**
|
|
45
45
|
|
|
46
|
+
### 作業記憶はToDoと一緒に渡る
|
|
47
|
+
|
|
48
|
+
AIは、次の担当が作業を続けるために必要な方針、棄却案、調査結果、注意、未解決事項をToDoへ追記できます。
|
|
49
|
+
通常の`lattice todo show`と、成功するすべての`lattice todo start`は、元version/元task、訂正状態、
|
|
50
|
+
note chain head、overflow、全履歴コマンドを含む最新のbounded `note_context`を自動で返します。
|
|
51
|
+
次のAIが別のnote読取コマンドを知っている必要はありません。
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
lattice todo note --plan <key> --task <id> --message "既存parserを使い、fallbackは追加しない"
|
|
55
|
+
lattice todo show --plan <key> --task <id> --json
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
ローカルGanttでは、選択したToDoの右ペインへ同じ作業記録を表示します。公開Gantt/dashboardは契約として
|
|
59
|
+
note本文を含めません。
|
|
60
|
+
|
|
46
61
|
### 変換の受入五条件
|
|
47
62
|
|
|
48
63
|
**5つすべて**を満たしたときだけ採用します。1つでも欠ければ棄却です。
|
package/README.md
CHANGED
|
@@ -58,6 +58,22 @@ the same parallel group.
|
|
|
58
58
|
|
|
59
59
|
Nobody hand-refactored that file. The product cut it so the work could parallelize.
|
|
60
60
|
|
|
61
|
+
### Task memory travels with the task
|
|
62
|
+
|
|
63
|
+
An agent can append the decisions, rejected approaches, findings, cautions, and open questions needed
|
|
64
|
+
to continue a ToDo. A normal `lattice todo show` and every successful `lattice todo start` return the
|
|
65
|
+
latest bounded `note_context` automatically, including origin, correction state, chain head, overflow,
|
|
66
|
+
and the full-history command. The next agent does not need to discover or remember a separate note
|
|
67
|
+
lookup command.
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
lattice todo note --plan <key> --task <id> --message "Use the existing parser; do not add a fallback"
|
|
71
|
+
lattice todo show --plan <key> --task <id> --json
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
The same context appears in the selected ToDo's detail pane in a local Gantt. Public Gantt and
|
|
75
|
+
dashboard rendering exclude note bodies by contract.
|
|
76
|
+
|
|
61
77
|
### The five acceptance conditions
|
|
62
78
|
|
|
63
79
|
A transform is adopted only when **all five** hold. One missing condition rejects it:
|
|
@@ -5,7 +5,7 @@ import path from 'node:path';
|
|
|
5
5
|
|
|
6
6
|
import { readTodoStoreStable } from '../src/todo-store.mjs';
|
|
7
7
|
import { projectTodoStatus } from '../src/todo-status.mjs';
|
|
8
|
-
import { ganttLiveHeadDigest,
|
|
8
|
+
import { ganttLiveHeadDigest, renderPublicTodoGanttForProject } from '../src/todo-cli.mjs';
|
|
9
9
|
import {
|
|
10
10
|
readVisibleTodoDashboardProjects,
|
|
11
11
|
writeTodoDashboardDaemonDescriptor,
|
|
@@ -87,7 +87,7 @@ async function synchronize() {
|
|
|
87
87
|
displayName: entry.display_name,
|
|
88
88
|
render: async ({ displayName }) => {
|
|
89
89
|
const store = await readCachedStore(entry.repo_root);
|
|
90
|
-
const result = await
|
|
90
|
+
const result = await renderPublicTodoGanttForProject({ repoRoot: entry.repo_root,
|
|
91
91
|
stable: true, displayName, readModel: store });
|
|
92
92
|
return {
|
|
93
93
|
html: result.rendered.html,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@quolu/lattice",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.38.1",
|
|
4
4
|
"description": "Schedulability compiler for multi-agent development: observe real code boundaries, refactor the conflicting seam, recompile the plan for parallel execution",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Quo / クオ at kitepon.dev",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree-sitter.d.ts","sourceRoot":"","sources":["../../src/extraction/tree-sitter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EACL,QAAQ,EAIR,gBAAgB,EAGjB,MAAM,UAAU,CAAC;AAoClB,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AA8VvD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,IAAI,CAAqB;IACjC,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,oBAAoB,CAA6B;IAIzD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAA6K;IACpN,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAU;IACrD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAiD;IAClF,OAAO,CAAC,eAAe,CAA6B;IACpD,OAAO,CAAC,oBAAoB,CAA6B;IACzD,OAAO,CAAC,cAAc,CAA6D;IACnF,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,SAAS,CAAkC;IACnD,OAAO,CAAC,SAAS,CAAgB;IAMjC,OAAO,CAAC,eAAe,CAAgB;IAQvC,OAAO,CAAC,cAAc,CAA+C;IACrE,OAAO,CAAC,WAAW,CAAoC;IAIvD,OAAO,CAAC,SAAS,CAAwB;IACzC,OAAO,CAAC,eAAe,CAAsD;IAE7E,OAAO,CAAC,YAAY,CAAwB;gBAEhC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ;IAQjE;;OAEG;IACH,OAAO,IAAI,gBAAgB;IA4H3B;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAY1B;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IAmBxB;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,oBAAoB;IA2F5B;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IAuC5B;;;;;;;OAOG;IACH,OAAO,CAAC,cAAc;
|
|
1
|
+
{"version":3,"file":"tree-sitter.d.ts","sourceRoot":"","sources":["../../src/extraction/tree-sitter.ts"],"names":[],"mappings":"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"}
|
|
@@ -809,9 +809,12 @@ class TreeSitterExtractor {
|
|
|
809
809
|
const left = (0, tree_sitter_helpers_1.getChildByField)(n, 'left') ?? (0, tree_sitter_helpers_1.getChildByField)(n, 'pattern') ?? n.namedChild(0);
|
|
810
810
|
if (left?.type === 'identifier')
|
|
811
811
|
bump(left);
|
|
812
|
-
|
|
812
|
+
// Attribute/subscript assignment mutates an existing binding's
|
|
813
|
+
// value; only destructuring patterns introduce/rebind names.
|
|
814
|
+
else if (left && ['expression_list', 'pattern_list', 'tuple', 'list', 'list_pattern'].includes(left.type)) {
|
|
813
815
|
for (const c of left.namedChildren)
|
|
814
816
|
bump(c);
|
|
817
|
+
}
|
|
815
818
|
break;
|
|
816
819
|
}
|
|
817
820
|
case 'init_declarator': // C `T X = …` (file-scope const AND the local that shadows it)
|
|
@@ -863,30 +866,79 @@ class TreeSitterExtractor {
|
|
|
863
866
|
if (targets.size === 0)
|
|
864
867
|
return;
|
|
865
868
|
}
|
|
866
|
-
// Write detection is wired for
|
|
867
|
-
//
|
|
868
|
-
//
|
|
869
|
-
|
|
870
|
-
|
|
869
|
+
// Write detection is wired for every language that also has a native-kernel
|
|
870
|
+
// value-ref mirror. Languages outside this set keep an absent flag — callers
|
|
871
|
+
// must not interpret absence as read-only.
|
|
872
|
+
const writeAware = [
|
|
873
|
+
'typescript', 'javascript', 'tsx', 'jsx', 'arkts', 'go', 'python', 'java',
|
|
874
|
+
].includes(this.language);
|
|
871
875
|
const isWriteReference = (n) => {
|
|
872
|
-
// Climb the
|
|
876
|
+
// Climb the binding-root path: `cache.x.y = 1` / `cache[k] = 1` mutate
|
|
873
877
|
// the binding's value even though the identifier itself is not re-bound.
|
|
874
878
|
let node = n;
|
|
875
879
|
let parent = node.parent;
|
|
876
|
-
while (parent
|
|
877
|
-
const
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
880
|
+
while (parent) {
|
|
881
|
+
const rootField = (() => {
|
|
882
|
+
if (parent.type === 'member_expression' || parent.type === 'subscript_expression')
|
|
883
|
+
return 'object';
|
|
884
|
+
if (this.language === 'go'
|
|
885
|
+
&& ['selector_expression', 'index_expression', 'slice_expression'].includes(parent.type))
|
|
886
|
+
return 'operand';
|
|
887
|
+
if (this.language === 'python' && parent.type === 'attribute')
|
|
888
|
+
return 'object';
|
|
889
|
+
if (this.language === 'python' && parent.type === 'subscript')
|
|
890
|
+
return 'value';
|
|
891
|
+
if (this.language === 'java' && parent.type === 'field_access')
|
|
892
|
+
return 'object';
|
|
893
|
+
if (this.language === 'java' && parent.type === 'array_access')
|
|
894
|
+
return 'array';
|
|
895
|
+
return null;
|
|
896
|
+
})();
|
|
897
|
+
if (rootField !== null) {
|
|
898
|
+
const root = (0, tree_sitter_helpers_1.getChildByField)(parent, rootField);
|
|
899
|
+
if (!root || root.startIndex !== node.startIndex || root.endIndex !== node.endIndex)
|
|
900
|
+
break;
|
|
901
|
+
node = parent;
|
|
902
|
+
parent = node.parent;
|
|
903
|
+
continue;
|
|
904
|
+
}
|
|
905
|
+
// Go's assignment LHS is wrapped in an expression_list.
|
|
906
|
+
if (this.language === 'go' && parent.type === 'expression_list') {
|
|
907
|
+
node = parent;
|
|
908
|
+
parent = node.parent;
|
|
909
|
+
continue;
|
|
910
|
+
}
|
|
911
|
+
break;
|
|
882
912
|
}
|
|
883
913
|
if (!parent)
|
|
884
914
|
return false;
|
|
885
|
-
|
|
886
|
-
const left = (0, tree_sitter_helpers_1.getChildByField)(
|
|
915
|
+
const isLeft = (owner, fields) => fields.some((field) => {
|
|
916
|
+
const left = (0, tree_sitter_helpers_1.getChildByField)(owner, field);
|
|
887
917
|
return left !== null && left.startIndex === node.startIndex && left.endIndex === node.endIndex;
|
|
918
|
+
});
|
|
919
|
+
if (['typescript', 'javascript', 'tsx', 'jsx', 'arkts'].includes(this.language)) {
|
|
920
|
+
if (parent.type === 'assignment_expression' || parent.type === 'augmented_assignment_expression') {
|
|
921
|
+
return isLeft(parent, ['left']);
|
|
922
|
+
}
|
|
923
|
+
return parent.type === 'update_expression';
|
|
888
924
|
}
|
|
889
|
-
|
|
925
|
+
if (this.language === 'go') {
|
|
926
|
+
if (parent.type === 'assignment_statement')
|
|
927
|
+
return isLeft(parent, ['left']);
|
|
928
|
+
return parent.type === 'inc_statement' || parent.type === 'dec_statement';
|
|
929
|
+
}
|
|
930
|
+
if (this.language === 'python') {
|
|
931
|
+
if (parent.type === 'assignment' || parent.type === 'augmented_assignment') {
|
|
932
|
+
return isLeft(parent, ['left']);
|
|
933
|
+
}
|
|
934
|
+
return parent.type === 'named_expression' && isLeft(parent, ['name', 'left']);
|
|
935
|
+
}
|
|
936
|
+
if (this.language === 'java') {
|
|
937
|
+
if (parent.type === 'assignment_expression')
|
|
938
|
+
return isLeft(parent, ['left']);
|
|
939
|
+
return parent.type === 'update_expression';
|
|
940
|
+
}
|
|
941
|
+
return false;
|
|
890
942
|
};
|
|
891
943
|
for (const scope of scopes) {
|
|
892
944
|
const seen = new Map();
|